2010-03-03 3 views
5

J'utilise Spring Security 3.0.2 et je n'arrive pas à trouver un moyen de charger des rôles d'utilisateur anonyme à partir de la base de données (j'ai des rôles dynamiques où les rôles peuvent être donnés à tout le monde).Comment charger les rôles de la base de données pour un utilisateur anonyme dans la sécurité de printemps 3?

J'ai essayé d'utiliser un anonymousAuthenticationProvider personnalisé mais ce fournisseur n'est jamais appelé. Voici ma 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> 

Mon anonymousAuthenticationProvider est jamais appelé je ne peux pas charger les autorités douanières de base de données. Lorsque je me connecte, mon service accountDetails est appelé et je peux charger les rôles de la base de données pour l'utilisateur, je veux la même chose pour l'utilisateur anonyme.

Comment puis-je le faire? grâce

+0

Les gars, je suis dans le même problème. La question est, puis-je envoyer un paramètre reçu d'une chaîne de requête à utiliser dans mon authentification personnalisée? Si oui, comment? Pouvez-vous mettre le vôtre complet xml? Tks beaucoup! Rodrigo –

Répondre

3

Il semble que la meilleure façon d'y parvenir est de déclarer un AnonymousAuthenticationFilter avec une coutume UserAttribute, qui produira les autorités nécessaires:

<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

Dans Spring Security 4 AnonymousAuthenticationFilter perdu 'userAttribute' comme décrit ici: http://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3 -to-4-xml.html # m3to4-deprecations-web-aaf Donc cela ne va pas aider dans les versions plus récentes. – shobull

Questions connexes