Spring Security authenticationSuccessHandler和j_security_check

时间:2013-12-17 05:51:46

标签: spring authentication spring-security j-security-check

我遇到的问题对我来说很奇怪,所以也许有人可以提供帮助。 在我的security.xml中,我有这个:

<http auto-config="true">
    <intercept-url pattern="/app/admin/**" access="ROLE_ADMIN"/>
    <intercept-url pattern="/app/**" access="ROLE_ADMIN,ROLE_USER"/>
    <form-login login-page="/login" authentication-failure-url="/login?error=true" login-processing-url="/j_security_check" authentication-success-handler-ref="authSuccessHandler"/>
    <remember-me user-service-ref="userDao" key="e37f4b31-0c45-11dd-bd0b-0800200c9a66" authentication-success-handler-ref="authSuccessHandler"/>
</http>

一切正常,直到我添加:authentication-success-handler-ref =“authSuccessHandler”,这很简单,看起来像这样:

        @Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
    logger.info("authenticated");
    User user = userManager.getUserByUsername(request.getRemoteUser());
    Hibernate.initialize(user.getMessagesList());
    request.getSession(true).setAttribute("userMessages", user.getMessagesList());
}

现在一切正常,现在的问题是,在每次登录或记住我登录时,无论网址如何,访问的第一页始终是空白的。在正常登录时,出现空白的页面是/ j_security_check所以看起来因为我的成功处理程序没有得到处理,正如预期的那样,当删除处理程序时一切正常。我在这里错过了什么吗?请帮帮我。

1 个答案:

答案 0 :(得分:3)

通常,当您未明确配置AuthenticationSuccessHandler弹簧时,会为您配置SavedRequestAwareAuthenticationSuccessHandler以处理成功案例。它的作用是在成功验证后将用户发送到最初请求的URL(或者在指定并强制使用配置中指定的默认页面时)。

您的自定义实现没有这样的事情它只在会话上设置并完成,它不会将任何内容发送回客户端。您可能想要的是扩展SavedRequestAwareAuthenticationSuccessHandler做你的事情,然后致电super.onAuthenticationSuccess