02-使用动态代理解决全局乱码问题
2018-02-10 10:19
423 查看
package www.test.web.filter; 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; public class EncodingFilter implements Filter{ @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { final HttpServletRequest req = (HttpServletRequest) request; //使用动态代码解决全局乱码问题 HttpServletRequest enhanceRequset = (HttpServletRequest) Proxy.newProxyInstance( //loader ,和目标类相同的类加载器 request.getClass().getClassLoader(), // interfaces :代表与目标对象实现的所有接口字节码对象数组 request.getClass().getInterfaces(), // h : 具体的操作,InvocationHandler接口 new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //对 getParameter 方法进行增强 String name = method.getName();//获得目标对象的方法名称 if("getParameter".equals(name)){ String invoke = (String) method.invoke(req, args);//乱码 //转码 invoke = new String(invoke.getBytes("iso8859-1"),"UTF-8"); return invoke; } return method.invoke(req, args); } }); chain.doFilter(enhanceRequset, response); } @Override public void destroy() { } }
动态代理:实际开发中一般用于拦截。判断不同的角色,决定是否可以调用这个方法。
相关文章推荐
- 动态代理解决全局乱码问题
- JAVA反射(四)之动态代理解决全局乱码问题
- 【javaweb:Proxy&Filter】采用动态代理和过滤器解决request的全局乱码问题
- 动态代理解决表单提交的中文乱码问题
- 用动态代理去解决get乱码后经过转发又变为乱码的问题
- javaEE动态代理解决乱码问题
- 利用filter和动态代理解决全站乱码问题
- JavaWeb使用Filter、动态代理对客户端请求服务端参数中文乱码解决
- 解决spring使用动态代理类型转换失败的问题--java.lang.ClassCastException: com.sun.proxy.$Proxy$ cannot be cast to ...今天
- 解决spring使用动态代理类型转换失败的问题--java.lang.ClassCastException: com.sun.proxy.$Proxy$ cannot be cast to ...
- 解决spring使用动态代理类型转换失败的问题--java.lang.ClassCastException: com.sun.proxy.$Proxy$ cannot be cast to ...
- 通过动态代理的方式解决中文乱码问题
- 解决全站的请求数据乱码问题--动态代理方式
- AppLocale使用后安装程序乱码问题的解决
- JSP,mysql,tomcat下(基于struts2)中文及其乱码问题的解决 5大配置点 使用UTF-8编码
- 解决JSP中使用request乱码问题
- WebDeploymentSetup使用乱码问题解决
- 解决JSP中使用request乱码问题
- 用jsp动态输出excel文档和中文乱码问题的解决
- 在php中使用mb_substr($row['title'],0,15,'utf-8')解决获取的字符后面几们的乱码问题