/ / Пружина MVC - прихващач никога не се нарича - java, пружина, пружина-mvc, прехващач

Пролетта MVC - Interceptor никога не се обажда - java, spring, spring-mvc, interceptor

Опитвам се да конфигурирам прихващане в моята молба и не мога да го накарам да работи.

В моя клас на конфигурация на приложения, конфигурирах по следния начин:

@Configuration
@EnableWebMvc
public class AppContextConfiguration extends WebMvcConfigurerAdapter {
...
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor());
}
...
}

И прехващачът:

public class MyInterceptor extends HandlerInterceptorAdapter{

private static final Logger logger = LoggerFactory.getLogger(MyInterceptor.class);

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {

logger.debug("MyInterceptor - PREHANDLE");
}
}

Някой знае ли защо не е призован?

Отговори:

13 за отговор № 1

Аз използвам Spring Boot и имах същия проблем къде addInterceptors() е бил призован да регистрира прихващащия, но прехващачът никога не е стрелял по време на искане. Въпреки това XML конфигурацията не е проблем.

По принцип не се нуждаете от WebMvcConfigurerAdapter клас. Просто трябва да декларирате @Bean от типа MappedInterceptor:

@Bean
public MappedInterceptor myInterceptor()
{
return new MappedInterceptor(null, new MyInterceptor());
}

4 за отговор № 2

Класовете за прехващачи трябва да бъдат декларирани пролетен контекст xml конфигурационен файл в рамките на маркера <mvc:interceptors>, Ти ли направи това?

От Документацията

Пример за регистриране на прехващач, приложен към всички URL адреси:

<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors>

Пример за регистриране на прехващач, ограничен до определен URL адрес:

<mvc:interceptors>
<mvc:interceptor>
<mapping path="/secure/*"/>
<bean class="org.example.SecurityInterceptor" />
</mvc:interceptor>
</mvc:interceptors>

Така че, трябва да конфигурирате MyInterceptor клас в пролетен контекст xml досие


0 за отговор № 3

Ако е възможно. Използвайте този подход:

public class Application extends WebMvcConfigurerAdapter{
...
@Bean
public MyInterceptor myInterceptor() {
return new MyInterceptor();
}

public @Override void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor());
}
}

вместо:

@Bean
public MappedInterceptor myInterceptor()
{
return new MappedInterceptor(null, new MyInterceptor());
}

защото с първата можете да използвате функции за инжектиране (като @Autowired и др.)