在springboot中如何使用filter设置要排除的URL

 更新时间:2021年12月24日 16:04:50   作者:Airbundey  
这篇文章主要介绍了在springboot中如何使用filter设置要排除的URL,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

使用filter设置要排除的URL

@WebFilter(urlPatterns = "/*")
@Order(value = 1)
public class TestFilter implements Filter {
 
    private static final Set<String> ALLOWED_PATHS = Collections.unmodifiableSet(new HashSet<>(
            Arrays.asList("/main/excludefilter", "/login", "/logout", "/register")));
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init-----------filter");
    }
 
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
        String path = request.getRequestURI().substring(request.getContextPath().length()).replaceAll("[/]+$", "");
        boolean allowedPath = ALLOWED_PATHS.contains(path);
 
        if (allowedPath) {
            System.out.println("这里是不需要处理的url进入的方法");
            chain.doFilter(req, res);
        }
        else {
            System.out.println("这里是需要处理的url进入的方法");
        }
    }
 
    @Override
    public void destroy() {
        System.out.println("destroy----------filter");
    }
}

@Order中的value越小,优先级越高。

  • ALLOWED_PATHS

这个是一个集合,存放的是需要排出的URL,用来判断是否是需要排除的URL。

关于为什么SpringBoot中使用了@WebFilter但是过滤器却没有生效:一定要加上@Configuration注解,@Service其实也可以,其他类似。

filter指定过滤URL的常见问题

在使用Filter对一些自己指定的URL进行过滤拦截时

经常会出现如下错误

1、 明明在@WebFilter(urlPatterns={"/app/online"})中过滤的是/app/online 路径,但是运行之后发现,这个WebFilter过滤器对所有的URL都进行了过滤。

2、 运行之后发现过滤器没有初始化,没有被加载

下面总结一下使用正确的

合适的注解配置filter的方法:

1、 指定路径

在class 上添加注解@WebFilter(urlPatterns={"/app/online"})

然后在启动类(**Application.java )上添加注解@ServletComponentScan

即可。

代码如下:

2、 过滤所有路径

在class上添加@Component或@Configuration 即可

如果添加了@Component或@Configuration,又添加了@WebFilter(),那么会初始化两次Filter,并且会过滤所有路径+自己指定的路径便会出现对没有指定的URL也会进行过滤

//过滤所有路径
@Component
public class WebFilter implements Filter(){
//override三个方法
。。。
。。。
@Override
 public void init (FilterConfig filterConfig) throws ServletException{
 System.out.println("初始化filter");
 }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java 枚举类和自定义枚举类和enum声明及实现接口的操作

    Java 枚举类和自定义枚举类和enum声明及实现接口的操作

    这篇文章主要介绍了Java 枚举类和自定义枚举类和enum声明及实现接口的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Java排列组合字符串的方法

    Java排列组合字符串的方法

    这篇文章主要介绍了Java排列组合字符串的方法
    2018-02-02
  • Array Index Out of Bounds:数组越界错误解决方案及调试技巧

    Array Index Out of Bounds:数组越界错误解决方案及调试技巧

    数组越界访问是指访问数组中超出其有效索引范围的元素,这是一种常见的编程错误,可能导致程序崩溃或数据损坏,下面这篇文章主要给大家介绍了关于Array Index Out of Bounds:数组越界错误解决方案及调试技巧的相关资料,需要的朋友可以参考下
    2024-08-08
  • Java LinkedList实现班级信息管理系统

    Java LinkedList实现班级信息管理系统

    这篇文章主要为大家详细介绍了Java LinkedList实现班级信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 深入理解JAVA核心:揭秘反射机制的奥秘

    深入理解JAVA核心:揭秘反射机制的奥秘

    欢迎来到JAVA反射机制指南!想要了解如何在JAVA中实现灵活的编程技巧吗?本指南将带你揭开JAVA反射机制的神秘面纱,让你的编程世界更加精彩!赶紧跟我一起来探索吧!
    2024-02-02
  • 图文详解JAVA实现快速排序

    图文详解JAVA实现快速排序

    这篇文章主要给大家介绍了关于JAVA实现快速排序的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • java使用spring实现读写分离的示例代码

    java使用spring实现读写分离的示例代码

    本篇文章主要介绍了java使用spring实现读写分离的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • springboot 使用clickhouse实时大数据分析引擎(使用方式)

    springboot 使用clickhouse实时大数据分析引擎(使用方式)

    这篇文章主要介绍了springboot 使用clickhouse实时大数据分析引擎的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-02-02
  • Spring Boot + Vue 基于 RSA 的用户身份认证加密机制实现过程

    Spring Boot + Vue 基于 RSA 的用户身份

    RSA是一种非对称加密算法,适用于用户身份认证加密,本文介绍了基于RSA的用户身份认证加密机制的实现,包括前端Vue.js使用jsencrypt库对用户名密码进行加密,后端使用RSA私钥解密验证用户凭据,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • 基于Springboot+Junit+Mockito做单元测试的示例

    基于Springboot+Junit+Mockito做单元测试的示例

    本篇文章主要介绍了基于Springboot+Junit+Mockito做单元测试的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02

最新评论