2017-10-16 2 views
1

Ich habe ein Problem. Die Spring-Sicherheit nach der Authentifizierung leitet Sie standardmäßig auf die geschützte Seite um, auf die Sie zuvor zugegriffen haben.Frühlingssicherheit. Zur geschützten Seite nach Authentifizierung umleiten

Wenn ich meinen eigenen Erfolg Handler implementieren

@Component 
class MyS: AuthenticationSuccessHandler { 
    override fun onAuthenticationSuccess(request: HttpServletRequest?, response: HttpServletResponse?, authentication: Authentication?) { 

     response?.sendRedirect(request?.getHeader(HttpHeaders.REFERER)) 

    } 
} 

class SecurityConfigTH(@Autowired private val myHandler: MyS) : WebSecurityConfigurerAdapter() { 
... 
    .formLogin() 
     .loginPage("/en/login") 
     .successHandler(myHandler) 
     .permitAll() 
} 

Ich kann nicht die gleiche Wirkung erzielen. Ich versuchte Redirect zu Referrer, aber in diesem Fall Referrer ist/en/Login-Seite.

Grundsätzlich gilt:

  1. Benutzer versuchen geschützt Zugang url /protected
  2. Redirect Benutzer /login Seite
  3. Nach der Authentifizierung Benutzer sollte /protected wieder

weitergeleitet Wie es zu tun mit kundenspezifischer successHandler?

Antwort

1

In meinem Projekt verwendete ich DefaultSavedRequest, die meine Anforderung abgeschlossen. DefaultSavedRequest Klasse wird von AbstractAuthenticationProcessingFilter und SavedRequestAwareWrapper verwendet, um die Anforderung nach erfolgreicher Authentifizierung zu reproduzieren. Eine Instanz dieser Klasse wird zum Zeitpunkt einer Authentifizierungsausnahme von ExceptionTranslationFilter gespeichert.

https://docs.spring.io/spring-security/site/docs/4.1.2.RELEASE/apidocs/org/springframework/security/web/savedrequest/DefaultSavedRequest.html

@Override 
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) 
     throws IOException, ServletException { 
    DefaultSavedRequest defaultSavedRequest = (DefaultSavedRequest) session.getAttribute("SPRING_SECURITY_SAVED_REQUEST"); 
    if(defaultSavedRequest != null){ 
     String targetURL = defaultSavedRequest.getRedirectUrl(); 
     redirectStrategy.sendRedirect(request, response, targetURL); 
     return; 
    } 
} 
0

Dank Mhod Antwort tat dies der Trick.

@Component 
class MyS: AuthenticationSuccessHandler { 
    override fun onAuthenticationSuccess(request: HttpServletRequest?, response: HttpServletResponse?, authentication: Authentication?) { 

     val defaultSavedRequest = request?.session?.getAttribute("SPRING_SECURITY_SAVED_REQUEST") as DefaultSavedRequest 
     response?.sendRedirect(defaultSavedRequest.requestURI) 

    } 
} 
Verwandte Themen