SpringBootでのインターセプターに関して

SpringBootでのインターセプターですが、
Spring MVCでのリクエストに対してのアクセスコントロールや認証などの共通処理を
実装する方法は、HandlerInterceptorを利用すると実現可能です。
これは、SpringBootでも同じですので、以前のエントリーの方法で実装は、同じです。chronosdeveloper.hatenablog.com
しかし、SpringBootだと作成したインターセプターをConfigurationのクラス内で、
登録する設定ロジックを記述してもうまく動作しない?addInterceptorsメソッドが呼ばれないようです。

@Configuration
public class WebApplicationConfiguration extends WebMvcConfigurationSupport {
    @Bean
    public SampleHandlerInterceptor sampleHandlerInterceptor() {
	return new SampleHandlerInterceptor();
    }
    /**
     * {@inheritDoc}
     */
    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(sampleHandlerInterceptor()).addPathPatterns("/**")
    }

次に確認したのは、WebMvcConfigurerAdapterを継承して、Configurationのクラスを作成。
作成したインターセプターをConfigurationのクラス内で、登録する設定ロジックを記述...
SpringBootを起動したが、これもaddInterceptorsメソッドが呼ばれない。

@Configuration
public class WebApplicationConfiguration extends WebMvcConfigurerAdapter  {
    @Bean
    public SampleHandlerInterceptor sampleHandlerInterceptor() {
	return new SampleHandlerInterceptor();
    }
    /**
     * {@inheritDoc}
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(sampleHandlerInterceptor()).addPathPatterns("/**")
    }

それで、いろいろ調べてみたら、SpringBootのドキュメントに下記の記述が!!
f:id:chronos_snow:20150706010706p:plain
Spring Boot MVCの機能を維持し、インターセプタ、フォーマット、ビュー・コントローラなどの
追加設定を行う場合は、@EnableWebMvcを使用せず、WebMvcConfigurerAdapterの
@Beanクラスを定義してくださいって書いてある!!

@Configuration
public class WebApplicationConfiguration {
    @Bean
    public SampleHandlerInterceptor sampleHandlerInterceptor() {
	return new SampleHandlerInterceptor();
    }
    @Bean
    public WebMvcConfigurerAdapter webMvcConfigurerAdapter() {
	return new WebMvcConfigurerAdapter() {
	    @Override
	    public void addInterceptors(InterceptorRegistry registry) {
	    	 registry.addInterceptor(sampleHandlerInterceptor()).addPathPatterns("/**");
	    }
    };
}

これも駄目だった...。
まじかwww。
applicationContext.xmlのxsdファイルを見て、MappedInterceptorを使っいるぽい?
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
Configurationのクラス内で、MappedInterceptorのBeanを定義します。

    @Bean
    public MappedInterceptor interceptor() {
        return new MappedInterceptor(new String[]{"/**"}, sampleHandlerInterceptor());
    }

このやり方ならインターセプターの登録をすることが可能で、
実際SpringBootを起動して、インターセプターがちゃんと動作することが確認できました。