过滤器
先举个例子
@WebFilter(filterName = "firstFilter", value = {"/*"})
public class FirstFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
单个过滤器
就像例子中一样,单个过滤器的情况下,凡是在过滤器中拦截到的请求都先经过doFilter
方法验证。在doFilter
方法中先对请求做出相应的验证,然后判断当前请求是否合法,确定是否可以放行。如果合法,则允许通过,使用filterChain
放行请求,然后等待服务器处理完请求后,在返回用户前,再次回到doFilter
方法中放行后的位置,继续执行后续代码块,到doFilter方法结束,然后返回给用户。
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//-------------------------1.验证-----------------------
//验证操作等。。。
//------------------------------------------------------
//-------------------------2.放行-----------------------
filterChain.doFilter(servletRequest,servletResponse);
//------------------------------------------------------
//-------------------------3.返回前处理-----------------
//服务器处理完后执行的部分
//------------------------------------------------------
}
可以将doFilter看做分三块执行
多过滤器
形成过滤链,先进入->过滤器1->验证->放行->过滤器2->验证->放行。。。-->服务器->。。。->过滤器2放行后代码块->过滤器1放行后代码块->返回用户
验证不通过
以上单过滤器和多过滤器都是在理想的,验证全部通过的情况下。而在未通过的情况下则需要作出其他的操作,类似重定向,跳转等
注意,在验证不通过的情况下跳转的时候必须消息,一旦跳转的路径仍然会被当前过滤器拦截,那么服务器就会进入一个死循环中
过滤器的应用
1 登录验证
2 字符集修改
3 。。。
网友评论