一、简介
1、作用:
既可以对请求进行拦截,也可以对响应进行处理。
2、触发时机:
请求进入容器后,在进入servlet前进行处理;请求结束后实在servlet处理完后返回给前端之前。(因此Filter是依赖于Servlet的)
3、常见场景:
权限检查,日记操作、拦截请求、过滤操作、对请求字符设置编码
二、使用方法
1、创建类实现Filter接口
@WebFilter(filterName = "sw_filter",urlPatterns = "/*")
@Slf4j
public class MyFilterOne implements Filter {
/**
* web应用启动时,web服务器将创建Filter的实例对象,并调用init方法,读取web.xml的配置,完成对象的初始化功能, 从而为后续的用户请求做好拦截的准备工作(filter对象只会创建一次,init方法也只会执行一次,开发人员通过init的参数,
* 可或得代表当前filter配置信息的FilterConfig对象)
* @param filterConfig
* @throws ServletException
*/
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("sw_filter拦截器初始化")
}
/**
* 这个方法完成实际的过滤操作,当客户请求访问与过滤器相关联的URL的时候,Servlet过滤器将先执行doFilter方法,FilterChain参数用于访问后续过滤器
* @param servletRequest
* @param servletResponse
* @param filterChain
* @throws IOException
* @throws ServletException
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("我是过滤器,我进来了");
}
/**
* filter创建后会保存在内存中,当web应用移除或者服务器停止时才销毁,该方法在Filter的生命周期中仅执行一次,在这个方法中,可以释放过滤器使用的资源
*/
@Override
public void destroy() {
}
}
2、在启动类上加上@ServletComponentScan注解
3、请求发送后进入servlet前都会被doFilter()方法处理
@RestController
public class LoginController {
@GetMapping("/test/filter")
public String testFilter(){
return "该请求被过滤器拦截了,但是在过滤器中已经放行了";
}
}
声明:本文内容来源:https://blog.csdn.net/qq_50652600/article/details/127308348
https://blog.csdn.net/weixin_44947701/article/details/122246324