您的位置:首页 > 其它

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

2017-07-09 21:40 218 查看
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 {

@Override
public void init(FilterConfig filterConfig) throws ServletException {

}

@Override
public 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() {

@Override
public 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);

}

@Override
public void destroy() {

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐