2013-05-23 13 views
8

Buona giornata. Ho ottenuto un'applicazione mvc a molla e 2 controller interni. Il primo controller (PublicController) può elaborare le richieste da tutti gli utenti, Second (PrivateController) può elaborare solo utenti autorizzati.Spring Handler Mapping interprete con annotazioni

Così ho implementato due 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()); 
    } 

} 

ho bisogno del mio LoggerInterceptor per gestire tutte le richieste del controller, e il mio AccessInterceptor a gestire solo PrivateController s' richieste. Devo mappare Interceptors-Controllers con annotazioni

risposta

20

Basta risolverlo.

@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

Se utilizzo questa soluzione nell'applicazione Springboot, si rompe tutto. – LNT

+4

@LNT springboot si interromperà a causa dell'annotazione '@ EnableWebMvc'. Disattiva le configurazioni mvc predefinite di springboot. Basta rimuovere questa annotazione e funzionerà. –

2

Non so perché, quando uso la tua strada, ha funzionato. Ma l'intercettore è stato eseguito due volte. E ho trovato un altro modo per farlo.

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