背景
事情是这样的,最近项目做了个渗透测试,被查到了横向越权的问题,是因为前端传到后端的请求,经过APIportal的时候验证过了token,后端就没有去验证了,现在要加上这一步。
分析
既然是所有前端的请求都要做校验,那么如果一个接口一个接口的做当然是不可取的,而springmvc的拦截器可以在里面统一的进行处理,很适合我们的需求。
实现
那么我们就先来实现一下吧。
- 首先实现一个拦截器:
@Component
public class AuthInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info(">>>AuthInterceptor>>>>>>>在请求处理之前进行调用(Controller方法调用之前)");
String token = request.getHeader("token");
log.info("token : [ {} ]", token);
//....处理逻辑
return true;// 只有返回true才会继续向下执行,返回false取消当前请求
}
}
- 将拦截器配置进springboot中:
@Configuration
public class WebAuthConfig extends WebMvcConfigurationSupport {
@Resource
AuthInterceptor authInterceptor;
@Override
protected void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authInterceptor).addPathPatterns("/**");
}
}
这里需要注意,以前我们是用的WebMvcConfigurerAdapter,但是这个类已经过时了,对于一个强迫症来说,当然是得换掉它了,我们可以使用WebMvcConfigurer或者WebMvcConfigurationSupport,我这里使用的是WebMvcConfigurationSupport。
结果
接下来我们看看效果,随便打一个我们的接口:
可以看到控制台顺利的打出了日志!