2010-10-17 23 views
5

Estoy usando Spring Security 3.0 con JSP. Creé un RequireVerificationFilter que redirige a los usuarios no verificados a una página de "verificar tu correo electrónico".Spring Security 3.0: ¿Cómo especifico las URL a las que se aplica un filtro personalizado?

he añadido el filtro a la pila de filtros de seguridad de primavera en el último lugar de este modo:

definición de la haba en mi aplicación-config.xml:

<bean id="requireVerificationFilter" class="com.ebisent.web.RequireVerificationFilter" /> 

Filtro añadió a la primavera lista de filtros de seguridad en mi seguridad-config.xml:

<custom-filter ref="requireVerificationFilter" after="LAST" /> 

El filtro funciona, pero se filtra su propia URL de redirección. Es decir, el filtro redirecciona a los usuarios no verificados a/access/verify, pero esa URL también es captada por el filtro, que intenta redirigir ad infinitum.

Intenté usar la etiqueta <filter-mapping> para restringir las URL a las que se aplica este nuevo filtro, pero parece que no funciona de la manera que pensé. Aquí está la entrada web.xml he añadido todos modos:

<filter> 
     <filter-name>requireVerificationFilter</filter-name> 
     <filter-class>com.ebisent.web.RequireVerificationFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>requireVerificationFilter</filter-name> 
     <url-pattern>/account/*</url-pattern> 
    </filter-mapping> 

leí "Adición de sus propios filtros" en el documention seguridad de la primavera, pero no encontró una respuesta.

Mi pregunta es, ¿cómo puedo especificar a qué URL se aplica mi filtro?

ACTUALIZACIÓN:

Tengo este trabajo especificando la dirección URL para que dentro del propio filtro. Esto funciona bien para mí, pero si hay una mejor/más "elástica" forma de hacerlo, me gustaría escucharlo.

Respuesta

2

que tiene que hacer esto dentro del xml configuración real (el mismo lugar que tiene el Algo <custom-filter ref="requireVerificationFilter" after="LAST" />.

<http ...> 
    <intercept-url pattern="/access" ... filters="..., requireVerificationFilter, ..." /> 
    <intercept-url pattern="/verify" ... filters="none" /> 
    ... 
</http> 

lo largo de esas líneas, se puede especificar una lista de los filtros que desea ejecutar y excluir a aquellos que do not (y "none" significa none). No necesita agregar filtro tyour al web.xml - solo en línea con la cadena de filtro Spring Security

+0

¡Gracias! Tengo etiquetas de URL de intercepción en mi configuración de seguridad, pero no sabía que podrías especificar filtros allí. – outis

+5

Pero [Spring Security Reference Documentation] (http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#nsa-intercept-url-parents) dice que: atributo 'filters'" Solo puede tomar el valor "none" ". – btpka3

3

Debe usar org.springframework.security.web.FilterChainProxy para esto. El filtro de atributo debe solo containts none:

<http ...> 
     <custom-filter ref="requireVerificationFilterChain" after="LAST" /> 
</http> 

<b:bean id="requireVerificationFilterChain" class="org.springframework.security.web.FilterChainProxy"> 
     <filter-chain-map request-matcher="ant"> 
      <filter-chain pattern="/account/*" filters="requireVerificationFilter"/> 
     </filter-chain-map> 
</b:bean> 
<b:bean id="requireVerificationFilter" class="com.ebisent.web.RequireVerificationFilter" /> 
+0

Esta solución funcionó para mí, ¡Gracias! –

Cuestiones relacionadas