2013-06-18 28 views
0

我試圖根據當前登錄的用戶更改語言環境。處理程序工作正常,I18n,但我不明白我怎麼能通過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); 
    } 
} 
+0

看看這個問題和答案一個完整的例子:http://stackoverflow.com/questions/8531649/change-locale-on-login – Ralph

+0

@Ralph問題,如果我使用該代碼,我得到的'找不到符合條件的[org.springframework.web.servlet.LocaleResolver]類型的合格bean。 – nKognito

+0

我重複了一遍,我通過對登錄事件使用事件處理程序解決了這個問題。當使用事件時,事件處理程序bean可以在spring web上下文中配置,所以本地解析器可用。 – Ralph

回答

2

而不是做一個自定義AuthenticationSuccessHandler設置語言環境,爲什麼不執行解析從的UserDetails的Locale對象(使用SecurityContextHolder.getContext().getAuthentication()獲得認證對象)的定製LocaleResolver