2017-09-07 4 views
0

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:

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.

Antwort

0

Wenn ich Ihre Frage richtig verstanden habe, dann brauchen Sie, dass einige URL-Muster ohne Authentifizierung zugegriffen werden kann. Als in diesem Fall können Sie die folgende Methode verwenden Authentifizierung für bestimmte URL-Muster zu verhindern - können

@Override 
public void configure(WebSecurity web) throws Exception { 
    web.ignoring().antMatchers("/urlPattern"); 
} 

permitAll() Methode definiert, dass alle authentifizierten Benutzer genannte URL zugreifen Muster. Wenn Sie möchten, dass einige Benutzer auf einige Ressourcen (URL) ohne Authentifizierung zugreifen, müssen Sie die obige Methode verwenden.

+0

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) –

Verwandte Themen