• SpringSession ( 二 ) 项目中使用


    1.3.Session 会话管理及带来的问题

    HTTP协议本身是无状态,的为了保存会话信息,浏览器Cookie通过SessionID标识会话请求,服务器以SessionID为key来存储会话信息。 在 Web 项目开发中, Session 会话管理是一个很重要的部分, 用于存储与记录用户的状态或相关的数据。

    通常情况下 session 交由容器(tomcat) 来负责存储和管理, 但是如果项目部署在多台tomcat 中, 则 session 管理存在很大的问题
    多台 tomcat 之间无法共享 session, 比如用户在 tomcat A 服务器上已经登录了, 但当负载均衡跳转到 tomcat B 时, 由于 tomcat B 服务器并没有用户的登录信息,session 就失效了, 用户就退出了登录
    一旦 tomcat 容器关闭或重启也会导致 session 会话失效因此如果项目部署在多台 tomcat 中, 就需要解决 session 共享的问题

    1.4.SpringSession的特性

    使用框架的会话管理工具,也就是我们要介绍的 Spring session,这个方案既不依赖 tomcat 容器, 又不需要改动代码, 由 Spring session 框架为我们提供, 可以说是目前非常完美的 session 共享解决方案。Spring Session 是 Spring 家族中的一个子项目, 它提供一组 API 和实现, 用于管理用户的 session 信息.它把 servlet 容器实现的 httpSession 替换为 spring-session, 专注于解决 session 管理问题, Session 信息只可以 存储在其它的容器中, 其中最常用的是 Redis 中,这样就可简单快速且无缝的集成到我们的应用中;

    2.项目中使用

    2.1.maven导入依赖

    由于 要使用redis 做为存储容器所以要同时导入redis的依赖

            <dependency>
                <groupId>org.springframework.sessiongroupId>
                <artifactId>spring-session-data-redisartifactId>
            dependency>
    
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-data-redisartifactId>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.2.添加配置信息

    存储类型选择 redis , session 有效时间的设置与之前的用户相同

    spring.session.store-type=redis
    
    server.servlet.session.timeout=30m
    
    spring.redis.host=192.168.3.220
    spring.redis.password=turing
    spring.redis.timeout=PT30M
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.3.启动类加注解

    在项目的启动类中增加支持用redis存储session的注解

    @EnableRedisHttpSession
    
    • 1

    2.4.增加配置类

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
    import org.springframework.data.redis.serializer.RedisSerializer;
    import org.springframework.session.web.http.CookieSerializer;
    import org.springframework.session.web.http.DefaultCookieSerializer;
    
    @Configuration
    public class SessionConfig {
    
    
       @Bean
       public CookieSerializer getCookieSerializer(){
           DefaultCookieSerializer defaultCookieSerializer = new DefaultCookieSerializer();
           defaultCookieSerializer.setDomainName("fivemall.com");
           defaultCookieSerializer.setCookieName("FMSESSION");
    
           return defaultCookieSerializer;
       }
    
       @Bean
       public RedisSerializer<Object> springSessionRedisSerializer(){
           return new GenericJackson2JsonRedisSerializer();
       }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    2.5.项目中使用

    接下来 在项目中使用 就如同 使用 HttpSession用法一样

    2.6.在Redis存储的数据

    在这里插入图片描述

  • 相关阅读:
    十大排序算法比较
    【Linux进程通信】进程间通信介绍、匿名管道原理分析
    MiniTest--小程序自动化测试框架
    网络适配器设置步骤
    如何玩转盲盒商城小程序玩法
    MySQL:更新过程(buffer pool与redo、bin、undo log)
    py10_Python 调用方法总结以及魔术方法和内部类
    Gstreamer应用开发实战指南(五)
    TIA博途中累计流量的两种计算方法示例
    Android 笔记: 字符串截取操作方法
  • 原文地址:https://blog.csdn.net/yuanchun05/article/details/127856964