У меня есть приложение Spring-Boot, которое упаковано в виде войны с зависимостью tomcat (как я имею обе опции), используя упакованный .war для запуска внутри встроенного контейнера после запуска он через java -jar команду И также для запуска в автономном контейнере сервлета).Interceptor не получает инициализацию и вызывается с помощью SpringBoot
Ниже мое приложение основной класс
package com.mycompany.edsa.dgv.proxysvc;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.ImportResource;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import com.mycompany.edsa.dgv.proxysvc.interceptor.DGVProxySvcRequestInterceptor;
//import com.mycompany.edsa.dgv.proxysvc.config.ConfigExtension;
@SpringBootApplication
@ImportResource("classpath:dgv-proxy-svc-spring-ctx.xml")
//@Import(ConfigExtension.class)
public class DGVProxySvcAppMain extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(DGVProxySvcAppMain.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(DGVProxySvcAppMain.class);
}
@Bean
public DGVProxySvcRequestInterceptor dgvProxySvcRequestInterceptor() {
DGVProxySvcRequestInterceptor dgvProxySvcReqInterceptor = new DGVProxySvcRequestInterceptor();
return dgvProxySvcReqInterceptor;
}
@Bean
public WebMvcConfigurerAdapter adapter() {
return new WebMvcConfigurerAdapter() {
@Override
public void addInterceptors(InterceptorRegistry registry) {
System.out.println("Adding interceptors");
registry.addInterceptor(dgvProxySvcRequestInterceptor()).addPathPatterns("/*");
super.addInterceptors(registry);
}
};
}
}
Мой Перехватчик класс ниже:
package com.mycompany.edsa.dgv.proxysvc.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
@Component
public class DGVProxySvcRequestInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
/* Put in the code here to validate user principal before passing control to the controller */
//BXPPrincipal principal = (BXPPrincipal)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
//Map<String, ?> result = principal.getAttributes();
System.out.println("Inside DGVProxySvcRequestInterceptor...");
return super.preHandle(request, response, handler);
}
}
Однако на запуск приложения (я запускаю через spring-boot:run
Maven цели и с помощью Eclipse, IDE), я не вижу, чтобы мой перехватчик регистрировался в журналах консоли. Я попытался запустить его в режиме отладки с точкой останова в методе public void addInterceptors(InterceptorRegistry registry)
, и я вижу, что элемент управления приходит в этот момент, и сообщение sysout "Adding interceptors"
регистрируется на консоли, а также registry
содержит мой DGVProxySvcRequestInterceptor
в его инкапсулированном массиве ArrayList, но не уверен, почему никакое сообщение на консоли не упоминает об инициализации этого компонента-перехватчика. Кроме того, при вызове моей службы я не вижу сообщение sysout "Inside DGVProxySvcRequestInterceptor..."
, которое было помещено в мой класс перехватчика 'preHandle
(что подтверждает, что перехватчик не вызывался).
Может ли кто-нибудь помочь мне найти, какую ошибку конфигурации я мог бы делать?
примечание Pls. Я попытался расширить свой основной класс с помощью WebMvcConfigurerAdapter
вместо SpringBootServletInitializer
и переопределить метод addInterceptors
, чтобы добавить мой перехватчик. В этом случае мой перехватчик хорошо инициализируется (я вижу в консольных журналах), а также вызывается при вызове моего служебного uri. Так что это говорит мне, что что-то не так с моей конфигурацией, когда я пытаюсь использовать SpringBootServletInitializer
(я должен использовать этот инициализатор, поскольку мне нужно упаковать свой код в качестве войны, которая может работать в автономном контейнере сервлетов).
Заранее благодарим за любые предложения/указатели!
Я считаю, что использование @EnableWebMvc позволит избежать использования конфигураций Spring, которые я предполагаю. Нет ли обходного пути для добавления перехватчика без переопределения автоконфигурации? – lbvirgo
Кроме того, попробовал вышеуказанное предложение; не помогает. Сначала запускается контроллер, а затем перехватчик! – lbvirgo
Вы правильно заменили свои URL-адреса «addPathPatterns», – kuhajeyan