Spring Boot Session 基本使用


一、            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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM