結合Spring Security進行web應用會話安全管理

file

在本文中,將爲你們說明如何結合Spring Security 和Spring Session管理web應用的會話。html

1、Spring Security建立使用session的方法

Spring Security提供4種方式精確的控制會話的建立:web

  • always:若是當前請求沒有session存在,Spring Security建立一個session。
  • ifRequired(默認): Spring Security在須要時才建立session
  • never: Spring Security將永遠不會主動建立session,可是若是session已經存在,它將使用該session
  • stateless:Spring Security不會建立或使用任何session。適合於接口型的無狀態應用,該方式節省資源。

在Spring Security配置中加入session建立的策略。繼承WebSecurityConfigurerAdapter ,重寫configure(HttpSecurity http) 方法spring

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.sessionManagement()
        .sessionCreationPolicy(
                SessionCreationPolicy.IF_REQUIRED
        )
}

重要的是:該配置只能控制Spring Security如何建立與使用session,而不是控制整個應用程序。若是咱們不明確指定,Spring Security可能不會建立session,可是咱們的應用程序可能會建立session(通常spring應用的session管理交由Spring Session進行)!瀏覽器

2、會話超時管理

2.1 會話超時處理

會話超時以後,咱們一般但願應用跳轉到一個指定的URL,顯示會話超時信息。可使用以下的配置的代碼實現。安全

http.sessionManagement()
          .expiredUrl("/sessionExpired.html")   //超時session
          .invalidSessionUrl("/invalidSession.html");    //非法session

2.2.會話超時時間配置

在Spring boot應用中有兩種設置會話超時時間的方式,Spring Security對這兩種方式徹底兼容,即:當會話超時以後用戶須要從新登陸才能訪問應用:springboot

  • server.servlet.session.timeout=15m
  • spring.session.timeout = 15m

第一種方式是springBoot應用自帶的session超時配置,第二種方式是咱們使用Spring Session以後,提供的session超時配置。第二種方式的優先級更高。cookie

3、Spring Security的會話固化保護

session-fixation-protection 即session的固化保護功能,該功能的目的是必定程度上防止非法用戶竊取用戶session及cookies信息,進而模擬session的行爲。 默認狀況下,Spring Security啓用了migrationSession保護方式。即對於同一個cookies的SESSIONID用戶,每次登陸驗證將建立一個新的HTTP會話,舊的HTTP會話將無效,而且舊會話的屬性將被複制。session

http.sessionManagement() .sessionFixation().migrateSession()

若是這不是您須要的方式,則可使用其餘兩個選項:less

  • 設置爲「none」時,原始會話不會無效
  • 設置「newSession」後,將建立一個乾淨的會話,而不會複製舊會話中的任何屬性

4、Cookie的安全

熟悉Session實現原理的朋友必定都知道,提升Cookies的安全性,實際上就是提升session的安全性。在Spring Boot中能夠經過配置方式來實現:ide

server.servlet.session.cookie.http-only=true
server.servlet.session.cookie.secure=true
  • httpOnly:若是爲true,則瀏覽器腳本將沒法訪問cookie
  • secure:若是爲true,則僅經過HTTPS鏈接發送cookie,HTTP沒法攜帶cookie。

期待您的關注

相關文章
相關標籤/搜索