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:
@Secured("ROLE_ANONYMOUS")
@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
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
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). –
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