博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot项目自定义Filter过滤器
阅读量:3948 次
发布时间:2019-05-24

本文共 3919 字,大约阅读时间需要 13 分钟。

  在Springboot项目中,常用的自定义过滤器的方式有两种:

@WebFilterFilterRegistrationBean,下面通过案列分别使用两种方式来实现自定义Filter。

一、@WebFilter

  此注解常用的属性有以下三种:

属性名 类型 描述
filterName String 指定该filter的名称
urlPatterns String 指定该filter所拦截的url
value String 与urlPatterns一致

@WebFilter的方式可以通过控制过滤器命名的先后顺序来控制多个过滤器之间的顺序执行,例如:filterName="a"会比filterName="b"的过滤器先执行。

新建一个Springboot项目,新建一个Filter包,创建一个类MyFilter

在这里插入图片描述

package org.magic.springbootLogin.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;/** * @author: magic * @date: 2021/4/14 * @description: 写一个自己的过滤器 * @WebFilter:用于将一个类声明为Filter, * filterName:String 指定该Filter的名称 * urlPatterns:String 指定该Filter所拦截的Url * value:String 与urlPatterns一致 */@WebFilter(urlPatterns = "/userController/*",filterName = "myFilter")public class MyFilter implements Filter {
@Override public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("MyFilter被初始化了"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req= (HttpServletRequest) request; System.out.println(req.getRequestURI()); System.out.println(req.getMethod()); System.out.println("执行了MyFilter"); filterChain.doFilter(request, response); } @Override public void destroy() {
System.out.println("MyFilter被销毁了"); }}

然后在项目的启动类上添加注解@ServletComponentScan

在这里插入图片描述
启动项目之后,会在项目的控制台上看到输出的MyFilter被初始化了
在这里插入图片描述
然后再通过前端发送一个请求(前提是请求的路径必须是在Filter中被声明了的,案例中是userController下的所有接口都会被拦截
在这里插入图片描述
发现在请求的过程中,执行了doFilter方法,我们可以直接在doFilter中写自己的拦截逻辑就行了。

二、FilterRegistrationBean

  此种方式就是通过向容器中注入自定义Bean对象来实现自定义过滤器

还是新建一个springboot项目,新建一个MyFilter

package org.magic.springbootLogin.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;/** * @author: magic * @date: 2021/4/14 * @description: 写一个自己的过滤器 */public class MyFilter implements Filter {
@Override public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("MyFilter被初始化了"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req= (HttpServletRequest) request; System.out.println(req.getRequestURI()); System.out.println(req.getMethod()); System.out.println("执行了MyFilter"); filterChain.doFilter(request, response); } @Override public void destroy() {
System.out.println("MyFilter被销毁了"); }}

新建一个config包,在里面新建一个FilterConfig:

在这里插入图片描述

package org.magic.springbootLogin.config;import java.util.Collection;import javax.servlet.Filter;import org.magic.springbootLogin.filter.MyFilter;import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/** * @author: magic * @date: 2021/4/14 * @description: */@Configurationpublic class FilterConfig {
@Bean public MyFilter getMyFilter() {
return new MyFilter(); } @Bean public FilterRegistrationBean
getFilterRegistrationBean(MyFilter myFilter) {
FilterRegistrationBean
filter = new FilterRegistrationBean<>(); filter.setFilter(myFilter); filter.addUrlPatterns("/userController/*"); filter.setName("myFilter"); filter.setOrder(1); return filter; }}

!!!

 使用此种方式实现自定义过滤器,不需要在启动类上添加注解:@ServletComponentScan

启动项目,发现过滤器也被初始化了:

在这里插入图片描述

转载地址:http://kvhwi.baihongyu.com/

你可能感兴趣的文章
调整提醒的优先级
查看>>
恢复出厂设置时清除闹钟
查看>>
如何添加一个提醒
查看>>
Cosmos 关机情况下来闹钟后增加是否开机选择功能
查看>>
日历的提醒内容可以根据需要修改
查看>>
如何使USSR编辑界面默认输入法为123
查看>>
手机中嵌入默认的快速拨号号码
查看>>
Call Setting中的Line Switch功能作用
查看>>
GPS数据解析
查看>>
The top 6 programming languages for IoT projects
查看>>
67 open source tools and resources for IoT
查看>>
蓝牙低功耗(BLE)应用领域
查看>>
nRF51822低功耗睡眠函数应用
查看>>
Android 语言码_国家码
查看>>
从iphone和android应用来看公司
查看>>
android 修改代码怎样编译
查看>>
领导者如何增强说服力
查看>>
比金钱更好的十样东西
查看>>
凡事必定不少于三个以上的解决方法
查看>>
带团队的点滴心经
查看>>