我正在开发一个Web应用程序,并且我已经集成了spring security以进行身份验证。我正在使用spring的默认登录页面。从其他应用程序和某些文档中为我的应用程序提供了外部链接。我为这些链接编写了控制器,以便在成功登录后向用户显示所需的数据。我的问题是,当我从其他应用程序或文档访问链接时,我将被带到登录页面(如果用户未登录,则会出现这种情况),然后我被重定向到之前请求的URL的应用程序的主页。这种情况一直发生在我从这些链接访问并请求登录时,即使会话处于活动状态,然后再转到主页。如果将URL复制并粘贴到同一浏览器中,则可以正常工作。这可能是什么原因发生的?
这是我的spring配置文件
<security:http auto-config="true">
<security:intercept-url pattern="/**" access="ROLE_EDIT,ROLE_VIEW" />
<security:session-management invalid-session-url="/">
</security:session-management>
</security:http>
<security:authentication-manager>
<!--my custom authentication-->
</security:authentication-manager>
有人可以帮我吗?
答案 0 :(得分:1)
您可以创建自己的AuthenticationSuccessHandler。像这样的东西
<http auto-config="true">
<http-basic />
<form-login authentication-success-handler-ref="customAuthenticationSuccessHandler"/>
</http>
在customAuthenticationSuccessHandler中,您可以覆盖onAuthenticationSuccess方法并编写自己的代码以识别请求URL,并相应地重定向到相同的内容(如果它来自外部应用程序)。
public class CustomAuthenticationSuccessHandler extends
SavedRequestAwareAuthenticationSuccessHandler {
@Override
public void onAuthenticationSuccess(HttpServletRequest request,
HttpServletResponse response, Authentication authentication)
throws ServletException, IOException {
UserDetails userDetails = (UserDetails) authentication
.getPrincipal();
// CODE TO IDENTIFY THE REQUEST URL AND REDIRECT TO SAME IF IT IS EXTERNAL URL(FROM OTHER APP).
super.onAuthenticationSuccess(request, response, targetUrl);
}