Spring session 瀏覽器sessionId與服務器不一致解決方案

項目情況:

        spring boot 和spring session 版本都是 2.0.2.RELEASE

問題描述:

        請求項目接口後瀏覽器保存的sessionId與服務器不一致,拿Postman測試如下圖,網上找了很久都沒發現有人發過這個問題,只能自己去找了spring session的深入分析一系列文章以及閱讀源碼,最後結合到今天找到的一個帖子,不過他裏面處理的比較複雜,我就做了個最簡單的處理。


 

分析:

       這裏兩個session其實是一致的,只是瀏覽器保存的sessionId是經過服務器base64編碼之後返回的。其實看似不一致,但是前端傳入這個編碼後的服務器也會解碼處理,不會出現找不到的情況。以上這些東西我們可以在spring session 源碼 DefaultCookieSerializer 類中看到

我們可以看到這個類在初始化的時候就指定了使用base64編碼,指定cookie名稱爲session(這也是爲什麼使用spring session後cookie裏保存的不叫 jsessionid 而是叫session了)

而在寫cookie和讀cookie的時候,都會判斷類裏這個變量 useBase64Encoding 是否爲true,如果是,則寫的時候進行base64編碼,讀的時候進行base64解碼。

解決方案:

       如果希望服務器與瀏覽器的sessionId一模一樣,只需要自己去註冊這個bean並且設置變量 useBase64Encoding 爲false即可

@Bean
    public DefaultCookieSerializer getDefaultCookieSerializer(){
    	DefaultCookieSerializer defaultCookieSerializer = new DefaultCookieSerializer();
    	defaultCookieSerializer.setUseBase64Encoding(false);
    	return defaultCookieSerializer;
    }

參考:

http://www.cnblogs.com/imyjy/p/9187168.html

http://blog.didispace.com/spring-session-xjf-3/

發佈了317 篇原創文章 · 獲贊 166 · 訪問量 179萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章