Spring安全性:在登录时更改区域设置

时间:2013-06-18 09:17:24

标签: spring spring-mvc spring-security

我正在尝试根据当前登录的用户更改区域设置。虽然处理程序运行正常,但我无法理解如何将LocaleResolver传递给处理程序?

<http use-expressions="true">
        <form-login login-page="/wellcome/" login-processing-url="/login" default-target-url="/" always-use-default-target="false"
            authentication-failure-url="/wellcome/?error=1" username-parameter="email" password-parameter="password" 
            authentication-success-handler-ref="authenticationSuccessHandler" />
        <remember-me key="butler_crm" token-validity-seconds="-1" />
        <logout invalidate-session="true" logout-success-url="/" logout-url="/logout"/>
        <intercept-url pattern="/wellcome/" access="permitAll"/>
        <intercept-url pattern="/login" access="permitAll"/>
        <intercept-url pattern="/**" access="authenticated"/>
        <custom-filter ref="ajaxTimeoutRedirectFilter" after="EXCEPTION_TRANSLATION_FILTER"/>
    </http>
<beans:bean id="authenticationSuccessHandler" class="com.ejl.butler.spring.AuthenticationSuccessHandler" />

处理程序:

public class AuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {

    /*@Autowired
    private LocaleResolver localeResolver;*/

    /**
     * 
     */
    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
            throws ServletException, IOException {
        UserDetailsExtended user = (UserDetailsExtended) authentication.getPrincipal();

        /*localeResolver.setLocale(request, response, new Locale(user.getCommunicationLanguage()));*/
        super.onAuthenticationSuccess(request, response, authentication);
    }
}

1 个答案:

答案 0 :(得分:3)

为什么不实现自定义AuthenticationSuccessHandler设置语言环境,而不是实现从UserDetails对象解析语言环境的自定义LocaleResolver(使用SecurityContextHolder.getContext().getAuthentication()来获取身份验证对象)?< / p>