Ich arbeite an einem Webprojekt mit verschiedenen Spring Boot WebMVC Clients. Einige dieser Clients benötigen eine Autorisierung und ich habe sie mit einem Spring Security OAuth2 Server gelöst. Die Authentifizierung funktioniert gut und ich hatte keine Probleme. Einige Kunden benötigten kein Login und sie sind öffentlich für alle.Spring Security OAuth2 - optionale Anmeldung mit Serverprüfung
Technische Fakten: Alle Clients verwenden eine Mischung aus Angular, jQuery und einfachen JSPs. Alle Apps nutzen Spring Security und die öffentliche App-Konfiguration ist wie folgt:
@Override
protected void configure(final HttpSecurity http) throws Exception {
http.antMatcher("/**")
.authorizeRequests()
.antMatchers("/**").permitAll()
.antMatchers("/fonts/**").permitAll()
.anyRequest().authenticated();
}
Nun meine Frage: Ich plane ein Login (oder Abmelden) Taste in der Kopfzeile aller Anwendungen zu bauen. In den Apps mit einer erforderlichen Authentifizierung ist das kein Problem. Ich kann überprüfen, ob der Prinzipal null ist oder nicht. Aber wie kann ich das in öffentlichen Apps lösen? Der Prinzipal ist immer null und der Client hat den Authentifizierungsstatus mit dem Server nicht überprüft. Ich hatte einige Ideen, um es zu beheben, aber nichts funktioniert. Der beste Weg wäre eine automatische Überprüfung im Spring Boot. Aber wie kann ich das konfigurieren? Vielleicht kann ich es mit JavaScript überprüfen, aber meine Aufnahmen haben auch nicht funktioniert.
Vielleicht würde es helfen - zwei meiner apps:
- https://www.planyourtrip.travel (öffentliche Anwendung)
- https://profile.planyourtrip.travel (memberonly Anwendung)
UPDATE: Vielleicht ein besseres Beispiel
Wenn ich eine öffentliche App wie diese konfiguriere
@Configuration
@EnableOAuth2Sso
public static class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(final HttpSecurity http) throws Exception {
http.antMatcher("/**")
.authorizeRequests()
.antMatchers("/**").permitAll()
.anyRequest().authenticated();
}
}
und das MVC-Controller wie diese
@RequestMapping("/{([a-z]{2})}")
public ModelAndView start(final Principal principal) {
return new ModelAndView("start");
}
dann ist der Auftraggeber immer null. Ich denke, das ist mein Problem. Ich brauche eine Überprüfung mit dem OAuth-Server und wenn ich mich angemeldet habe, ist der Prinzipalsatz und wenn ich nicht eingeloggt bin, sollte es null sein.
Danke für Ihre Antwort, aber ich meinte das nicht. Ich habe kein Problem mit "kann ohne Authentifizierung zugegriffen werden". Das funktioniert gut mit permitAll(). Mein Problem ist, dass der Principal bei dieser Lösung niemals null ist. Ich brauche eine optionale Überprüfung mit dem oauth Server: public ModelAndView start (endgültiger Principal Principal) –