首页 > 解决方案 > 在spring应用程序中使用onAuthenticationSuccess登录页面后将用户重定向到原始url

问题描述

我有一个AuthenticationSuccessHandler在用户成功登录后捕获请求的实现。因此,在处理程序内部完成处理后,我想将用户重定向到他首先想要去的页面,然后再将他重定向到登录页面,而不是一些硬编码的页面。这可能吗?

这就是我的处理程序实现的样子:

@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
        Authentication authentication) throws IOException, ServletException {
    
    Util.setUserdata(userBean, authentication, request);
    
    proceed(request, response, authentication);
}

为了更清楚地解释这个问题,一个简短的例子:

  1. 用户想要登陆页面 app/test/page.html
  2. 他获得重定向的登录页面并成功登录
  3. 处理程序方法被调用,我做了一些逻辑,之后我想将他重定向回 app/test/page.html,但我不知道如何在重定向到登录页面之前访问他想要登陆的 URL。

标签: javaspringspring-boottomcat

解决方案


  • Spring securityExceptionTranslationFilter在重定向到登录之前实际上将请求存储在会话中。

  • 然后它有SavedRequestAwareAuthenticationSuccessHandlerwhich is aAuthenticationSuccessHandler检索并转发给它。

  • SavedRequestAwareAuthenticationSuccessHandler如果您有一些自定义,则不需要直接使用它。您也可以直接从会话中获取先前的 url,session.getAttribute(""SPRING_SECURITY_SAVED_REQUEST")并且它具有urlmethod,因此您可以自己进行重定向。如果您要走这条路线,则必须SavedRequest先将其转换为 url 等


推荐阅读