首页 > 编程语言 > 详细

springBoot下的WebFilter自定义过滤器

时间:2021-07-10 15:55:37      阅读:19      评论:0      收藏:0      [点我收藏+]

背景

      项目中经常需要用拦截器或者过滤器,这一期主要进行一个简单的自定义过滤器。

 

 

一、 两种实现过滤器的方式

 

1.直接继承这个抽象的一次预处理Filter,不用重写更多方法,也强大方便。

public class AuthFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        System.out.println("我执行了:AuthFilter");

        String url = request.getServletPath();

        if (url.equals("/login")){
            System.out.println("login~~~~~~");
        };

        filterChain.doFilter(request,response);
    }
}

 

2.实现传统的Filter接口

 

public class CookieFilter implements Filter {



    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse rep = (HttpServletResponse) response;
        String url = req.getServletPath();


        System.out.println("我执行了:CookieFilter");

        if (url.equals("/test")){

            System.out.println("不允许访问");
            rep.setStatus(HttpServletResponse.SC_NOT_FOUND);
            return;
        }
    }


    @Override
    public void destroy() {

    }
}

 

二、 注册到容器中

 

通过

@Configuration和@Bean 标签注解,实现注入spring容器Bean, 并且用FilterRegistrationBean把我们的过滤器 注册好。
@Configuration
public class MyFilter  {




    @Bean
    public FilterRegistrationBean  getCookieFilter(){

        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new CookieFilter());
        registration.addUrlPatterns("/*");
        registration.addServletNames("cookieFilter");
        registration.setOrder(2);

        return registration;
    }

    @Bean
    public FilterRegistrationBean  getAuthFilter(){

        FilterRegistrationBean registration = new FilterRegistrationBean();
     //注册你的过滤器 registration.setFilter(
new AuthFilter());
     //新增拦截路径,这里是代表所有请求 registration.addUrlPatterns(
"/*"); registration.addServletNames("authFilter");
     // 过滤器执行优先级 registration.setOrder(
1); return registration; } }

 

三、 关于排序order

  order越小,顺序越优先,执行服务跑起来看看结果:

技术分享图片

 

springBoot下的WebFilter自定义过滤器

原文:https://www.cnblogs.com/rick-Lee/p/14993489.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!