zoukankan      html  css  js  c++  java
  • SpringSession 实例

    官方文档:

    https://spring.io/projects/spring-session

    一.Spring Session简介

    1. Spring Session概念:

    Spring Session 是Spring家族中的一个子项目,Spring Session提供了用于管理用户会话信息的API和实现。

    它把servlet容器实现的httpSession替换为spring-session,专注于解决 session管理问题,Session信息存储在Redis中,可简单快速且无缝的集成到我们的应用中

    2. Spring Session的特性:

    Spring Session使支持集群会话变得很简单,而无需绑定到特定于应用程序容器的解决方案。它还提供与以下内容的透明集成:

    HttpSession -允许以应用程序容器(即Tomcat)中立的方式替换HttpSession,并支持在标头中提供会话ID以与RESTful API一起使用

    WebSocket -提供了在接收WebSocket消息时使HttpSession保持活动状态的功能

    WebSession -允许以应用程序容器中立的方式替换Spring WebFlux的WebSession

    3. Session会话共享方案

    第一种是使用容器扩展插件来实现,比如基于Tomcat的tomcat-redis-session-manager插件,基于Jetty的jetty-session-redis插件、memcached-session-manager插件;这个方案的好处是对项目来说是透明的,无需改动代码,但是由于过于依赖容器,一旦容器升级或者更换意味着又得重新配置

    第二种是 使用Nginx负载均衡的ip_hash策略实现用户每次访问都绑定到同一台具体的后台tomcat服务器实现session总是存在

    第三种是自己写一套Session会话管理的工具类,在需要使用会话的时候都从自己的工具类中获取,而工具类后端存储可以放到Redis中,这个方案灵活性很好,但开发需要一些额外的时间

    第四种是使用框架的会话管理工具,也就是本文所使用的Spring session,这个方案既不依赖tomcat容器,又不需要改动代码,由Spring session框架为我们提供,可以说是目前非常完美的session共享解决方案

    4.spring-session分为以下核心模块:

    SessionRepositoryFilter:Servlet规范中Filter的实现,用来切换HttpSession至Spring Session,包装HttpServletRequest和HttpServletResponse

    HttpServerletRequest/HttpServletResponse/HttpSessionWrapper包装器:包装原有的HttpServletRequest、HttpServletResponse和Spring Session,实现切换Session和透明继承HttpSession的关键之所在

    Session:Spring Session模块

    SessionRepository:管理Spring Session的模块

    HttpSessionStrategy:映射HttpRequst和HttpResponse到Session的策略

    二.Spring Session示例

    1.在idea中 新建两个 springboot 项目

    springsession01 和 springsession02

    2. 导入依赖

    <-- 父依赖 -->
    
     <parent>
            <artifactId>spring-boot-starter-parent</artifactId>
            <groupId>org.springframework.boot</groupId>
            <version>2.3.1.RELEASE</version>
     </parent>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <!-- 引入 springboot&redis 整合场景 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
    
            <!-- 引入 springboot&springsession 整合场景 -->
            <dependency>
                <groupId>org.springframework.session</groupId>
                <artifactId>spring-session-data-redis</artifactId>
            </dependency>
    </dependencies>

         3. 分别写两个项目(springsession01 和 springsession02)的主启动类

         4.在springsession01 中 写 TestController  

    设置session

    package com.crowd.controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import javax.servlet.http.HttpSession;
    
    @RestController
    public class TestController {
        @RequestMapping("/test/spring/session/save")
    
        public String testSession(HttpSession session){
            session.setAttribute("name","hjj");
            return "测试 session 共享";
        }
    }

    5.在springsession02 中 获取session中的

    @RestController
    public
    class TestController { @RequestMapping("/test/spring/session/retrieve") public String testSession(HttpSession session){ String name = (String) session.getAttribute("name"); return name; } }

    6. 配置 application.yml   

    springsession01中:

    spring:
      redis:
        host: 192.168.4.253
        port: 6379
        password: admin
        jedis:
          pool:
            max-idle: 100
    
      session:
        store-type: redis
    server:
      port: 8081

    springsession02中:

    spring:
      redis:
        host: 192.168.4.253
        port: 6379
        password: admin
        jedis:
          pool:
            max-idle: 100
    
      session:
        store-type: redis
    server:
      port: 8082

     7. 分别启动两个 项目 测试

    http://localhost:8081/test/spring/session/save

     http://localhost:8383/test/spring/session/retrieve

    转自:https://blog.csdn.net/weixin_51364443/article/details/117335380

  • 相关阅读:
    iOS开发-图片高斯模糊效果
    很认真地聊一聊程序员的自我修养
    iOS 动画队列—仿映客刷礼物效果
    iOS -NSOperation并发编程
    iOS Status Bar变换
    iOS 使用Quartz和OpenGL绘图
    iOS开发中WiFi相关功能总结
    视频直播初窥:高仿喵播APP
    智捷公开课马上开始了-欢迎大家一起讨论学习-第一系列读《Swift开发指南(修订版) 》看Swift视频教程
    《iOS开发指南》要改iOS8版本了,听听您的意见?
  • 原文地址:https://www.cnblogs.com/xiaoliu66007/p/15319282.html
Copyright © 2011-2022 走看看