2017-01-25 48 views
0

我想避免在用戶請求靜態資源(如css文件)時創建會話。 Howerver,即使在告訴WebSecurity忽略這個靜態資源路徑之後,我注意到來自SpringBoot應用程序的所有響應仍然有JSESSIONID cookie。爲什麼?Spring的WebSecurity'忽略'仍在創建會話

public void configure(WebSecurity web) throws Exception { 
    web.ignoring().antMatchers("/css/**"); 
} 

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http.formLogin() 
     .loginPage("/login") 
     .loginProcessingUrl("/login") 
     .and() 
     .authorizeRequests() 
     .antMatchers(HttpMethod.GET, "/login", "/error").permitAll() 
     .anyRequest().authenticated(); //all other pages require users to be authenticated 

} 

我正在使用Spring Security來保護我的應用程序....但對於這些靜態資源的請求,我不想創建或驗證會話。

回答

0

我發現了這個問題。是我的錯。我正在使用Spring Security並擴展了RequestHeaderAuthenticationFilter。雖然web.ignoring()...確實可以避免所有Spring Security認證/授權檢查,但它仍然通過自定義過濾器運行。

在我的過濾器之一,我有以下行:

HttpServletRequest req = ((HttpServletRequest) request); 
HttpSession session = req.getSession(); 

我用它來檢查是否已經存在會話,如果我需要刷新它(太複雜,在這裏解釋)。但是如果method,req.getSession()不存在,那麼它將創建一個新的會話。我沒有意識到它有這種副作用。

相反,我應該打電話:req.getSession(false)。如果它已經存在,這將返回一個會話,如果它不存在,則返回null。