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

 

posted @ 2017-10-19 17:08  阿谦  阅读(7946)  评论(0编辑  收藏  举报