【问题标题】:Redirect to protected page after authentication身份验证后重定向到受保护的页面
【发布时间】:2018-03-28 05:19:03
【问题描述】:

默认情况下,身份验证后的 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()
 }

我无法达到同样的效果。我尝试重定向到referrer,但在这种情况下,referrer 是/en/login 页面。

基本上:

  1. 用户尝试访问受保护的 url /protected
  2. 将用户重定向到/login页面
  3. 身份验证后,用户应再次重定向到/protected

自定义的successHandler怎么做?

【问题讨论】:

    标签: java spring spring-boot spring-security kotlin


    【解决方案1】:

    在我的项目中,我使用了满足我要求的DefaultSavedRequestDefaultSavedRequest 类被 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;
        }
    }
    

    【讨论】:

      【解决方案2】:

      感谢 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)
      
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-11
        • 2014-11-20
        • 2011-09-03
        • 1970-01-01
        • 2012-08-12
        • 2011-09-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多