Spring MVC 3, Interceptor на всех, исключая некоторые определенные пути
Можно ли применить перехватчик ко всем контроллерам и действиям, кроме некоторых, которые определены?
Чтобы быть ясным, меня не интересует применение перехватчика в списке определенных. Я хочу определить те, которые нужно исключить.
Спасибо!
Ответы
Ответ 1
Так как 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>
Здесь ссылка в документ
Ответ 2
Для конфигурации на основе 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/*");
}
}
Ответ 3
При настройке перехватчика вы можете указать шаблон пути. Перехватчик будет вызываться только для контроллеров, путь которых соответствует шаблону пути перехватчика.
ref: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/mvc.html#mvc-config-interceptor
Но, как вы, вероятно, заметили это, шаблон пути не поддерживает исключение.
Итак, я думаю, что единственный способ - кодировать черный список путей внутри перехватчика. Когда вызывается перехватчик, извлеките HttpServletRequest.getRequestURI()
и проверьте, включен ли путь в черный список или нет.
Вы можете создать черный список внутри @PostConstruct
аннотированного метода перехватчика, и, таким образом, получить черный список из файла свойств, например.
Ответ 4
Предыдущие ответы идеальны, но хотят дать быстрый ответ.
<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 обрабатывает запрос.