1.17SSO中英文切换
MessageTag
<spring:message code="Account_Login"/>protected String resolveMessage() throws JspException, NoSuchMessageException {
MessageSource messageSource = this.getMessageSource();
if (messageSource == null) {
throw new JspTagException("No corresponding MessageSource found");
} else if (this.message != null) {
return messageSource.getMessage(this.message, this.getRequestContext().getLocale());
} else if (this.code == null && this.text == null) {
return this.text;
} else {
Object[] argumentsArray = this.resolveArguments(this.arguments);
if (!this.nestedArguments.isEmpty()) {
argumentsArray = this.appendArguments(argumentsArray, this.nestedArguments.toArray());
}
return this.text != null ? messageSource.getMessage(this.code, argumentsArray, this.text, this.getRequestContext().getLocale()) : messageSource.getMessage(this.code, argumentsArray, this.getRequestContext().getLocale());
}
}
this.getRequestContext().getLocale()最后到自定义类
ReloadableResourceBundleMessageSource
resolveCodeWithoutArgumentspackage com.supermap.icloud.cas.util;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Locale;
/**
* http工具类
*/
public class HttpUtil {
/**
* GET请求
*/
public final static String GET_METHOD_NAME = "GET";
/**
* POST请求
*/
public final static String POST_METHOD_NAME = "POST";
public final static Charset UTF_8 = StandardCharsets.UTF_8;
public final static Charset ISO_8859_1 = StandardCharsets.ISO_8859_1;
public final static String APPLICATION_JSON = "application/json";
public final static int SC_NOT_ACCEPTABLE = 406;
/**
* 设置contentType为json并且设置编码为utf-8
*/
public static void setJsonContentTypeWithUTF8Encode(HttpServletResponse response) {
setUTF8Encoding(response);
setContentTypeJson(response);
}
/**
* 发送json
* @param response
* @param responseContent
*/
public static <T> void sendJsonResponce(HttpServletResponse response, T responseContent) {
setUTF8Encoding(response);
setContentTypeJson(response);
PrintWriter printWriter = null;
try {
printWriter = response.getWriter();
printWriter.print(JSONObject.toJSONString(responseContent));
} catch (Exception e) {
throw new IllegalArgumentException(e.getMessage());
} finally {
if (null != printWriter) {
printWriter.flush();
printWriter.close();
}
}
}
/**
* 设置contentType为json
*/
public static void setContentTypeJson(HttpServletResponse response) {
response.setContentType(APPLICATION_JSON);
}
/**
* 设置编码为utf-8
*/
public static void setUTF8Encoding(HttpServletResponse response) {
response.setCharacterEncoding(UTF_8.name());
}
/**
* 从request中拿到语言
* @param httpServletRequest
* @return
*/
public static String getExpectedlanguage(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
String curAcceptLanguage = null;
String language = httpServletRequest.getParameter("language");
if(StringUtils.isNotBlank(language)){
curAcceptLanguage = language;
setLanguage(httpServletRequest, httpServletResponse, curAcceptLanguage);
}
if(curAcceptLanguage == null){
Cookie[] cookies = httpServletRequest.getCookies();
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if ("language".equalsIgnoreCase(cookie.getName())) {
curAcceptLanguage = cookie.getValue();
break;
}
}
}
}
if (curAcceptLanguage == null) {
curAcceptLanguage = httpServletRequest.getHeader("accept-language");
}
if (curAcceptLanguage != null) {
curAcceptLanguage = (curAcceptLanguage.split(";")[0]).split(",")[0];
}
return curAcceptLanguage;
}
/**
* 向cookie设置language
* @param httpServletRequest
* @param httpServletResponse
* @param curAcceptLanguage
*/
private static void setLanguage(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String curAcceptLanguage) {
Cookie cookie = new Cookie("language",curAcceptLanguage);
String remoteAddr = httpServletRequest.getRemoteAddr();
cookie.setDomain(remoteAddr);
//本地locahost
if("0:0:0:0:0:0:0:1".equals(remoteAddr)){
cookie.setDomain("localhost");
}
cookie.setPath("/");
httpServletResponse.addCookie(cookie);
}
/**
* 从语言拿到对应的Locale
* @param language
* @return
*/
public static Locale getLocaleByLanguage(String language) {
//为了国际化,默认应该是英文
Locale result = Locale.ENGLISH;
if ("zh-cn".equalsIgnoreCase(language) || "zh-Hans-CN".equalsIgnoreCase(language)
|| "zh-Hans".equalsIgnoreCase(language) || "zh".equalsIgnoreCase(language) || language.contains("zh")) {
result = Locale.SIMPLIFIED_CHINESE;
} else if ("en-us".equalsIgnoreCase(language) || "en-gb".equalsIgnoreCase(language)
|| "en".equalsIgnoreCase(language) || language.contains("en")) {
result = Locale.ENGLISH;
} else if ("ja".equalsIgnoreCase(language) || "ja-JP".equalsIgnoreCase(language) || language.contains("ja")) {
result = Locale.JAPAN;
}
return result;
}
/**
* 获取应用程序根目录
* @param request
* @return
*/
public static String getApplicationRootPath(HttpServletRequest request) {
String rootPath = null;
String contextPath = request.getContextPath();
String servletPath = request.getServletPath();
rootPath = contextPath + servletPath;
String requestURI = request.getRequestURL().toString();
int index = requestURI.indexOf(rootPath);
rootPath = requestURI.substring(0, index + rootPath.length());
if (("".equals(contextPath)) && ("/".equals(servletPath))) {
rootPath = requestURI;
if (rootPath.endsWith("//"))
rootPath = rootPath.substring(0, rootPath.length() - 1);
}
return rootPath;
}
}