1 /**
2 * 过滤器实现编码过滤
3 * @author 王东海
4 * @2017年4月17日
5 */
6 //定义拦截的资源,这里拦截的/*的所有
7 @WebFilter(filterName="EncodeFilter",urlPatterns="/*")
8 public class EncodeFilter implements Filter {
9
10 @Override
11 public void destroy() {
12
13 }
14
15 @Override
16 public void doFilter(ServletRequest arg0, ServletResponse arg1,
17 FilterChain chain) throws IOException, ServletException {
18 //在doFilter里面实现相应的拦截过滤
19 /**
20 * 1、拦截目标,所有资源
21 * 2、get post做相应的编码处理
22 * 3、放行我们的资源
23 */
24
25 //1、先转换
26 HttpServletRequest request = (HttpServletRequest) arg0;
27 HttpServletResponse response = (HttpServletResponse) arg1;
28 //2、拿到它的请求类型
29 String method = request.getMethod();
30 response.setCharacterEncoding("utf-8");
31
32 /**
33 * 做相应的判断
34 * 如果说拿到是get请求,需要对我们的request 进行包装,
35 * 包装需要继承一个HttpServletRequestWrapper类
36 */
37 if ("GET".equals(method)) {
38
39 EncodeRequest encodeRequest = new EncodeRequest(request);
40 chain.doFilter(encodeRequest, response);
41 }else {
42 request.setCharacterEncoding("utf-8");
43 chain.doFilter(request, response);
44 }
45
46 }
47
48 @Override
49 public void init(FilterConfig arg0) throws ServletException {
50
51 }
52
53 }
1 public class EncodeRequest extends HttpServletRequestWrapper {
2
3 private HttpServletRequest request;
4
5 public EncodeRequest(HttpServletRequest request) {
6 super(request);
7 //构造器里进行参数的接受
8 this.request = request;
9 }
10
11 //需要重写getParameter方法
12 @Override
13 public String getParameter(String name) {
14
15 String param = request.getParameter(name);
16 /**
17 * ISO8859-1 转换为 utf-8
18 */
19 //不为空的时候对它进行一个转换
20 if (!MyStringUtil.isNullOrEmpty(param)) {
21
22 try {
23 //先变为字节数据传入编码ISO8859-1转变为:utf-8
24 param = new String(param.getBytes("ISO8859-1"),"utf-8");
25 } catch (UnsupportedEncodingException e) {
26 e.printStackTrace();
27 }
28 }
29
30 return param;
31 }
32
33 }