2016-12-09 3 views
2

ich in meinem Frühjahr Boot-Projekt und stellte sich mit dem folgenden Problem auf Sicherheitsschicht arbeiten:SecurityContextHolder.getContext() getAuthentication() liefert String

SecurityContextHolder.getContext().getAuthentication() 

Dieser Code gibt Folgendes zurück:

  • String "AnonymousUser" anonymen Benutzer
  • UserDetails Objekt für authentifizierte Benutzer

Also, ich möchte diesen Code für beide Fälle UserDetails zurückgeben konfigurieren. Wie kann ich es tun?

Wie ich denke, muss ich benutzerdefinierte AnonymousAuthenticationFilter implementieren. Hab ich recht?

Antwort

3

Wie ich denke, muss ich benutzerdefinierte AnonymousAuthenticationFilter implementieren. Bin ich richtig?

Es gibt einen einfacheren Ansatz und das ist die anonymous() Methode des HttpSecurity DSL. Verwenden Sie einfach diesen Block Ihre principal gewünscht einzustellen:

@Configuration 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 
    // other configuration methods 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     UserDetails anonymousUserDetails = // your custom UserDetails for anonymous case 
     http 
       // other configurations 
       .anonymous() 
        .principal(anonymousUserDetails); 
    } 
} 

einen Null Object Pattern -ish Ansatz kann für anonyme Benutzer eine gute Idee für die individuelle UMSETZUNG sein.

Verwandte Themen