外部链接的Spring安全登录

时间:2014-01-15 06:28:35

标签: java spring spring-security

我正在开发一个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>

有人可以帮我吗?

1 个答案:

答案 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);

}