|
@@ -1,7 +1,25 @@
|
|
|
package org.hsweb.web.controller;
|
|
|
|
|
|
+import org.springframework.context.annotation.Bean;
|
|
|
import org.springframework.context.annotation.ComponentScan;
|
|
|
import org.springframework.context.annotation.Configuration;
|
|
|
+import org.springframework.context.support.ReloadableResourceBundleMessageSource;
|
|
|
+import org.springframework.ui.context.support.ResourceBundleThemeSource;
|
|
|
+import org.springframework.util.ObjectUtils;
|
|
|
+import org.springframework.util.StringUtils;
|
|
|
+import org.springframework.web.servlet.LocaleResolver;
|
|
|
+import org.springframework.web.servlet.ThemeResolver;
|
|
|
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
|
|
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
|
|
|
+import org.springframework.web.servlet.i18n.CookieLocaleResolver;
|
|
|
+import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
|
|
|
+import org.springframework.web.servlet.theme.CookieThemeResolver;
|
|
|
+import org.springframework.web.servlet.theme.ThemeChangeInterceptor;
|
|
|
+
|
|
|
+import javax.servlet.ServletException;
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+import java.util.Locale;
|
|
|
|
|
|
/**
|
|
|
* Created by zhouhao on 16-5-6.
|
|
@@ -10,6 +28,93 @@ import org.springframework.context.annotation.Configuration;
|
|
|
@ComponentScan(
|
|
|
basePackages = {"org.hsweb.web.controller"}
|
|
|
)
|
|
|
-public class ControllerAutoConfiguration {
|
|
|
+public class ControllerAutoConfiguration extends WebMvcConfigurerAdapter {
|
|
|
+
|
|
|
+ @Bean(name = "messageSource")
|
|
|
+ public ReloadableResourceBundleMessageSource reloadableResourceBundleMessageSource() {
|
|
|
+ ReloadableResourceBundleMessageSource reloadableResourceBundleMessageSource = new ReloadableResourceBundleMessageSource();
|
|
|
+ reloadableResourceBundleMessageSource.setBasenames("classpath*:messages/", "classpath*:valid/validation");
|
|
|
+ reloadableResourceBundleMessageSource.setUseCodeAsDefaultMessage(false);
|
|
|
+ reloadableResourceBundleMessageSource.setFallbackToSystemLocale(true);
|
|
|
+ return reloadableResourceBundleMessageSource;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void addInterceptors(InterceptorRegistry registry) {
|
|
|
+ ThemeChangeInterceptor themeChangeInterceptor = new ThemeChangeInterceptor() {
|
|
|
+ @Override
|
|
|
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException {
|
|
|
+ String newTheme = request.getParameter(getParamName());
|
|
|
+ if (newTheme != null) {
|
|
|
+ ThemeResolver themeResolver = cookieThemeResolver();
|
|
|
+ if (themeResolver != null) {
|
|
|
+ themeResolver.setThemeName(request, response, newTheme);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor() {
|
|
|
+ @Override
|
|
|
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException {
|
|
|
+ String newLocale = request.getParameter(getParamName());
|
|
|
+ if (newLocale != null) {
|
|
|
+ if (checkHttpMethod(request.getMethod())) {
|
|
|
+ LocaleResolver localeResolver = cookieLocaleResolver();
|
|
|
+ if (localeResolver != null) {
|
|
|
+ try {
|
|
|
+ localeResolver.setLocale(request, response, StringUtils.parseLocaleString(newLocale));
|
|
|
+ } catch (IllegalArgumentException ex) {
|
|
|
+ if (isIgnoreInvalidLocale()) {
|
|
|
+ logger.debug("Ignoring invalid locale value [" + newLocale + "]: " + ex.getMessage());
|
|
|
+ } else {
|
|
|
+ throw ex;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // Proceed in any case.
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean checkHttpMethod(String currentMethod) {
|
|
|
+ String[] configuredMethods = getHttpMethods();
|
|
|
+ if (ObjectUtils.isEmpty(configuredMethods)) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ for (String configuredMethod : configuredMethods) {
|
|
|
+ if (configuredMethod.equalsIgnoreCase(currentMethod)) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ localeChangeInterceptor.setHttpMethods("GET");
|
|
|
+ registry.addInterceptor(localeChangeInterceptor);
|
|
|
+ registry.addInterceptor(themeChangeInterceptor);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Bean(name="localeResolver")
|
|
|
+ public CookieLocaleResolver cookieLocaleResolver() {
|
|
|
+ CookieLocaleResolver resolver = new CookieLocaleResolver();
|
|
|
+ resolver.setDefaultLocale(Locale.CHINA);
|
|
|
+ return resolver;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Bean
|
|
|
+ public ResourceBundleThemeSource themeSource() {
|
|
|
+ ResourceBundleThemeSource resourceBundleThemeSource = new ResourceBundleThemeSource();
|
|
|
+ resourceBundleThemeSource.setBasenamePrefix("theme.");
|
|
|
+ return resourceBundleThemeSource;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Bean(name="themeResolver")
|
|
|
+ public CookieThemeResolver cookieThemeResolver() {
|
|
|
+ CookieThemeResolver cookieThemeResolver = new CookieThemeResolver();
|
|
|
+ cookieThemeResolver.setDefaultThemeName("default");
|
|
|
+ return cookieThemeResolver;
|
|
|
+ }
|
|
|
|
|
|
}
|