如何在Spring安全检查拦截器之前添加自定义拦截器(安全性oauth中止请求时需要日志请求数据)。
答案 0 :(得分:0)
Spring Handler拦截器
在框架上使用HandlerMapping的拦截器必须实现HandlerInterceptor接口。
此界面包含三种主要方法:
prehandle()
–在执行实际处理程序之前调用,但是尚未生成视图
postHandle()
–执行处理程序后调用
afterCompletion()
–在完整请求完成并生成视图之后调用
这三种方法为执行各种预处理和后期处理提供了灵活性。
还有一个简短的说明– HandlerInterceptor
和HandlerInterceptorAdapter
之间的主要区别在于,在第一个方法中,我们需要覆盖所有三个方法:preHandle(), postHandle() and afterCompletion()
,而在第二个方法中,我们可以实现只是必需的方法。
public class LoggerInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(
HttpServletRequest request,
HttpServletResponse response,Object handler) throws Exception {
log.info("[preHandle][" + request + "]" + "[" + request.getMethod()
+ "]" + request.getRequestURI() + getParameters(request));
return true;
}
}
由于您使用的是Spring Boot,因此我假设您希望尽可能地依赖Spring的自动配置。要添加其他自定义配置(例如拦截器),只需提供WebMvcConfigurerAdapter的配置或bean。
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Autowired
HandlerInterceptor yourInjectedInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(...)
...
registry.addInterceptor(getYourInterceptor());
registry.addInterceptor(yourInjectedInterceptor);
// next two should be avoid -- tightly coupled and not very testable
registry.addInterceptor(new YourInterceptor());
registry.addInterceptor(new HandlerInterceptor() {
...
});
}
}