Spring boot 2 добавляет Interceptor перед Security Interceptors - PullRequest
0 голосов
/ 20 сентября 2019

Как я могу добавить пользовательский перехватчик (мне нужны данные журнала запросов при запросе на прерывание безопасности oauth) перед весенними перехватчиками проверки безопасности.

1 Ответ

0 голосов
/ 20 сентября 2019

Перехватчик 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() {
        ...
    });
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...