在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
即可。
代码如下:
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"); } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。