java - 身份验证后重定向到 protected 页面

标签 java spring spring-boot spring-security kotlin

默认情况下,身份验证后的Spring安全将您重定向到您之前尝试访问的 protected 页面。

当我实现自己的成功处理程序时

@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 / login页面。

基本上:
  • 用户尝试访问 protected URL /protected
  • 将用户重定向到/login
  • 身份验证后,用户应再次重定向到/protected

  • 如何使用自定义successHandler做到这一点?

    最佳答案

    在我的项目中,我使用了满足我要求的DefaultSavedRequest。成功通过身份验证后,AbstractAuthenticationProcessingFilter和SavedRequestAwareWrapper使用DefaultSavedRequest类重现请求。 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;
        }
    }
    

    关于java - 身份验证后重定向到 protected 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46774497/

    相关文章:

    java - 运行 Jar 时强制启用 spring-boot DevTools

    java - JDK-16 中 Project Lombok 的 Intellij idea 编译错误

    32bit-64bit - Java JDK 32 位与 64 位

    java - Jackson 从 Unix 格式反序列化 Joda DateTime

    java - JComponent 不会重绘

    java - 我可以将 Spring 与 MySQL 的 wamp 服务器集成吗

    java - 如果配置包含加密条目,嵌入式自配置 Spring-Cloud-Config 服务器启动失败

    java - Java中如何检查两个对象是否具有相同的值?

    json - 如何让 Spring RestTemplate、scala 和 Jackson 和谐相处

    java - Spring Boot 与 Spring Security 登录表单