2014-01-20 28 views
0

我正在使用Spring Framework,我想編寫一個攔截器,並且最終編寫了它,並且它工作正常。 但在某一點上,我不希望我的攔截器攔截用戶想要註銷並且會話失效時的請求。但這不是按照我的預期發生的。Spring,攔截器的excludePathPatterns函數不能正常工作

我通過擴展WebMvcConfigurerAdapter並利用addInterceptors方法添加攔截器和這裏是代碼。

public void addInterceptors(InterceptorRegistry registry) { 
    super.addInterceptors(registry); 
    registry.addInterceptor(loggerInterceptor); 
    registry.addInterceptor(authenticationInterceptor).excludePathPatterns("/invalidate"); 
    } 

我在這裏做錯了什麼嗎? excludePathPatterns - >我的URL以/ invalidate結尾。所以請引導我,如何設備一個適當的模式。

+0

我已經使用了以下方法,但它總是運行身份驗證攔截器。 /**/invalidate *, **/invalidate *, */invalidate *, /**/invalidate, **/invalidate –

回答

5

你試過了嗎?

@Configuration 
@EnableWebMvc 
public class MyWebConfig extends WebMvcConfigurerAdapter 
{ 
    @Override 
    public void addInterceptors(InterceptorRegistry registry) 
    { 
    registry.addInterceptor(new MyCustomInterceptor()) 
      .addPathPatterns("/**") 
      .excludePathPatterns("/foo/**"); 
    } 
} 

Reference

請參閱本java doc爲了更好的理解。

+0

我試過這個完全相同的東西,它不適用於我。我的攔截器捕捉每個請求,而不是尊重'excludePathPatterns(...)'。我有一個簡單的控制器,我想處理一個特定的請求,但由於攔截器捕獲所有請求,因此無法獲取請求。 –

0

這是不必要的附加:

addPathPatterns("/**") 

MappedInterceptor.java:

+0

這個答案沒有解決這個問題;這是對另一個答案的評論。對於那些對MappedInterceptor的相關性感到困惑的人來說,當添加一個攔截器時,它的一個實例會在幕後創建。請參閱https://github.com/spring-projects/spring-framework/blob/master/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/InterceptorRegistration.java注意底部在'toArray'方法中,如果包含模式的List是空的,則返回null,而不是空數組。 – Paul

0

就我而言,我不得不調試春全FrameworkServlet的,和地方,拋出了一個異常說:「沒有參數名爲hashId」。

結果我的requestParam沒有被命名爲hashId而是id,所以攔截器被正確地應用到該服務url路徑。

確保excludedPattern以「/」開頭,並且參數名稱與控制器中定義的完全相同。