SpringBoot自定义过滤器Filter(一学就会系列)

本文介绍了如何在SpringBoot项目中自定义一个过滤器进行token验证,包括创建Filter、配置urlPatterns、编写doFilter方法及应用到Controller。通过实例演示了如何拦截API请求并确保授权访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步:创建SpringBoot项目,添加依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

第二步:自定义一个过滤器,实现Filter接口

  • 重写doFilter方法,里面做自己的逻辑,比如可以获取到请求中携带的所有东西,比如验证token等。如果符合,一定要放行filterChain.doFilter(servletRequest, servletResponse)。
  • 过滤器类上加上@WebFilter注解,表明这是个过滤器,并且配置上过滤的路径urlPatterns(这个路径是你controller上写的路径。过滤器就会过滤这个路径,使请求进入过滤器中)
@WebFilter(filterName = "tokenFilter", urlPatterns = "/api/*")
@Order(1)//指定过滤器的执行顺序,值越大越靠后执行
public class TokenFilter2 implements Filter {
    @Override
    //这个方法会在过滤器被创建之后马上执行,并且这个方法只会调用一次,在tomcat服务器启动时被创建。
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    //每次拦截目标资源的时候都会调用这个方法。
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
        //从请求头中获取到header
        String auth = httpServletRequest.getHeader("Authorization");
        if (!StringUtils.isEmpty(auth)) {
            String token = "你制作的token";
            if (token.equals(auth)) {
                filterChain.doFilter(servletRequest, servletResponse);// 放行
            }
        }

        //未通过验证,返回失败
        httpServletResponse.setStatus(401);
        httpServletResponse.setContentType("application/json");
        httpServletResponse.getOutputStream().write("{\"code\":1001,\"msg\":\"No authority accessing current api.\",\"result\":false}".getBytes());
        httpServletResponse.getOutputStream().flush();
        httpServletResponse.getOutputStream().close();
        return;
    }

    @Override
    //这个方法会在过滤器被销毁之前执行,这个方法只会执行一次,过滤器会在tomcat服务器关闭的时候销毁。
    public void destroy() {
    }
}

第三步:Controller层

  • 在controller类上 或 者主启动类上 加上@ServletComponentScan注解
  • 这里的/api/ 下面的方法都会被过滤器过滤,见第二步配置了urlPatterns
@RestController
@RequestMapping("/api")
@ServletComponentScan
public class MyController {

    @GetMapping("/test")
    public void test(String name1, int  age) {
        System.out.println("hehe");
    }
}

最后:启动项目,发现url真的被过滤了!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值