目录
1.1,自定义Filter
- 使用Servlet3.0的注解进行配置
- 启动类里面增加 @ServletComponentScan ,进行扫描
- 新建一个Filter类,implements Filter ,并实现对应接口
- @WebFilter 标记一个类为Filter,被spring进行扫描
- urlPatterns:拦截规则,支持正则
- 控制chain.doFilter的方法的调用,来实现是否通过放行,
不放行的话,web应用resp.sendRedirect(“/index.html”)
场景:权限控制,用户登录(非前端后端分离场景)等
1.2,启动类代码
package com.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.web.servlet.ServletComponentScan;@SpringBootApplication@ServletComponentScan // 扫描select的注解public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class,args); }}
1.2,创建filter类和LoginFilter包
1.2.1,编写loginFilter类 过滤器代码
package com.demo.filter;import org.springframework.core.Ordered;import org.springframework.core.annotation.Order;import javax.servlet.*;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;import java.io.IOException;import java.io.PrintWriter;@WebFilter(urlPatterns = {" Filter
是基于函数回调 doFilter(),而lnterceptor则是基于AOP思想
Filter在只在Servlet前后起作用,而lnterceptor够深入到方法前后,异常抛出前后等
依赖于Servlet容器即web应用中,而lnterceptor不依赖于Servlet容器所以可以运行在多种环境。
在接口调用的声明周期里,lnterceptor可以被多次调用,而Filter只能在容器中初始化调用一次。
Filter和lnterceptor的执行顺序
过滤前 --> 拦截前 --> action(handler) --> 执行 --> 拦截后 --> 过滤后
来源地址:https://blog.csdn.net/H20031011/article/details/132823284