当前位置: 首页 > 知识库问答 >
问题:

身份验证后重定向到受保护页面

尚楚
2023-03-14

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

我不能达到同样的效果。我试图重定向到referer,但在本例中,referer是/en/login页面。

基本上:

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

如何使用custom successHandler实现这一点?

共有2个答案

尹臻
2023-03-14

多亏了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)

    }
}
刘选
2023-03-14

在我的项目中,我使用了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;
    }
}
 类似资料:
  • 试图阻止来宾用户的路由。当有人点击时,它将检查用户是否以管理员身份登录。如果admin然后它工作正常,如果代理然后它重定向到登录页面,但如果我作为访客用户点击链接,它不会将我重定向到登录页面,而是显示一些错误: 路由中的错误异常。php第53行:尝试获取非对象的属性。 这是我的路线。php文件:

  • 我正在laravel中创建一个多身份验证系统,其中有两种类型的用户:管理员(由我创建)和用户(使用本地laravel身份验证系统)。 如果我以用户身份登录,当我尝试访问登录页面时,当我已经登录,它会将我重定向回仪表板,但如果我以管理员身份登录,当我再次访问管理员登录页面时,它会让我再次登录,尽管已经作为管理员登录。 以下是我的重定向身份验证类代码: 有人能解释一下发生了什么事吗?

  • 问题内容: 我正在尝试将HttpServletRequest.login与基于表单的身份验证一起使用。 一切正常(容器会告诉您登录名/密码是否正确),除了在用户输入登录名之后,我不知道如何将用户重定向到他要求的受保护页面(重新显示登录表单)。怎么做? 在此先感谢您的帮助。 代码: web.xml: 页面loginwithlogin.xhtml 更新:没有Ajax,它将不起作用。 后备豆: 问题答案

  • 我的管理员控制器扩展了控制器类,在那里我使用方法加载视图页面并传递保护。config/auth.php也通过添加管理员保护和提供程序进行了修改。在app/Actions/Fortify文件夹中,我添加了AttemptToAuthenticate和ReDirectIfTwoFactorAuthenticate类,并更改了命名空间。我的管理员控制器还扩展了Guard。用户的重定向中间件和管理员的重定向

  • 我目前正在使用FirebaseAuth和web小部件库firebaseui web开发基于VueJS的登录流原型。 成功认证后(无论是< code>password还是< code>google provider ),小部件加载栏会不断重复,firebaseui-web不会触发其< code > signinseccesswithauthresult 回调。但是对< code > identity

  • 我在auth中间件方面遇到了一些问题。我将中间件放在一个路由组中,并回滚了users表。我希望应用程序将我重定向到我的登录/搜索页面,但它没有这样做,它只是给了我“尝试获取非对象的属性”,它指的是我的仪表板视图中的函数(我不应该访问该函数)。 这是我的路线代码: 以下是我的观点: 另外,我不确定从数据库中删除用户是否意味着Laravel将自动删除用户会话。 谢谢你的帮助!