詳解Spring-Boot集成Spring session并存入redis
spring Session 提供了一套用于管理用戶 session 信息的API和實現(xiàn)。
Spring Session為企業(yè)級Java應(yīng)用的session管理帶來了革新,使得以下的功能更加容易實現(xiàn):
- 編寫可水平擴展的原生云應(yīng)用。
- 將session所保存的狀態(tài)卸載到特定的外部session存儲中,如Redis或Apache Geode中,它們能夠以獨立于應(yīng)用服務(wù)器的方式提供高質(zhì)量的集群。
- 當用戶使用WebSocket發(fā)送請求的時候,能夠保持HttpSession處于活躍狀態(tài)。
- 在非Web請求的處理代碼中,能夠訪問session數(shù)據(jù),比如在JMS消息的處理代碼中。
- 支持每個瀏覽器上使用多個session,從而能夠很容易地構(gòu)建更加豐富的終端用戶體驗。
- 控制session id如何在客戶端和服務(wù)器之間進行交換,這樣的話就能很容易地編寫Restful API,因為它可以從HTTP 頭信息中獲取session id,而不必再依賴于cookie。
Spring-Boot集成Spring session并存入redis
添加maven依賴
Redis的相關(guān)依賴可以看之前的內(nèi)容,這里需要增加如下依賴。
<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session</artifactId> </dependency>
Java代碼實現(xiàn)
增加HttpSessionConfig。
package com.core.config; import org.springframework.context.annotation.Bean; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; import org.springframework.session.web.http.HeaderHttpSessionStrategy; import org.springframework.session.web.http.HttpSessionStrategy; @EnableRedisHttpSession(maxInactiveIntervalInSeconds = 100, redisNamespace = "xxxx") public class HttpSessionConfig { @Bean public HttpSessionStrategy httpSessionStrategy() { return new HeaderHttpSessionStrategy(); } }
其中注解 EnableRedisHttpSession 創(chuàng)建了一個名為springSessionRepositoryFilter的Spring Bean,該Bean實現(xiàn)了Filter接口。該filter負責通過 Spring Session 替換HttpSession從哪里返回。這里Spring Session是通過 redis 返回。
類中的方法 httpSessionStrategy(),用來定義Spring Session的 HttpSession 集成使用HTTP的頭來取代使用 cookie 傳送當前session信息。如果使用下面的代碼,則是使用cookie來傳送 session 信息。
@Bean public HttpSessionStrategy httpSessionStrategy() { return new CookieHttpSessionStrategy(); }
使用HTTP的頭,會看到如下信息
-- response -- 200 x-auth-token: 4792331e-44c2-4285-a9d1-ebabf0e72251 Content-Type: text/html;charset=UTF-8 Content-Length: 75 Date: Mon, 09 Jan 2017 10:14:00 GMT 8e107efb-bf1e-4a55-b896-c97f629c8e40 : 4792331e-44c2-4285-a9d1-ebabf0e72251
使用cookie,會看到如下信息
-- response -- 200 Set-Cookie: SESSION=4792331e-44c2-4285-a9d1-ebabf0e72251;path=/;HttpOnly Content-Type: text/html;charset=UTF-8 Content-Length: 75 Date: Mon, 09 Jan 2017 10:47:37 GMT
測試
在controller中增加如下代碼
@GetMapping("/") public String uid(HttpServletRequest request) { HttpSession session = request.getSession(); UUID uid = (UUID) session.getAttribute("uid"); if (uid == null) { uid = UUID.randomUUID(); } session.setAttribute("uid", uid); return uid.toString() + " : " + session.getId(); }
啟動服務(wù),在chrome瀏覽器輸入 http://127.0.0.1:8080/,得到sessionId
fbfae849-1d49-4301-b963-573048e763e7
在redis中可以看到如下信息
1) "spring:session:xxxx:sessions:fbfae849-1d49-4301-b963-573048e763e7"
2) "spring:session:xxxx:expirations:1483958700000"
3) "spring:session:xxxx:sessions:expires:fbfae849-1d49-4301-b963-573048e763e7"
打開火狐的HttpRequester,使用chrome獲取的sessionId點擊Get,可以看到如下輸出
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- Spring Boot Redis 集成配置詳解
- 詳解springboot配置多個redis連接
- Spring Boot 基于注解的 Redis 緩存使用詳解
- springboot整合spring-data-redis遇到的坑
- 詳解Spring Boot使用redis實現(xiàn)數(shù)據(jù)緩存
- 詳解Spring boot使用Redis集群替換mybatis二級緩存
- SpringBoot利用redis集成消息隊列的方法
- springboot整合redis進行數(shù)據(jù)操作(推薦)
- 詳解spring boot starter redis配置文件
- spring boot中內(nèi)嵌redis的使用方法示例
相關(guān)文章
JavaEE7+Websockets+GlassFish4打造聊天室
Java EE 7已經(jīng)發(fā)布很久了,新增加了很多新的功能和特性,如新增或更新了不少的JSR標準。其中特別受到關(guān)注的是Websockets。它的一個好處之一是減少了不必要的網(wǎng)絡(luò)流量。它主要是用于在客戶機和服務(wù)器之間建立單一的雙向連接。2015-09-09SpringBoot超詳細講解多數(shù)據(jù)源集成
今天分享下SpringBoot多數(shù)據(jù)源集成,我怕麻煩,這里我覺得我的集成也應(yīng)該是最簡單的,清晰明了2022-05-05Java 實戰(zhàn)練手項目之酒店管理系統(tǒng)的實現(xiàn)流程
讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實現(xiàn)一個酒店管理系統(tǒng),大家可以在過程中查缺補漏,提升水平2021-11-11