2013-05-23 26 views
8

おはよう。 私は春のmvcアプリケーションと2つのコントローラを内部に持っています。 第1コントローラー(PublicController)はすべてのユーザーからの要求を処理でき、第2(PrivateController)は承認されたユーザーのみを処理できます。 注釈付きSpring HandlerInterceptorマッピング

は、だから、私は私の LoggerInterceptorは、すべてのコントローラの要求を処理する必要がある、と私 AccessInterceptorだけ PrivateControllerの要求を処理するために2つのハンドラ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()); 
    } 

} 

を実施しました。 注釈を付けて InterceptorsControllersをマップする必要があります。

答えて

20

ただ解決してください。

@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

このソリューションをspringbootアプリケーションで使用すると、すべてが破損します。 – LNT

+4

@LNT springbootは '@ EnableWebMvc'アノテーションのために壊れます。 springbootのデフォルトのmvc設定が無効になります。このアノテーションを削除するだけで効果があります。 –

2

私はあなたの方法を使用すると、なぜそれが働いたのかわかりません。しかし、インターセプタは2回実行されました。そして私はこれを行う別の方法を見つけました。

@Bean 
    public MappedInterceptor interceptor() { 
     return new MappedInterceptor(null, new String[]{"/","/**/*.js", "/**/*.html", "/**/*.css"}, new LogInterceptor()); 
    } 
関連する問題