一、 Spring Session 簡介
Spring Session 提供了管理用戶session的API 和實現,直接集群環境Sesison管理,單瀏覽器多個Session,RESTful APIs Session,集群Session 管理集成並不依賴應用程序容器;支持Session存儲Redis、GemFire、JDBC、Mongo。
二、 Spring Session 支持功能
l 同一個瀏覽器同一個網站,支持多個session問題。
l Restful API,不依賴於cookie。可通過header來傳遞jessionID。
l WebSocket和spring-session結合,同步生命周期管理。
三、 Spring Session 的使用步驟
生成
l 后台業務模塊使用 Spring-Session 生成一個 Session
l 后台業務模塊往Session 里設置信息
l 將 Session 存到 Redis 緩存中(支持持久化)
l 將 Session Id 返回給瀏覽器
l 瀏覽器根據 Cookie 方式保存 Session Id
使用
l 瀏覽器取出 Session Id 通過HTTP 報文帶給后台
l 后台根據 Session Id 從Redis 里取出緩存的 Session
l 從 Session 中讀取出信息,進行業務處理。
四、 Spring Session 對 HTTP 的支持
Spring Session對HTTP的支持是通過標准的servlet filter來實現的,這個filter必須要配置為攔截所有的web應用請求,並且它應該是filter鏈中的第一個filter。Spring Session filter會確保隨后調用HttpServletRequest的getSession() 方法時,都會返回Spring Session的HttpSession實例,而不是應用服務器默認的HttpSession。
五、 Spring Session 集成項目示例
項目集成 Spring Session 框架
添加pom.xml 依賴
引入Spring Session和Redis需要的依賴:
<!--spring boot 與redis應用基本環境配置 -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
Spring Session 配置
創建一個Spring配置,用於創建一個支持Spring Session的Servlet Filter來代替原有的HttpSession的實現:
package com.peraglobal.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
@Configuration
@EnableRedisHttpSession
public class HttpSessionConfig {
}
說明:
- 這個類用配置redis服務器的連接。
- maxInactiveIntervalInSeconds為SpringSession的過期時間(單位:秒)。
創建配置文件 application.properties
redis.hostname=localhost
redis.port=6379
說明:
- 默認連接端口:6379
- 默認連接地址:localhost 。
- 修改則可以使用setPort() 方法和setHostName() 方法來修改默認的端口和連接地址
使用 Spring Session 示例
在 Controller 類中使用 session 功能:
package com.peraglobal.session.controller;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class CookieController {
@RequestMapping("/test/cookie")
public String cookie(@RequestParam("browser") String browser, HttpServletRequest request, HttpSession session) {
//取出session中的browser
Object sessionBrowser = session.getAttribute("browser");
if (sessionBrowser == null) {
System.out.println("不存在session,設置browser=" + browser);
session.setAttribute("browser", browser);
} else {
System.out.println("存在session,browser=" + sessionBrowser.toString());
}
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
System.out.println(cookie.getName() + " : " + cookie.getValue());
}
}
return "index";
}
}
驗證 spring session
確定 Redis 服務正在啟動,然后啟動 spring session 項目,在瀏覽器輸入:localhost:8080/test/cookie?browser=chrome,后台顯示:

注意:spring boot 版本是基於 1.4.7.RELEASE
