Spring MVC 3, Interceptor на всех, кроме определенных путей - PullRequest
45 голосов
/ 28 марта 2012

Можно ли применить перехватчик ко всем контроллерам и действиям, кроме определенных?

Просто чтобы прояснить, я не заинтересован в применении перехватчика в списке определенных. Я хочу определить те, которые нужно исключить.

Спасибо!

Ответы [ 3 ]

66 голосов
/ 11 апреля 2013

С весны 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>

Вот ссылка на документ

22 голосов
/ 16 ноября 2015

Для конфигурации на основе Java, из документов

@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 голосов
/ 29 марта 2012

При настройке перехватчика вы можете указать шаблон пути.Перехватчик будет вызываться только для контроллеров, путь которых соответствует шаблону пути перехватчика.

ref: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/mvc.html#mvc-config-interceptor

Но, как вы, вероятно, заметили, шаблон пути не поддерживает исключение.

Так что я думаю, что единственный способ - закодировать черный список путей внутри перехватчика.Когда вызывается перехватчик, найдите HttpServletRequest.getRequestURI() и проверьте, находится ли путь в черном списке или нет.

Вы можете создать черный список внутри аннотированного метода перехватчика @PostConstruct и получить путь из черного списка, например, из файла свойств.

...