1

我遇到了一个对我来说很奇怪的问题,所以也许有人可以提供帮助。在我的 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());
}

现在一切正常,现在的问题是,在每次登录或 rememberMe 登录时,无论 URL 是什么,访问的第一页总是空白。在正常登录时,出现空白的页面是 /j_security_check 所以似乎由于我的成功处理程序而没有处理某些内容,正如删除处理程序时所预期的那样,一切正常。我在这里错过了什么吗?请帮帮我。

4

1 回答 1

4

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

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

于 2013-12-17T06:55:03.003 回答