2014-03-13 6 views
7

ich folgend Java Config mit Spring Security bin mit:Verwirrung um Spring Security anonymen Zugriff mit Hilfe von Java Config

protected void configure(HttpSecurity http) throws Exception { 
    http 
     .authorizeRequests() 
      .anyRequest().authenticated() 
      .and() 
     .httpBasic(); 
} 

auf dieser Konfiguration Basierend, alle Anfragen authentifiziert werden. Wenn Sie einen Controller ohne Authentifizierung berühren, erstellt AnonymousAuthenticationFilter ein Authentifizierungsobjekt für Sie mit username=anonymousUser, role=ROLE_ANONYMOUS.

Ich versuche, den anonymen Zugriff auf aa bestimmten Controller Verfahren und haben versucht, jede der folgenden zu verwenden:

  1. @Secured("ROLE_ANONYMOUS")
  2. @Secured("IS_AUTHENTICATED_ANONYMOUSLY")

Wenn die Controller-Methoden aufgerufen erhalten, die folgende Antwort wird gegeben: "HTTP-Status 401 - vollständige Authentifizierung ist erforderlich, um auf diese Ressource zuzugreifen"

Kann mir jemand helfen zu verstehen, warum wir diese Nachricht erhalten und warum ROLE_ANONYMOUS/IS_AUTHENTICATED_ANONYMOUSLY mit dieser Konfiguration nicht zu funktionieren scheint?

Danke,
JP

Antwort

3

Ihre Sicherheitskonfiguration alle nicht authentifizierte Anforderungen blockiert. Sie sollten auch mit

.antMatchers("/mycontroller").permitAll() 

Siehe Zugriff auf den Controller erlauben:

+0

Hmm ... das ist, wo ich Klarheit fehlt. Wenn ich mit der von mir angegebenen Java-Konfiguration einen Aufruf an eine gegebene URL mache, tritt der AnonymousAuthenticationFilter ein und erstellt ein Authentifizierungsobjekt, jedoch mit ROLE_ANONYMOUS, wenn ich keine Anmeldeinformationen mit Basic Auth angegeben habe. Sollte das nicht immer noch funktionieren? Ich weiß nicht, dass die Konfiguration, die Sie oben haben, notwendig sein sollte. Gedanken? – user2145809

+1

Dies ist erforderlich, da ROLE_ANONYMOUS angibt, dass der Benutzer anonym und NICHT authentifiziert ist. Beachten Sie, dass die Anmerkungen, die Sie auf dem Controller angegeben haben, die URL-basierte Sicherheit nicht überschreiben, sondern sie ergänzen, um eine detaillierte Verteidigung zu ermöglichen (d. H. Mehrere Sicherheitsebenen). –

+0

Rob, ich denke, meine Verwirrung rührt von der Annahme, dass die Verwendung von @Secured ("ROLE_ANONYMOUS") auf einer Controller-Methode mit einer bestimmten @RequestMapping (value = "/ mycontroller") - Annotation die Annotation "äquivalent" zu sagen: .antMatchers ("/ mycontroller"). permitAll() oder vielleicht .antMatchers ("/ mycontroller"). hasRole ("ROLE_ANONYMOUS"). Basierend auf dem, was Sie sagen, ist Annotation-Konfiguration kein Ersatz für die XML/Java-Konfiguration (wie @RequestMapping ist ein Ersatz für XML-Controller-Zuordnungen). Ist das richtig? – user2145809

Verwandte Themen