2017-10-16 135 views
1

我遇到問題。默認情況下,身份驗證後的彈性安全將您重定向到您之前嘗試訪問的受保護頁面。Spring Security。認證後重定向到受保護的頁面

當我實現我自己的成功處理程序

@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() 
} 

我不能達到同樣的效果。我嘗試重定向到引用,但在這種情況下引用是/ en /登錄頁面。

基本上是:

  1. 用戶試圖訪問受保護的URL /protected
  2. 重定向用戶到/login
  3. 認證之後用戶應重定向到/protected再次

如何使用做自定義的成功處理程序?

回答

1

在我的項目中,我用DefaultSavedRequest完成了我的要求。 DefaultSavedRequest類由AbstractAuthenticationProcessingFilter和SavedRequestAwareWrapper在成功驗證後重現請求。這個類的一個實例在ExceptionTranslationFilter發生認證異常時被存儲。

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

由於Mhod的回答這並獲得成功。

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

    } 
} 
相關問題