欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-04 14:48:15
目录使用filter设置要排除的urlfilter指定过滤url的常见问题经常会出现如下错误下面总结一下使用正确的1、 指定路径2、 过滤所有路径使用filter设置要排除的url@webfilter...

使用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

即可。

代码如下:

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

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

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");
 }
}

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