Más filtros de los que explicamos en el artÃculo anterior se puede usar en Spring Security, donde vimos los filtros esenciales para la configuración de nuestra capa de seguridad.
AnonymousProcessingFilter
Este filtro es muy util, nos permite darle acceso a un usuarios anónimos a secciones del sistema, digamos que la pagina de registro debe ser de acceso anónimo, en el FilterChainProxy agregamos otra linea donde colocamos el recurso y le asignamos el filtro, ese recurso sera accesible siempre y cuando en el FilterSecurityInterceptor también podemos hacer uso del Rol que indicamos que seran Roles para identificar al usuario anónimo.
<bean id="anonymousProcessingFilter" class="org.springframework.security.providers.anonymous.AnonymousProcessingFilter"> <property name="key"> <value>MU7kyU0he1MvXEDZ9Mdj7MVvkXOXJ8uRgtg/Xb/3eJyW0HZa3csBoyvinGEC4vmi</value> </property> <property name="userAttribute"> <value>anonymousUser,ENCUESTAME_ANONYMOUS </value> </property> </bean>
ExceptionTranslationFilter
Maneja cualquier AccessDeniedException y AuthenticationException arrojados dentro de la cadena de filtro. Este filtro es necesario, ya que proporciona el puente entre las excepciones de Java y las respuestas HTTP. Sólo se ocupan de mantener la interfaz de usuario. Este filtro no hace ninguna garantÃa real de la ejecución. Para utilizar este filtro, es necesario especificar las siguientes propiedades:
- authenticationEntryPoint indica que el controlador debe comenzar el proceso de autenticación si un AuthenticationException se detecta. Tenga en cuenta que esto también puede cambiar el actual protocolo de http a https para un inicio de sesión SSL.
- portResolver (opcional) Se utiliza para determinar el “verdadero” puerto por la que fue recibida la petición.
<bean id="exceptionTranslationFilter" class="org.springframework.security.ui.ExceptionTranslationFilter"> <property name="authenticationEntryPoint"> <ref local="authenticationEntryPoint" /> </property> </bean>
BasicProcessingFilterEntryPoint
Este filtro es responsable de la tramitación de cualquier solicitud que tiene un encabezado de petición HTTP Authorization con un sistema de autenticación Basica y una codificación username:password simbólico. Por ejemplo, para autenticar el usuario “Aladdin”, con contraseña “ábrete Sésamo” el siguiente encabezado se mostrara como el siguiente ejemplo, (Autorización: Básica QWxhZGRpbjpvcGVuIHNlc2FtZQ == ). Si la autorización es satisfactoria, el objetoAuthentication se colocará en el SecurityContextHolder.
<bean id="authenticationEntryPoint" class="org.springframework.security.ui.basicauth.BasicProcessingFilterEntryPoint"> <property name="realmName"><value>EmForge</value></property> </bean>
LogoutFilter
Se necesita una forma de cerrar sesión, el LogoutFilter es la solución perfecta, indicamos en el constructor del bean el lugar donde seremos dirigidos cuando cerremos la sesión, y una lista de beans o manejadores de Cerrar sesión, por defecto se debe usar el SecurityContextLogoutHandler, aunque puedes personalizar el tuyo propio.
<bean id="logoutFilter" class="org.springframework.security.ui.logout.LogoutFilter"> <constructor-arg value="/pages/index.me" /> <constructor-arg> <list> <!-- <ref bean="rememberMeServices"/> --> <bean class="org.springframework.security.ui.logout.SecurityContextLogoutHandler" /> </list> </constructor-arg>
AuthenticationProcessingFilterEntryPoint
AuthenticationProcessingFilterEntryPoint, es el bean que nos redirecionará a la pantalla de la aplicación donde se inicia sesión, o a donde nosotros queramos por eso la propiedad loginFormUrl. En el caso en que los credenciales no sean correctos se utliza el objeto AccessDeniedHandlerImpl, y en su propiedad errorPage se le especifica a que camino se debe dirigir la aplicación en caso de error.
<bean id="formEntryPoint" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint"> <property name="loginFormUrl" value="/login.faces"/> </bean>
Estos son los filtros más usados y que podemos aplicar a nuestra seguridad, junto con los explicados anteriormente son una magnifica opción para crear nuestra seguridad, y como ven, con muy poca programación. En el siguiente artÃculo veremos la integración del OPENID en Spring Security.


fabiavmz
on Sep 1st, 2009
@ 11:19:
Hola, he intentado aplicar el filtro de logout, añadiéndolo en el security.xml, sin embargo no afecta en nada al comportamiento de mi aplicación a la hora de salir. ¿Es necesario realizar alguna modificación en el web.xml?
jotadeveloper
on Sep 1st, 2009
@ 11:52:
que raro, no se como es tu aplicación, pero el Spring Security es a nivel de servlets y filtros, el logout que usamos es la siguiente clase.
https://fisheye.springsource.org/viewrep/spring...
Como ves , lo que hace es invalidar las sesión unicamente.
Saludos !
fabiavmz
on Sep 2nd, 2009
@ 2:06:
Finalmente lo he conseguido, para ello, he tenido que indicar la posición de mi filtro de logout:
<beans:bean id=”logoutFilter” class=”org.springframework.security.ui.logout.LogoutFilter”>
<security:custom-filter before=”LOGOUT_FILTER”/>
<beans:constructor-arg value=”/login.jsp” /> <!– URL redirected to after logout –>
<beans:constructor-arg>
<beans:list>
<beans:bean id=”myLogoutHandler” class=”com.foo.MyLogoutHandler” />
</beans:list>
</beans:constructor-arg>
<beans:property name=”filterProcessesUrl” value=”/j_spring_security_logout” />
</beans:bean>
fabiavmz
on Sep 2nd, 2009
@ 2:49:
¿Sabes si serÃa posible capturar el timeout de la sesión, para llevar a cabo una acción similar a la del logout?
jotadeveloper
on Sep 2nd, 2009
@ 7:14:
si quieres dar una funcionalidad similar al logout.LogoutFilter, deberias extender esta clase y personalizarla, asi he echo yo con el login, pero no estoy seguro si eso es lo que quieres hacer. Si te refieres al tiempo de la sesión, no se fijate.