2010-03-03 13 views
5

Estoy usando Spring Security 3.0.2 y no puedo encontrar una manera de cargar roles de usuarios anónimos desde la base de datos (tengo roles dinámicos donde se pueden asignar roles a todos).Cómo cargar roles de la base de datos para usuarios anónimos en spring security 3?

He intentado utilizar un anonymousAuthenticationProvider personalizado, pero nunca se llama a este proveedor. Aquí está mi config:

<http auto-config="false"> 
    <logout invalidate-session="true" logout-success-url="/page/welcome" /> 
    <remember-me /> 
    <anonymous username="_GUEST_" granted-authority="ROLE_GUEST" key="anonymousKey" /> 
    <form-login login-page="/page/login" authentication-failure-url="/page/login?fail=1" default-target-url="/page/welcome" /> 
</http> 

<authentication-manager alias="authenticationManager"> 
    <authentication-provider ref="anonymousAuthenticationProvider"></authentication-provider> 
    <authentication-provider user-service-ref="accountDetails"> 
     <password-encoder ref="passwordEncoder"> 
      <salt-source user-property="xxxx" /> 
     </password-encoder> 
    </authentication-provider> 
</authentication-manager> 

<beans:bean id="accountDetails" class="com.mysite.AccountDetailsImpl" /> 

<beans:bean id="passwordEncoder" class="org.springframework.security.authentication.encoding.ShaPasswordEncoder"> 
    <beans:constructor-arg value="512" /> 
</beans:bean> 

<beans:bean id="anonymousAuthenticationProvider" class="com.my.site.security.CustomAnonymousAuthenticationProvider"> 
    <beans:property name="key" value="anonymousKey" /> 
</beans:bean> 

Mi anonymousAuthenticationProvider nunca es llamado así que no puedo cargar las autoridades aduaneras de la base de datos. Cuando inicio sesión, se llama a mi servicio accountDetails y puedo cargar roles de la base de datos para el usuario, quiero lo mismo para el usuario anónimo.

¿Cómo puedo hacerlo? gracias

+0

Chicos, estoy en el mismo problema. La questio es, ¿puedo enviar un parámetro recibido de una cadena de consulta para usar en mi autenticación personalizada? Si es así, ¿cómo? ¿Puedes poner el tuyo xml completo? ¡Muchas gracias! Rodrigo –

Respuesta

3

Parece ser que la forma más fácil de lograrlo es declarar un AnonymousAuthenticationFilter con una costumbre UserAttribute, que producirá las autoridades requeridas:

<http auto-config = "false"> 
    <anonymous enabled = "false" /> 
    <custom-filter ref = "myFilter" position = "ANONYMOUS_FILTER" /> 
    ... 
</http> 

<beans:bean id = "myFilter" class = "org.springframework.security.web.authentication.AnonymousAuthenticationFilter"> 
    <beans:property name = "key" value = "anonymousKey" /> 
    <beans:property name = "userAttribute" ref = "myAttributes" /> 
</beans:bean> 

<beans:bean id = "myAttributes" class = "..." /> 
+0

En la primavera de Seguridad 4 AnonymousAuthenticationFilter perdieron 'userAttribute' como se describe aquí: http://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3 -to-4-xml.html # m3to4-deprecations-web-aaf Esto no ayudará en las versiones más nuevas. – shobull

Cuestiones relacionadas