java - 在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);
}
为了更清楚地解释这个问题,一个简短的例子:
- 用户想要登陆页面 app/test/page.html
- 他获得重定向的登录页面并成功登录
- 处理程序方法被调用,我做了一些逻辑,之后我想将他重定向回 app/test/page.html,但我不知道如何在重定向到登录页面之前访问他想要登陆的 URL。
解决方案
Spring security
ExceptionTranslationFilter
在重定向到登录之前实际上将请求存储在会话中。然后它有
SavedRequestAwareAuthenticationSuccessHandler
which is aAuthenticationSuccessHandler
检索并转发给它。SavedRequestAwareAuthenticationSuccessHandler
如果您有一些自定义,则不需要直接使用它。您也可以直接从会话中获取先前的 url,session.getAttribute(""SPRING_SECURITY_SAVED_REQUEST")
并且它具有url
等method
,因此您可以自己进行重定向。如果您要走这条路线,则必须SavedRequest
先将其转换为 url 等
推荐阅读
- compression - 离散余弦变换 (DCT) 的第 0 个分量不是均值吗?
- serialization - 无 API 导出/导入 Acumatica 数据合约
- r - 提取样本间变化最小的“n”行
- pandas - 从稀疏 GPS 数据中过滤抖动点
- android - Android:在 aarch64 平台上找不到 armeabi-v7a abi 过滤器的 libopencv_java3.so
- android - 如何限制在没有 4K 摄像头的设备上安装应用程序?
- laravel - 使用redis缓存用户数据
- python - Python for 循环在用户定义的函数中不起作用
- c# - Nuget 库的多运行时目标
- excel - EPPLUS - 如何更改图表高度?