從零開始的Spring Session 三

2021-09-02 19:25:03 字數 2147 閱讀 3424

之所以把spring session和spring security放在一起討論,是因為我們的應用在整合spring security之後,使用者相關的認證與session密不可分,如果不注意一些細節,會引發意想不到的問題。

而解決上述的詭異現象也比較容易(但原理不清),我們使用@enablewebsecurity對spring security進行一些配置,即可解決這個問題。

@enablewebsecurity

public class securityconfig extends websecurityconfigureradapter

// @formatter:on

// @formatter:off

@autowired

public void configureglobal(authenticationmanagerbuilder auth) throws exception

// @formatter:on

}

<1> 不想大費周章寫乙個登入頁面,於是開啟了http basic認證

<2> 配置了security config之後,springboot的autoconfig就會失效,於是需要手動配置使用者。

再次請求,可以發現sessionid返回正常,@enablewebsecurity似乎觸發了相關的配置,當然了,我們在使用spring security時不可能使用autoconfig,但是這個現象的確是乙個疑點。

@bean

public cookieserializer cookieserializer()

使用上述配置後,我們可以將spring session預設的cookie key從session替換為原生的jsessionid。而cookiepath設定為根路徑且配置了相關的正規表示式,可以達到同父域下的單點登入的效果,在未涉及跨域的單點登入系統中,這是乙個非常優雅的解決方案。如果我們的當前網域名稱是moe.cnkirito.moe,該正則會將cookie設定在父域cnkirito.moe中,如果有另乙個相同父域的子網域名稱blog.cnkirito.moe也會識別這個cookie,便可以很方便的實現同父域下的單點登入。

這個特性聽起來非常有意思,你可以在一些有趣的場景下使用它,如知道使用者名稱後即可刪除其session。一直以來我們都是通過執行緒繫結的方式,讓使用者操作自己的session,包括獲取使用者名稱等操作。但如今它提供了乙個反向的操作,根據使用者名稱獲取session,恰巧,在一些專案中真的可以使用到這個特性,最起碼,當別人問起你,或者討論到和session相關的知識時,你可以明晰一點,這是可以做到的。

我們使用redis作為session store還有乙個好處,就是其實現了findbyindexnamesessionrepository介面,下面讓我們來見證這一點。

@controller

public class cookiecontroller

}

由於乙個使用者可能擁有多個session,所以返回的是乙個map資訊,而這裡的username,則就是與spring security整合之後的使用者名稱,最令人感動spring厲害的地方,是這一切都是自動配置好的。我們在記憶體中配置的使用者的username是admin,於是我們訪問這個端點,可以看到如下的結果

連同我們存入session中的browser=chrome,browser=360都可以看見(只有鍵名)。

spring session對各種場景下的session管理提供一套非常完善的實現。筆者所介紹的,僅僅是spring session常用的一些特性,更多的知識點可以在spring.io的文件中一覽無餘,以及本文中作者存在的乙個疑惑,如有興趣可與我溝通。

Django 從零開始

方法1 pip install django 1.6.5 測試是否安裝成功 python import django 1,6,5,final 0 django 使用了 python 標準的 distutils 安裝法,在 linux 平台可能包括如下步驟 tar xzvf django tar.gz...

HTML從零開始

一 標籤 1.使用小寫 2.開始標籤常被稱為開放標籤 opening tag 結束標籤常稱為閉合標籤 closing tag 有效 示例 i reallystrong mean thatem 無效 示例 invalid i reallyem mean thatstrong 二 屬性 1.開始標籤包含...

vim 從零開始

相信大家一開始接觸linux時肯定不知道為什麼要用vim這個奇怪的東西,有各種奇怪的模式,還不如直接用gedit,簡單快捷。有關這個問題大家可以去看知乎大神,今天我在這裡只想記錄一下自己使用vim的過程。雖然vim很強大,但是如果沒用配置最初的狀態是很醜也不怎麼好用的。在配置的過程中,我參考了一下幾...