新增 LocaleUtils 本地化语言和时区对象管理工具类
This commit is contained in:
@@ -0,0 +1,93 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||||
|
* No deletion without permission, or be held responsible to law.
|
||||||
|
*/
|
||||||
|
package com.jeesite.common.utils;
|
||||||
|
|
||||||
|
import com.jeesite.common.io.PropertiesUtils;
|
||||||
|
import com.jeesite.common.web.http.ServletUtils;
|
||||||
|
import org.springframework.context.i18n.TimeZoneAwareLocaleContext;
|
||||||
|
import org.springframework.core.NamedThreadLocal;
|
||||||
|
import org.springframework.web.servlet.LocaleContextResolver;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.TimeZone;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 本地化工具
|
||||||
|
* @author ThinkGem
|
||||||
|
* @version 2025-05-21
|
||||||
|
*/
|
||||||
|
public class LocaleUtils {
|
||||||
|
|
||||||
|
private static final Boolean LANG_ENABLED = PropertiesUtils.getInstance().getPropertyToBoolean("lang.enabled", "false");
|
||||||
|
private static final ThreadLocal<TimeZoneAwareLocaleContext> timeZoneAwareLocaleContext = new NamedThreadLocal<>("TimeZoneAwareLocaleContext");
|
||||||
|
private static LocaleContextResolver localeResolver;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前 Locale 对象,获取顺序:请求 -> 会话 -> Cookie -> lang.defaultLocale
|
||||||
|
*/
|
||||||
|
public static Locale getLocale() {
|
||||||
|
return getTimeZoneAwareLocaleContext().getLocale();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前 TimeZone 对象,获取顺序:请求 -> 会话 -> Cookie -> lang.defaultTimeZone
|
||||||
|
*/
|
||||||
|
public static TimeZone getTimeZone() {
|
||||||
|
return getTimeZoneAwareLocaleContext().getTimeZone();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取 TimeZoneAwareLocaleContext
|
||||||
|
*/
|
||||||
|
public static TimeZoneAwareLocaleContext getTimeZoneAwareLocaleContext() {
|
||||||
|
TimeZoneAwareLocaleContext context = timeZoneAwareLocaleContext.get();
|
||||||
|
if (context != null){
|
||||||
|
return context;
|
||||||
|
}
|
||||||
|
if (LANG_ENABLED && localeResolver != null){
|
||||||
|
HttpServletRequest request = ServletUtils.getRequest();
|
||||||
|
if (request != null){
|
||||||
|
context = (TimeZoneAwareLocaleContext)localeResolver.resolveLocaleContext(request);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (context == null){
|
||||||
|
context = new TimeZoneAwareLocaleContext() {
|
||||||
|
@Override
|
||||||
|
public Locale getLocale() {
|
||||||
|
return Locale.getDefault();
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public TimeZone getTimeZone() {
|
||||||
|
return TimeZone.getDefault();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
setTimeZoneAwareLocaleContext(context);
|
||||||
|
return context;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置 TimeZoneAwareLocaleContext
|
||||||
|
*/
|
||||||
|
public static void setTimeZoneAwareLocaleContext(TimeZoneAwareLocaleContext context) {
|
||||||
|
timeZoneAwareLocaleContext.set(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 清理本地线程对象(请求结束时调用)
|
||||||
|
*/
|
||||||
|
public static void removeTimeZoneAwareLocaleContext() {
|
||||||
|
timeZoneAwareLocaleContext.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置 LocaleContextResolver
|
||||||
|
*/
|
||||||
|
public static void setLocaleResolver(LocaleContextResolver localeResolver) {
|
||||||
|
LocaleUtils.localeResolver = localeResolver;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -6,11 +6,13 @@ package com.jeesite.modules.config.web;
|
|||||||
|
|
||||||
import com.jeesite.common.config.Global;
|
import com.jeesite.common.config.Global;
|
||||||
import com.jeesite.common.lang.StringUtils;
|
import com.jeesite.common.lang.StringUtils;
|
||||||
|
import com.jeesite.common.utils.LocaleUtils;
|
||||||
import com.jeesite.common.web.http.ServletUtils;
|
import com.jeesite.common.web.http.ServletUtils;
|
||||||
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.core.Ordered;
|
import org.springframework.core.Ordered;
|
||||||
|
import org.springframework.web.servlet.LocaleContextResolver;
|
||||||
|
|
||||||
import javax.servlet.Filter;
|
import javax.servlet.Filter;
|
||||||
import javax.servlet.ServletRequest;
|
import javax.servlet.ServletRequest;
|
||||||
@@ -28,7 +30,7 @@ public class IpAddrFilterConfig {
|
|||||||
private static String[] denyPrefixes;
|
private static String[] denyPrefixes;
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public FilterRegistrationBean<Filter> ipAddrFilter() {
|
public FilterRegistrationBean<Filter> ipAddrFilter(LocaleContextResolver localeResolver) {
|
||||||
FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>();
|
FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>();
|
||||||
bean.setName("ipAddrFilter");
|
bean.setName("ipAddrFilter");
|
||||||
bean.setOrder(Ordered.HIGHEST_PRECEDENCE + 10);
|
bean.setOrder(Ordered.HIGHEST_PRECEDENCE + 10);
|
||||||
@@ -40,7 +42,9 @@ public class IpAddrFilterConfig {
|
|||||||
response.setStatus(403);
|
response.setStatus(403);
|
||||||
ServletUtils.renderString(response, Global.getText("访问拒绝"));
|
ServletUtils.renderString(response, Global.getText("访问拒绝"));
|
||||||
}
|
}
|
||||||
|
LocaleUtils.removeTimeZoneAwareLocaleContext();
|
||||||
});
|
});
|
||||||
|
LocaleUtils.setLocaleResolver(localeResolver);
|
||||||
bean.addUrlPatterns("/*");
|
bean.addUrlPatterns("/*");
|
||||||
return bean;
|
return bean;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user