2014-11-21 17 views
5

Aşağıdaki kurulumda, TimingInterceptor ve CORSHeaders önleyici,/resources/** URL'leri dışında tüm URL istekleri üzerinde yürütülür. Önleyicileri ResourceHttpRequestHandler tarafından sunulan/kaynaklar/** URL'leri için nasıl çalışırım?Spring MVC Interceptor, kaynak işleyici URL'leri için çalışmaz

@EnableWebMvc //equivalent to mvc:annotation-driven 
@Configuration 
@PropertySource("classpath:configuration.properties") 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Inject 
    private TimingInterceptor timingInterceptor; 

    @Inject 
    private CORSHeaders corsHeaders; 

    // equivalent to mvc:resources 
    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); 

    } 

    // equivalent to mvc:interceptors 
    @Override 
    public void addInterceptors(InterceptorRegistry registry) { 
     registry.addInterceptor(timingInterceptor).addPathPatterns("/**"); 
     registry.addInterceptor(corsHeaders).addPathPatterns("/**"); 
    } 

} 

cevap

2

Güncelleme: Bahar Framework 5.0.1 (ve SPR-16034) itibariyle interceptor varsayılan olarak otomatik ResourceHttpRequestHandler üzerine eşlenir.

Yapılandırılan önleyicilerin, kaynak işleyicide eşleştirilmediğini, ancak tek seferde @RequestMapping isteklerinin ele alındığını düşünüyorum.

Belki bunun yerine bunu deneyin?

@EnableWebMvc //equivalent to mvc:annotation-driven 
@Configuration 
@PropertySource("classpath:configuration.properties") 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Inject 
    private TimingInterceptor timingInterceptor; 

    @Inject 
    private CORSHeaders corsHeaders; 

    // equivalent to mvc:resources 
    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); 

    } 

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

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

} 

Bu

iyi SPR-10655 ile belgelenmelidir.

+0

Evet, bence haklısınız. Önerdiğiniz gibi bir MappedInterceptor eklemeyi denedim, ancak yöntem çağrılmıyor ve engelleyici içeriğe eklenmiyor. – tukushan

+1

Bunun için basit bir örnek oluşturdum: https://github.com/spring-projects/spring-framework-issues/tree/master/SPR-10655 - bir göz atabilir misiniz? Muhtemel bir hata ile bir repro projesi ile gelirseniz, http://jira.spring.io adresindeki bir JIRA sorunu açmanız yeterlidir –

+0

@BrianClozel '@ EnableWebMvc' ve' WebMvcConfigurerAdapter' birlikte tavsiye edilebilir kullanıyor? [Belge] (http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-spring-mvc-auto-configuration) aksini belirtiyor. Yoksa bir şey mi özlüyorum? –

0

Kaynak hizmeti için Spring interceptors kullanmaya hiç çalışmamıştım. Önleyicilerin gücü, denetleyiciden önce ve denetleyici ile görünüm arasında bir kancasına sahip olmaktır.

Kaynaklar arasında işlem öncesi veya işlem sonrası eklemek için filtreleri kullanmanız daha iyi olur.