我遇到的问题对我来说很奇怪,所以也许有人可以提供帮助。 在我的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所以看起来因为我的成功处理程序没有得到处理,正如预期的那样,当删除处理程序时一切正常。我在这里错过了什么吗?请帮帮我。
答案 0 :(得分:3)
通常,当您未明确配置AuthenticationSuccessHandler
弹簧时,会为您配置SavedRequestAwareAuthenticationSuccessHandler
以处理成功案例。它的作用是在成功验证后将用户发送到最初请求的URL(或者在指定并强制使用配置中指定的默认页面时)。
您的自定义实现没有这样的事情它只在会话上设置并完成,它不会将任何内容发送回客户端。您可能想要的是扩展SavedRequestAwareAuthenticationSuccessHandler
做你的事情,然后致电super.onAuthenticationSuccess