Перехватчик 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.
@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() {
...
});
}
}