2013-05-23 11 views
8

Dzień dobry. Mam aplikację Spring Mvc i 2 kontrolery wewnątrz. Pierwszy kontroler (PublicController) może przetwarzać żądania od wszystkich użytkowników, drugi (PrivateController) może przetwarzać tylko autoryzowanych użytkowników.Mapowanie mechanizmu HandlerInterceptor z adnotacjami

Więc wdrożyła dwa Handler Interceptor`s

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages="webapp.base.package") 
public class WebApplicationConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addInterceptors(InterceptorRegistry registry) { 
     registry.addInterceptor(new LoggerInterceptor()); 
     registry.addInterceptor(new AccessInterceptor()); 
    } 

} 

muszę mój LoggerInterceptor do obsługi wszystkich żądań kontrolera, a moje AccessInterceptor obsłużyć tylko PrivateController „s żądań. Muszę zamapować Interceptors na Controllers z adnotacjami

Odpowiedz

20

Wystarczy go rozwiązać.

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages="webapp.base.package") 
public class WebApplicationConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addInterceptors(InterceptorRegistry registry) { 
     registry.addInterceptor(new LoggerInterceptor()).addPathPatterns("/**");; 
     registry.addInterceptor(new AccessInterceptor()).addPathPatterns("/private/**");; 
    } 

} 
+0

Jeśli użyję tego rozwiązania w mojej aplikacji Springboot, wszystko zepsuje. – LNT

+4

@LNT springboot zostanie przerwane z powodu adnotacji '@ EnableWebMvc'. To wyłącza domyślne konfiguracje mvc Springboot. Po prostu usuń tę adnotację i zadziała. –

2

Nie wiem dlaczego, kiedy używam twojej drogi, zadziałało. Ale przechwytywacz wykonano dwukrotnie. I znalazłem inny sposób, aby to zrobić.

@Bean 
    public MappedInterceptor interceptor() { 
     return new MappedInterceptor(null, new String[]{"/","/**/*.js", "/**/*.html", "/**/*.css"}, new LogInterceptor()); 
    } 
Powiązane problemy