介绍
当用户请求接口时,请求会先到过滤器,在到处理逻辑的接口,在过滤器中可以可以判断用户权限,如:是否登录,或请求前的一些操作,完成一下比较通用的操作,如:前端的AXIOS 的请求拦截器响应拦截器。
添加组件支持
启动类上添加@ServletComponentScan //开启组件支持
@ServletComponentScan
拦截路径
@WebFilter(urlPatterns =“”)加上该注解 表示该类为过滤器 ,urlPatterns 为拦截路径
- @WebFilter(urlPatterns = “/login”) //只拦截/login
- @WebFilter(urlPatterns = “/*”) //拦截所有
- @WebFilter(urlPatterns = “/login/*”) //拦截login下的所有接口
创建过滤器
继承于Filter 接口,并且实现他都三个方法
过滤器分为3个函数,也叫可以叫生命周期
doFilter:每次请求时执行的方法 每次请求都执行 必须重写
init: 服务器启动时执行的方法 一般用于加载资源或初始化 只执行一次 可以不重写
destroy: 服务器关闭时执行 (销毁) 只执行一次 可以不重写
@WebFilter “urlPatterns”参数:拦截哪类的请求
@WebFilter(urlPatterns="/*")//加上该注解 表示该类为过滤器
public class RequestFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//每次请求时执行的方法
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//服务器启动时执行的方法 一般用于加载资源或初始化 只执行一次
Filter.super.init(filterConfig);
}
@Override
public void destroy() {
//服务器关闭时执行 (销毁) 只执行一次
Filter.super.destroy();
}
}
请求拦截
创建完成后,请求拦截主要在这个方法里,会传递3个对象参数进来
ServletRequest servletRequest, //请求
ServletResponse servletResponse,//响应
FilterChain filterChain// 放行
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//每次请求时执行的方法
//....放行前执行的逻辑.....
filterChain.doFilter(servletRequest,servletResponse);
//放行该请求
//....放行后执行的逻辑.....
}