我们过滤器 就是对用户请求进行过滤
那么 话不多说 直接看代码 理论看多了真的头疼
我们在项目 java目录中 创建一个包 叫 Filter
下面创建一个类 也叫 Filterst
参考代码如下
package com.example.dom.Filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/1cginServlet")
public class Filterst implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("Filter init");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("Filter doFilter");
}
@Override
public void destroy() {
System.out.println("Filter destroy");
}
}
这里 我们实现了 拦截器Filter 接口 重写了 它的三个方法
然后 WebFilter 声明我们对路径中包含/1cginServlet的资源进行拦截
就是 只要有地方访问 /1cginServlet 就会被我们的拦截器拦截
/1cginServlet 代码是这样的
就是一个普通的 WebServlet
然后 我们在最开始输出一下 System.out.println(“1cginServlet”); 让大家更明显的看到它有没有执行
然后我们启动项目
运行之后 控制台 最后的输出 明显是停在拦截器的doFilter中了
因为 我在xml中配置 项目一启动 直接去访问 1cginServlet
然后 我们拦截器 匹配到 /1cginServlet 进行了拦截
但是我们并没有放行 所以 1cginServlet 并没有执行 内容也就没有输出在控制台上
这里 我们在拦截器的 doFilter 函数中 放行一下
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("Filter doFilter");
filterChain.doFilter(servletRequest,servletResponse);
}
这次 明显就进到 1cginServlet 里面了 所有 如果你需要判断 环境 再确定 放不放行的话 可以把逻辑写在doFilter中
然后 在同时有多个过滤器时 他们执行的优先级就是 按文件顺序
就是名字 例如 你两个过滤器 分别是 aaa 和 bbb aaa先
test01和test02 01先执行
如果 将资源设为 /* 斜杠星号 就会对全局资源 进行拦截 这个可以用来限制用户身份校验 未登录用户不允许访问