Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/master'

Mr.qian 3 nedēļas atpakaļ
vecāks
revīzija
a13ea5e5c9

+ 6 - 1
cif-service/src/main/java/com/txz/cif/configurer/LocalUtil.java

@@ -3,9 +3,11 @@ package com.txz.cif.configurer;
 import cn.hutool.json.JSONUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.MessageSource;
+import org.springframework.context.i18n.LocaleContext;
 import org.springframework.context.i18n.LocaleContextHolder;
 import org.springframework.stereotype.Component;
 
+import java.util.Locale;
 import java.util.ResourceBundle;
 
 /**
@@ -36,7 +38,10 @@ public class LocalUtil
     {
         try
         {
-            log.info(JSONUtil.toJsonStr(LocaleContextHolder.getLocale()));
+            // 打印当前Locale及上下文信息
+            Locale locale = LocaleContextHolder.getLocale();
+            LocaleContext context = LocaleContextHolder.getLocaleContext();
+            log.info("Current Locale: {}, Context: {}", locale, context);
             return messageSource.getMessage(msgKey, null, LocaleContextHolder.getLocale());
         }
         catch (Exception e)

+ 51 - 27
cif-service/src/main/java/com/txz/cif/configurer/MyWebMvcConfigurer.java

@@ -18,12 +18,14 @@ import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.http.MediaType;
 import org.springframework.http.converter.HttpMessageConverter;
 import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
 import org.springframework.web.servlet.HandlerExceptionResolver;
+import org.springframework.web.servlet.LocaleResolver;
 import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.NoHandlerFoundException;
 import org.springframework.web.servlet.config.annotation.CorsRegistry;
@@ -31,6 +33,8 @@ import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
+import org.springframework.web.servlet.i18n.SessionLocaleResolver;
 
 import javax.annotation.Resource;
 import javax.servlet.ServletException;
@@ -175,35 +179,55 @@ public class MyWebMvcConfigurer implements WebMvcConfigurer {
     //     registry.addMapping("/**");
     // }
 
-    // 添加拦截器
-    @Override
-    public void addInterceptors(InterceptorRegistry registry) {
-        // 跨域
-//        registry.addInterceptor(corsInterceptor);
-        // wxJava框架 ThreadLocal的remove问题
+//    // 添加拦截器
+//    @Override
+//    public void addInterceptors(InterceptorRegistry registry) {
+//        // 跨域
+////        registry.addInterceptor(corsInterceptor);
+//        // wxJava框架 ThreadLocal的remove问题
+//
+//        // 接口签名认证拦截器,该签名认证比较简单,实际项目中可以使用Json Web Token或其他更好的方式替代。
+//        if ("true".equals(parameters.getSignature())) { // 开发环境忽略签名认证
+//            registry.addInterceptor(new HandlerInterceptorAdapter() {
+//                @Override
+//                public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
+//                                         Object handler) throws Exception {
+//                    // 验证签名
+//                    boolean pass = validateSign(request);
+//                    if (pass) {
+//                        return true;
+//                    } else {
+//                        logger.warn("签名认证失败,请求接口:{},请求IP:{},请求参数:{}", request.getRequestURI(),
+//                                getIpAddress(request), JSON.toJSONString(request.getParameterMap()));
+//
+//                        Result result = new Result();
+//                        result.setCode(ResultCode.UNAUTHORIZED.getCode()).setMessage("签名认证失败");
+//                        responseResult(response, result);
+//                        return false;
+//                    }
+//                }
+//            });
+//        }
+//    }
 
-        // 接口签名认证拦截器,该签名认证比较简单,实际项目中可以使用Json Web Token或其他更好的方式替代。
-        if ("true".equals(parameters.getSignature())) { // 开发环境忽略签名认证
-            registry.addInterceptor(new HandlerInterceptorAdapter() {
-                @Override
-                public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
-                                         Object handler) throws Exception {
-                    // 验证签名
-                    boolean pass = validateSign(request);
-                    if (pass) {
-                        return true;
-                    } else {
-                        logger.warn("签名认证失败,请求接口:{},请求IP:{},请求参数:{}", request.getRequestURI(),
-                                getIpAddress(request), JSON.toJSONString(request.getParameterMap()));
+    @Bean
+    public LocaleResolver localeResolver() {
+        // 使用SessionLocaleResolver或CookieLocaleResolver持久化Locale
+        SessionLocaleResolver resolver = new SessionLocaleResolver();
+        resolver.setDefaultLocale(Locale.ENGLISH); // 设置默认Locale
+        return resolver;
+    }
 
-                        Result result = new Result();
-                        result.setCode(ResultCode.UNAUTHORIZED.getCode()).setMessage("签名认证失败");
-                        responseResult(response, result);
-                        return false;
-                    }
-                }
-            });
-        }
+    @Bean
+    public LocaleChangeInterceptor localeChangeInterceptor() {
+        LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
+        interceptor.setParamName("lang"); // 支持通过?lang=zh_CN参数切换Locale
+        return interceptor;
+    }
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        registry.addInterceptor(localeChangeInterceptor()); // 注册拦截器
     }
 
     private void responseResult(HttpServletResponse response, Result result) {