1. 程式人生 > >Spring Security學習筆記(三)

Spring Security學習筆記(三)

text local github twitter 做的 persist posit enable mage

之前提到過認證後怎麽存放用戶信息,令牌token是一種方式,session是另一種方式,這裏介紹使用spring session data redis存儲httpSession

技術分享圖片

添加了以上依賴後,我們可以創建Spring Boot 配置。Spring Boot 已經做好了大部分的配置工作,我們只需要做如下配置:

spring.session.store-type=redis # Session store type.

Spring Boot 會自動添加一個@EnableRedisHttpSessionannotation,從而創建了一個springSessionRepositoryFilter

。該filter做的事就是將HttpSession轉為Spring Session。這裏Spring Session 持久化到redis中。

Spring Boot會自動創建一個RedisConnnectionFactory將Spring Session 連接到本地端口6379的Redis Server。在產品環境,你需要確保連接到產品環境的redis server。那麽,可以做如下配置:

spring.redis.host=localhost # Redis server host.
spring.redis.password= # Login password of the redis server.
spring.redis.port=6379 # Redis server port.

更多的配置可以參考:https://docs.spring.io/spring-boot/docs/2.0.4.RELEASE/reference/htmlsingle/#boot-features-session

我們沒有使用tomcat的HttpSession,而是將session持久化到redis。當Spring Security的SecurityContextPersistenceFilter將SecurityContext保存到HttpSession時,spring session將該值保存到Redis。

例如你請求login api,登陸成功之後,可以使用redis-cli查看redis中保存到session值:
登陸前
技術分享圖片

登陸後
技術分享圖片

當一個新的HttpSession創建了,Spring Session 創建一個名為SESSION的cookie存在瀏覽器,該值是session_id。
你可以移除session,然後再請求權限保護的api,會返回403。
del spring:session:sessions:7e75811b-8711-4202-ba85-1a0a8142362a

代碼repo: https://github.com/Rying/twitter-clone.git

branch:
技術分享圖片

Spring Security學習筆記(三)