Sử dụng SessionLocaleResolver và xây dựng nó làm hạt được gọi là "localeResolver". LocaleResolver này sẽ giải quyết các ngôn ngữ bằng cách đầu tiên kiểm tra miền địa phương mặc định mà trình giải quyết được xây dựng. Nếu đó là null, nó sẽ kiểm tra nếu một miền địa phương đã được lưu trữ trong phiên, và nếu đó là null, nó sẽ thiết lập miền địa phương phiên dựa trên tiêu đề Accept-Language trong yêu cầu.
Sau khi người dùng đăng nhập, bạn có thể gọi localeResolver.setLocale để lưu ngôn ngữ vào phiên cho bạn, bạn có thể thực hiện việc này trong bộ lọc servlet (đảm bảo xác định nó trong web.xml SAU bộ lọc).
Để truy cập vào localeResolver của bạn (hoặc đậu khác) từ bộ lọc của bạn, làm một cái gì đó như thế này trong phương thức init:
@Override
public void init(FilterConfig fc) throws ServletException {
ServletContext servletContext = fc.getServletContext();
ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext);
this.localeResolver = context.getBean(SessionLocaleResolver.class);
}
Sau đó, trong doFilterMethod, bạn sẽ có thể cast ServletRequest đến một HttpServletRequest, gọi getRemoteUser, thực hiện bất kỳ logic nghiệp vụ nào để định nghĩa miền địa phương của người dùng đó và gọi setLocale trên LocaleResolver.
Cá nhân, tôi không quan tâm đến SessionLocaleResolver để sử dụng địa phương mặc định trước tiên (tôi thích cuối cùng), tuy nhiên nó thực sự dễ dàng mở rộng và ghi đè. Nếu bạn quan tâm đến việc kiểm tra phiên giao dịch, sau đó yêu cầu, sau đó mặc định, sử dụng như sau:
import org.springframework.stereotype.Component;
import org.springframework.web.util.WebUtils;
import javax.servlet.http.HttpServletRequest;
import java.util.Locale;
// The Spring SessionLocaleResolver loads the default locale prior
// to the requests locale, we want the reverse.
@Component("localeResolver")
public class SessionLocaleResolver extends org.springframework.web.servlet.i18n.SessionLocaleResolver{
public SessionLocaleResolver(){
//TODO: make this configurable
this.setDefaultLocale(new Locale("en", "US"));
}
@Override
public Locale resolveLocale(HttpServletRequest request) {
Locale locale = (Locale) WebUtils.getSessionAttribute(request, LOCALE_SESSION_ATTRIBUTE_NAME);
if (locale == null) {
locale = determineDefaultLocale(request);
}
return locale;
}
@Override
protected Locale determineDefaultLocale(HttpServletRequest request) {
Locale defaultLocale = request.getLocale();
if (defaultLocale == null) {
defaultLocale = getDefaultLocale();
}
return defaultLocale;
}
}
Vì bạn đã có cơ chế để thay đổi vị trí, bạn có thể tạo ra một tùy chỉnh [ 'AuthenticationSuccessHandler'] (http://static.springsource.org/spring- security/site/docs/3.0.x/apidocs/org/springframework/security/web/authentication/AuthenticationSuccessHandler.html) để chặn đăng nhập và thay đổi ngôn ngữ dựa trên tùy chọn của người dùng. Kiểm tra [ở đây] (http://static.springsource.org/spring-security/site/docs/3.0.x/reference/springsecurity-single.html#nsa-form-login) và [tại đây] (http: // stackoverflow.com/a/6612634/468508) để biết thêm thông tin. – bluefoot