tomcat8及以上版本: get请求不需要进行编码转换
package com.shsxt.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
@WebFilter("/*")
public class EncodingFilter implements Filter {
public EncodingFilter() {
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//基于http
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
//post请求方式乱码处理
request.setCharacterEncoding("UTF-8");
String method = request.getMethod();
if("GET".equalsIgnoreCase(method)) {
String serverInfo = request.getServletContext().getServerInfo(); //Apache Tomcat/8.5.39
String tomcatVersion = serverInfo.substring(serverInfo.indexOf("/") + 1, serverInfo.indexOf("."));
if(Integer.parseInt(tomcatVersion) < 8) {
HttpServletRequest myRequest = new MyWrapper(request);
//放行资源
filterChain.doFilter(myRequest, response);
return;
}
}
//放行资源
filterChain.doFilter(request, response);
}
@Override
public void destroy() {
}
/**
* 包装类
*/
public class MyWrapper extends HttpServletRequestWrapper {
private HttpServletRequest request;
public MyWrapper(HttpServletRequest request) {
super(request);
this.request = request;
}
@Override
public String getParameter(String name) {
String value = this.request.getParameter(name);
if(null != value && !"".equals(value.trim())) {
try {
//将默认ISO-8859-1编码的字符转为UTF-8
value = new String(value.getBytes("ISO-8859-1"), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return value;
}
}
}