思维导图
🌟前言
在开发中,都离不开自定义过滤器的使用。本文的主要内容是通过SpringBoot实现自定义过滤器。
🌟知识准备
过滤器:类似于人们进入景点或者电影院的检票厅。
种类:如下图所示,位于org.springframework.boot.web.servlet.filter中。
优先级:属性值越低则代表属性值越高。可以查看思维导图。
方式一:使用FilterRegistrationBean配置类进行注册。类似于自定义拦截器时的注册拦截器,这里是注册过滤器。
方式二:使用Server3.0规范中的@WebFilter注解进行实现。
🌟实现方式
方式一
自定义过滤类:其中的doFilter方法为编写过滤逻辑的方法。比如说在登录时过滤掉没有token的用户。
思路:
- 实现Filter类。位于java.servletx.filter包的
- 定义过滤逻辑。
public class TokenFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { //初始化 Filter.super.init(filterConfig); } @Override public void doFilter(HttpServletRequest servletRequest, HttpServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { //拦截逻辑 String token = servletRequest.getHeader("Authorization"); if (token == null || token.isEmpty()) { throw new MyException("登录失败"); } filterChain.doFilter(servletRequest,servletResponse); } @Override public void destroy() { //销毁 Filter.super.destroy(); } }
定义过滤注册器:对自定义的TokenFilter进行过滤注册。
思路:
- 使用@Configuration+@Bean注解配置Bean管理。
- 使用TokenFilter类型的FilterRegistrationBean。
- 设置过滤路径。
@Configuration public class FilterConfig { @Bean public FilterRegistrationBean<TokenFilter> filterRegistrationBean() { FilterRegistrationBean<TokenFilter> registrationBean = new FilterRegistrationBean<>(); registrationBean.setFilter(new TokenFilter()); registrationBean.addUrlPatterns("/api/*"); return registrationBean; } }
方式二
启动类:添加@ServletComponentScan注解。
@SpringBootApplication @ServletComponentScan public class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class); } }
自定义过滤器类:添加@WebFilter注解并实现Filter接口。
@WebFilter注解相关参数
参数名 | 类型 | 默认值 | 描述 |
filterName | String | “” | 过滤器名称 |
value | String[] | {} | 过滤器的URL模式 |
urlPatterns | String[] | {} | 过滤器的URL模式 |
servletNames | String[] | {} | 过滤器的Servlet名称 |
dispatcherTypes | DispatcherType[] | {DispatcherType.REQUEST} | 过滤器的调度类型 |
asyncSupported | boolean | false | 是否支持异步调度 |
initParams | WebInitParam[] | {} | 过滤器的初始化参数 |
@WebFilter(urlPatterns = "/api/*") public class TokenFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { //初始化 Filter.super.init(filterConfig); } @Override public void doFilter(HttpServletRequest servletRequest, HttpServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { //拦截逻辑 String token = servletRequest.getHeader("Authorization"); if (token == null || token.isEmpty()) { throw new MyException("登录失败"); } filterChain.doFilter(servletRequest,servletResponse); } @Override public void destroy() { //销毁 Filter.super.destroy(); } }
🌟写在最后
有关于SpringBoot自定义过滤器的内容到此就结束了。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。