配置权限校验和登录校验,日志记录或其他操作,这些都用了Spring MVC的多个拦截器。
但是有一个问题,有一些请求是拦截器不能拦截的,不能进行拦截,否侧会出现异常和错误。比如受信任节点发来的请求,是不用进行权限校验和登录校验的。
拦截器有多个,不可能每一个都写放行判断代码,而且拦截不一定是基于path,可能也是基于请求头。即使是基于类似BaseInterceptor的方式,虽然节省了代码,可还是会执行重复的放行判断的java代码。
spring mvc 有没有一个中间件组件,可以在这里面判断请求是否可以进行拦截或不拦截直接放行?不用进入拦截器的流程?
回答
写个白名单数组进行过滤吧,比如下面这样
// 不需要拦截的请求,可以根据实际需求切换为请求头的某个参数值
private static final String[] whiteList = {"/oauth/token","/captchaImage"};
// 跳过不需要验证的路径
if (Arrays.asList(whiteList).contains(url)){
// 调用逻辑方法,处理业务
}else {
// 拦截器处理请求
}
有一个方法是写Around的切面,满足条件直接返回true,否则走正常流程
但是还是建议理清业务需求,考虑规范路径、特殊情况走特殊接口等操作