配置权限校验和登录校验,日志记录或其他操作,这些都用了Spring MVC的多个拦截器。
但是有一个问题,有一些请求是拦截器不能拦截的,不能进行拦截,否侧会出现异常和错误。比如受信任节点发来的请求,是不用进行权限校验和登录校验的。
拦截器有多个,不可能每一个都写放行判断代码,而且拦截不一定是基于path,可能也是基于请求头。即使是基于类似BaseInterceptor的方式,虽然节省了代码,可还是会执行重复的放行判断的java代码。
spring mvc 有没有一个中间件组件,可以在这里面判断请求是否可以进行拦截或不拦截直接放行?不用进入拦截器的流程?
我瞎说两句吧。
首先呢,感觉你的需求广义上来讲也属于认证。参考Spring Security这种认证用过滤器比拦截器更适合。拦截器根据拦截的返回值
true/false
来决定是否拦截,这样的机制决定了多个拦截器间没有办法直接传递信息。但过滤器就不同了,过滤器之间靠过滤器链将多个过滤器连接在一起。我们可以在前置过滤器中对request或response进行装饰(当然可以把一些自定义的信息装饰进去了),然后再在后置过滤器中获取装饰过的request或reponse,再根据获取的值来进行一些逻辑处理。
比如我们在第一个过滤器的request新建一个authed请求头,默认值给false。然后第一个过滤器中再加入这样的逻辑:
2.1 如果逻辑通过,则设置authed为true
2.2 继续执行过滤链上的下一个过滤器。
如果说你的当前业务必须使用拦截器,建议尝试以下思路。
当前请求
的Service再然后:
受信任节点发来的请求
或者其它你认为不需要再拦截在请求。希望对你有帮助。
另
Java旅途
的答案和我的答案可能都不是你想要的。但我们都是出于热心,我们可以接受你不回复、不评论。但如果回复或是评论我想我们还是希望能看到是更多的相互尊重与真诚的态度。毕竟在思否这个平台上,谁都没有帮助谁的业务。