2010-03-03 12 views
5

Ich benutze Spring Security 3.0.2 und ich finde keine Möglichkeit, Rollen von anonymen Benutzer aus der Datenbank zu laden (Ich habe dynamische Rollen, wo Rollen an alle vergeben werden können).Wie lade ich Rollen aus der Datenbank für anonyme Benutzer im Frühling Sicherheit 3?

Ich habe versucht, einen benutzerdefinierten anonymousAuthenticationProvider zu verwenden, aber dieser Anbieter wird nie aufgerufen. Hier ist meine 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> 

Mein anonymousAuthenticationProvider nie so genannt wird, kann ich nicht Zollbehörden aus der Datenbank laden. Wenn ich mich anmelde, wird mein Dienst accountDetails aufgerufen und ich kann Rollen aus der Datenbank für den Benutzer laden, ich möchte das gleiche für anonyme Benutzer.

Wie kann ich es tun? Dank

+0

Leuten, ich bin in dem gleichen Problem. Das Questio ist, kann ich einen Parameter senden, der von einem Querystring empfangen wird, um in meiner benutzerdefinierten Authentifizierung zu verwenden? Wenn ja, wie? Kannst du deine komplette XML-Datei einfügen? Tks viel! Rodrigo –

Antwort

3

Es scheint zu sein, dass der einfachste Weg, es zu erreichen, ist ein AnonymousAuthenticationFilter mit einem benutzerdefinierten UserAttribute, zu erklären, die die erforderlichen Behörden produzieren:

<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

In Spring Security 4 AnonymousAuthenticationFilter verloren 'userAttribute' wie hier beschrieben: http://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3 -to-4-xml.html # m3to4-depreciations-web-aaf Das wird in neueren Versionen nicht helfen. – shobull