编写一个过滤器用于统一编码格式

来源:互联网 发布:java流程引擎activity 编辑:程序博客网 时间:2024/05/16 06:20
package com.itheima.c_proxy.encoding;import java.io.IOException;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class EncodingFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)throws IOException, ServletException {//1.强转final HttpServletRequest request=(HttpServletRequest) req;HttpServletResponse response=(HttpServletResponse) resp;//创建代理对象HttpServletRequest requestProxy=(HttpServletRequest) Proxy.newProxyInstance(HttpServletRequest.class.getClassLoader(), request.getClass().getInterfaces(), new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {if("getParameter".equals(method.getName())){//获取请求方式String m = request.getMethod();if("get".equalsIgnoreCase(m)){String s = (String) method.invoke(request, args);//相当于  request.getParameter(args);return new String(s.getBytes("iso8859-1"),"utf-8");}else if("post".equalsIgnoreCase(m)){request.setCharacterEncoding("utf-8");return method.invoke(request, args);}}//不需要加强的方法return method.invoke(request, args);}});//2.放行chain.doFilter(requestProxy, response);}@Overridepublic void destroy() {}}

原创粉丝点击