spring boot добавление перехватчиков http-запросов
Что такое правильный способ, чтобы добавить класса HttpRequest перехватчики весной загрузки приложения? То, что я хочу сделать, это регистрировать запросы и ответы для каждого http-запроса.
документация Spring boot вообще не охватывает эту тему. (http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/)
Я нашел несколько веб-примеров о том, как сделать то же самое с более старыми версиями spring, но те работают с applicationcontext.XML. Пожалуйста помочь.
5 ответов:
поскольку вы используете 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() { ... }); } }
Примечание не комментируйте это с помощью @EnableWebMvc, если вы хотите сохранить Spring Boots auto configuration for mvc.
WebMvcConfigurerAdapter
будет устаревшим с весны 5. От его документация:@deprecated от 5.0 {@link WebMvcConfigurer} имеет методы по умолчанию (сделано возможно с помощью базовой линии Java 8) и может быть реализован непосредственно без необходимости использования этого адаптера
как указано выше, что вы должны сделать, это реализация
WebMvcConfigurer
и переопределитьaddInterceptors
метод.@Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyCustomInterceptor()); } }
чтобы добавить перехватчик в приложение spring boot, выполните следующие действия
создать класс перехватчика
public class MyCustomInterceptor implements HandlerInterceptor{ //unimplemented methods comes here. Define the following method so that it //will handle the request before it is passed to the controller. @Override public boolean preHandle(HttpServletRequest request,HttpServletResponse response){ //your custom logic here. return true; } }
определить класс конфигурации
@Configuration public class MyConfig extends WebMvcConfigurerAdapter{ @Override public void addInterceptors(InterceptorRegistry registry){ registry.addInterceptor(new MyCustomInterceptor()).addPathPatterns("/**"); } }
вот и все. Теперь все ваши запросы будут проходить через логику, определенную в методе preHandle () MyCustomInterceptor.
вы также можете рассмотреть возможность добавления зависимости SpringSandwich, которая позволяет вам напрямую аннотировать в ваших контроллерах, какие перехватчики применять, так же, как вы аннотируете свои маршруты url (раскрытие: я автор).
у меня была такая же проблема с webmvcconfigureradapter, которая устарела. Когда я искал примеры, я почти не нашел никакого реализованного кода. Вот фрагмент рабочего кода.
создать класс, который расширяет HandlerInterceptorAdapter
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import me.rajnarayanan.datatest.DataTestApplication; @Component public class EmployeeInterceptor extends HandlerInterceptorAdapter { private static final Logger logger = LoggerFactory.getLogger(DataTestApplication.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String x = request.getMethod(); logger.info(x + "intercepted"); return true; } }
затем реализовать WebMvcConfigurer интерфейс
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import me.rajnarayanan.datatest.interceptor.EmployeeInterceptor; @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Autowired EmployeeInterceptor employeeInterceptor ; @Override public void addInterceptors(InterceptorRegistry registry){ registry.addInterceptor(employeeInterceptor).addPathPatterns("/employee"); } }