需要拦截必须实现Filter接口
implements Filter
/*
* doFilter是Filter的核心方法
* request:里面封装的是http的请求
* response:代表的是请求
* FilterChain:过滤器链对象
*/
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("quckFilter1 running...");
*放行请求
chain.doFilter(request, response);*
}
配置方法
AutoLoginFilter
com.itheima.web.filer.AutoLoginFilter
AutoLoginFilter
/*
Filter生命周期’
Filter何时创建:服务器启动时就创建该filter对象
Filter何时销毁:服务器关闭时filter销毁
解决全局中文问题
装饰者模式(包装)
对用户名 username编码,用UTF-8,放入cookie会话中
对用户名username进行解码用UTF-8。
URLEncoder.encode(username, “UTF-8”); 编码
URLDecoder.decode(cookie_username, “UTF-8”); 解码
`public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
//在传递request之前对request的getParameter方法进行增强
/*
* 装饰者模式(包装)
*
* 1、增强类与被增强的类要实现统一接口
* 2、在增强类中传入被增强的类
* 3、需要增强的方法重写 不需要增强的方法调用被增强对象的
*
*/
//被增强的对象
HttpServletRequest req = (HttpServletRequest) request;
//增强对象
EnhanceRequest enhanceRequest = new EnhanceRequest(req);
chain.doFilter(enhanceRequest, response);
}
@Override
public void destroy() {
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
}
class EnhanceRequest extends HttpServletRequestWrapper{
private HttpServletRequest request;
public EnhanceRequest(HttpServletRequest request) {
super(request);
this.request = request;
}
//对getParaameter增强
@Override
public String getParameter(String name) {
String parameter = request.getParameter(name);//乱码
try {
parameter = new String(parameter.getBytes("iso8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return parameter;
}
}`