Можно ли применить перехватчик ко всем контроллерам и действиям, кроме некоторых, которые определены?
Чтобы быть ясным, меня не интересует применение перехватчика в списке определенных. Я хочу определить те, которые нужно исключить.
Спасибо!
Можно ли применить перехватчик ко всем контроллерам и действиям, кроме некоторых, которые определены?
Чтобы быть ясным, меня не интересует применение перехватчика в списке определенных. Я хочу определить те, которые нужно исключить.
Спасибо!
Так как Spring 3.2, они добавили эту особенность с тегом
mvc:exclude-mapping
См. этот пример в документации Spring:
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/admin/**"/>
<bean class="org.springframework.web.servlet.theme.ThemeChangeInterceptor" />
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/secure/*"/>
<bean class="org.example.SecurityInterceptor" />
</mvc:interceptor>
Здесь ссылка в документ
Для конфигурации на основе Java из docs
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LocaleInterceptor());
registry.addInterceptor(new ThemeInterceptor()).addPathPatterns("/**").excludePathPatterns("/admin/**");
registry.addInterceptor(new SecurityInterceptor()).addPathPatterns("/secure/*");
}
}
При настройке перехватчика вы можете указать шаблон пути. Перехватчик будет вызываться только для контроллеров, путь которых соответствует шаблону пути перехватчика.
Но, как вы, вероятно, заметили это, шаблон пути не поддерживает исключение.
Итак, я думаю, что единственный способ - кодировать черный список путей внутри перехватчика. Когда вызывается перехватчик, извлеките HttpServletRequest.getRequestURI()
и проверьте, включен ли путь в черный список или нет.
Вы можете создать черный список внутри @PostConstruct
аннотированного метода перехватчика, и, таким образом, получить черный список из файла свойств, например.
Предыдущие ответы идеальны, но хотят дать быстрый ответ.
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/customercarechatwindow"/>
<bean class = "org.xyz.interceptors.officeHours"/>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/scheduleappointment"/>
<bean class = "org.xyz.interceptors.Holiday"/>
</mvc:interceptor>
</mvc:interceptors>
Когда запрос с шаблоном url равен /customercarechatwindow
, тогда класс interceptor officeHours обрабатывает запрос.