2017-04-27 2 views
1

Ich benutze programmitic (nicht XML) Konfiguration, um Federsicherheit zu konfigurieren. Wenn ein Benutzer versucht, auf eine geschützte Ressource zuzugreifen, ohne angemeldet zu sein, wird er standardmäßig zur Anmeldeseite weitergeleitet. Ich muss jedoch einige benutzerdefinierte Logik schreiben, anstatt immer auf die Anmeldeseite umzuleiten. Gibt es eine Möglichkeit, dies zu konfigurieren?Spring Security: Wie programmgesteuert Weiterleitungslogik zu definieren, wenn ein Benutzer nicht authentifiziert wird

http.antMatcher("/protected/**").authorizeRequests().anyRequest().authenticated()... 

Antwort

4

Angenommen, Sie Basic authentication für http verwenden, sollten Sie eine EntryPoint konfigurieren, dann können Sie das HttpServletRequest Objekt erhalten.

public class CustomBasicAuthenticationEntryPoint extends BasicAuthenticationEntryPoint { 

    @Override 
    public void commence(final HttpServletRequest request, final HttpServletResponse response, 
      final AuthenticationException authException) throws IOException, ServletException { 
     request.getDispatcherServlet().forward()... 
     response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); 
     response.addHeader("WWW-Authenticate", "Basic realm=\"" + getRealmName() + "\""); 

     PrintWriter writer = response.getWriter(); 
     writer.println("HTTP Status 401 : " + authException.getMessage()); 
    } 

    @Override 
    public void afterPropertiesSet() throws Exception { 
     setRealmName(WebSecurityConfig.REALM); 
     super.afterPropertiesSet(); 
    } 
} 

Dann fügen Sie die folgenden Sicherheits Config zum Frühling:

.and().exceptionHandling().authenticationEntryPoint(new CustomBasicAuthenticationEntryPoint()); 
Verwandte Themen