Опитвам се да конфигурирам прихващане в моята молба и не мога да го накарам да работи.
В моя клас на конфигурация на приложения, конфигурирах по следния начин:
@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 и др.)