簡體   English   中英

當我的會話創建策略設置為STATELESS時,為什么Spring Security的SessionManagementFilter運行?

[英]Why is Spring Security's SessionManagementFilter running when my session creation policy is set to STATELESS?

我有一個使用Spring Security 4.0.1.RELEASE的基於J2EE REST的Web應用程序。 我正在使用基於Java的配置來配置Spring Security,並將會話創建策略設置為STATELESS,如下所示:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(secureEnabled=true, prePostEnabled=true, jsr250Enabled=true, order=1)
public class DefaultSecurityBeansConfig extends WebSecurityConfigurerAdapter {
    // ...
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()...; // additional config omitted for brevity
        // ...
    }
    // ...
}

看完這篇文章關於Spring Security的會話管理,我相信SessionManagementFilter過濾器應該在Spring Security的過濾器鏈運行。 但這絕對是。 我可以在該類的doFilter方法中設置一個斷點,並在對服務器的每個請求上運行該斷點。

這里發生了什么? 此篩選器正在運行的事實正在導致我認為已經配置掉的我的應用程序中的其他意外行為。

謝謝。

使用Spring Security時,會話管理要比將經過身份驗證的用戶存儲在會話中更為廣泛(如Spring Security Guide的Session Management一節所述)。

與HTTP會話相關的功能由SessionManagementFilterSessionAuthenticationStrategy接口的組合處理,過濾器委托該接口。 典型的用法包括防止會話固定保護攻擊,檢測會話超時以及限制已認證用戶可以同時打開多少個會話。

sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)並不意味着您的應用程序是無狀態的,這意味着Spring Security不會創建會話。 如果您的應用程序中還有其他內容仍在創建會話,Spring Security將嘗試保護它免受會話固定攻擊。

會話固定攻擊的完成方式取決於配置的策略。 默認設置是更改每個請求的會話標識符。 在Servlet 3.1和更高版本的容器中,如果未進行任何顯式配置,則ChangeSessionIdAuthenticationStrategy是默認值。 在Servlet 3.0及更低版本中,默認值為migrateSession

您可以通過執行sessionFixation().none()來禁用會話固定保護。 但是,您必須質疑這是否是真正想要的,因為這可能會使您的應用程序不安全。

根據中斷/失敗的原因,您可能要解決此問題,而不是使應用程序的安全性降低。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM