com.ejie.r01f.servlet.filter.authorization
Class R01FAuthServletFilter
java.lang.Object
com.ejie.r01f.servlet.filter.authorization.R01FAuthServletFilter
- All Implemented Interfaces:
- javax.servlet.Filter
- public class R01FAuthServletFilter
- extends java.lang.Object
- implements javax.servlet.Filter
Filtro de entrada para control de la seguridad basada en XLNets de forma declarativa.
La configuración de seguridad se declara en el fichero [codApp].properties.xml incluyendo una
seccion como la del siguiente ejemplo:
com.ejie.r01f.xlnets.R01FXLNetsSecurityProvider
[Expresion regular para machear la uri que se solicita]
-
[Nombre en castellano]
[Nombre en euskera]
-
[Nombre en castellano]
[Nombre en euskera]
....
....
Notas:
useSession: Indica si la información de autorizacion se almacena en memoria o bien hay que
volver a obtenerla cada vez que se accede al recurso
override: Indica si se ha de ignorar la configuracion de seguridad (no hay seguridad)
provider: Configuración del provider de seguridad
className: La clase que se encarga de consultar el almacén de seguridad
Puede utilizarse XLNets o un povider que obtiene la seguridad de BD
target: Un recurso que se protege
id: Identificador del recurso
kind: Tipo de protección
allow -> Permitir el acceso
restrict-> restringir el acceso
uri: Una expresión regular con la url del recurso.
resources: Elementos sobre los que hay que comprobar si el usuario tiene acceso
NOTA: Si el tipo es allow, NO se comprueban los recursos
resource Elemento individual sobre el que hay que comprobar si el usuario tiene acceso
oid: El oid del objeto de seguridad
En el caso de XLNets el oid puede corresponder al uid de una función o un
tipo de objeto
mandatory true/false: Indica si este item es OBLIGATORIO, lo cual implica que en caso de
no tener acceso, se prohibirá el acceso al recurso.
Si en todos los items mandatory es false, se permitirá el acceso aunque
no haya autorización a los items, sin embargo, la información de seguridad se
dejará en sesion.
type: El tipo de elemento a comprobar
En el caso de XLNets el tipo puede ser
function: Una funcion
object: Un tipo de objeto
es/eu La descripcion en euskera y castellano del item de seguridad
Se pueden definir múltiples recursos en una aplicacion, cada uno de ellos tendrá asociada una expresión regular
con la URI. Cuando llega una petición, se aplicará la configuración de seguridad del primer recurso cuya uri
machee la url solicitada al filtro.
La secuencia de autorizacion es la siguiente:
1.- INSTANCIAR EL PROVIDER DE AUTORIZACION ESPECIFICADO EN LA CONFIGURACION
2.- COMPROBAR SI EL USUARIO ESTÁ AUTENTICADO
Se llama al método getContext() para ver si el usuario está autenticado y si es así obtener el contexto de
autenticación de usuario
Aquí a su vez se pueden dar dos casos:
2.1 - EL USUARIO NO ESTA AUTENTICADO
Si el usuario NO está autenticado se le dirige a la página de login llamando
al metodo redirectToLogin() del provider de autorizacion
2.2 - EL USUARIO ESTA AUTENTICADO PERO NO HAY INFORMACION DE CONTEXTO DE AUTORIZACION EN LA SESION
El usuario ha hecho login, pero es la primera vez que entra al recurso y no hay información de
contexto de autorizacion en la sesion. El provider en la llamada a al funcion getContext() devuelve
todos los datos del usuario y de la sesión de seguridad en la que esta autenticado
Ahora ya se está como en el caso 2.3 (siguiente caso)
2.3 - EL USUARIO ESTÁ AUTENTICADO Y HAY INFORMACION DE CONTEXTO DE AUTORIZACION EN LA SESION
Si en la sesión hay información de contexto, se busca en el contexto la informacion de autorizacion
del destino solicitado. Pueden darse dos casos:
2.3.1 - En el contexto NO hay informacion de autorizacion del destino (es la primera vez que se accede)
Se llama a la funcion authorize() del provider de seguridad que se encarga obtener
la autorizacion correspondiente.
A partir de este momento, esta información de autorización se mantiene en sesión
y no es necesario volver a pedirla al provider de seguridad
2.3.2 - En el contexto HAY informacion de autorizacion del destino (ya se ha accedido al recurso)
Directamente se devuelve la informacion de autorizacion almacenada en sesion
REINICIALIZACION EN CALIENTE:
Si se quiere re-inicializar los valores de configuracion de autorizacion
basta con llamar a cualquier servlet securizado con el parametro: reload=true
(esto no es demasiado seguro!!! quitarlo en prod)
Method Summary |
void |
destroy()
|
void |
doFilter(javax.servlet.ServletRequest request,
javax.servlet.ServletResponse response,
javax.servlet.FilterChain chain)
|
javax.servlet.FilterConfig |
getFilterConfig()
Devuelve la configuración del filtro |
void |
init(javax.servlet.FilterConfig config)
|
static void |
main(java.lang.String[] args)
Mondongo para probar el temilla de la carga de la configuracion... |
void |
setFilterConfig(javax.servlet.FilterConfig filterConfig)
Establece la configuración del filtro |
Methods inherited from class java.lang.Object |
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
R01FAuthServletFilter
public R01FAuthServletFilter()
- Constructores
init
public void init(javax.servlet.FilterConfig config)
throws javax.servlet.ServletException
- Specified by:
init
in interface javax.servlet.Filter
- Throws:
javax.servlet.ServletException
doFilter
public void doFilter(javax.servlet.ServletRequest request,
javax.servlet.ServletResponse response,
javax.servlet.FilterChain chain)
throws java.io.IOException,
javax.servlet.ServletException
- Specified by:
doFilter
in interface javax.servlet.Filter
- Throws:
java.io.IOException
javax.servlet.ServletException
destroy
public void destroy()
- Specified by:
destroy
in interface javax.servlet.Filter
getFilterConfig
public javax.servlet.FilterConfig getFilterConfig()
- Devuelve la configuración del filtro
- Returns:
- La configuracion del filtro
setFilterConfig
public void setFilterConfig(javax.servlet.FilterConfig filterConfig)
- Establece la configuración del filtro
main
public static void main(java.lang.String[] args)
- Mondongo para probar el temilla de la carga de la configuracion...
- Parameters:
args
- the command line arguments