SpringBoot使用Redis来实现Session共享

demo地址
https://gitee.com/fengzxia/SpringBoot-Redis-Session

  1. 创建一个Maven项目名为 demo1

  2. 需要添加的依赖, 使用的springboot版本是 2.1.4.RELEASE

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
    </dependency>

    如果使用的是最新版本 2.1.5.RELEASE 或者其以后的版本,则还需要额外添加 Spring Security 依赖,(其他操作不受影响,仅仅只是多了一个依赖,当然也多了 Spring Security 的一些默认认证流程)

  3. 添加redis配置

    1
    2
    3
    4
    5
    6
    7
    8
    server:
    port: 8081
    spring:
    redis:
    host: 127.0.0.1
    port: 9455
    password: 123456
    database: 1

    更加详细的配置可参看官方文档

  4. 配置完成后 ,就可以使用 Spring Session 了,其实就是使用普通的 HttpSession ,其他的 Session 同步到 Redis 等操作,SpringBoot框架已经自动帮你完成了

  5. 创建controller来设置session

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    @RestController
    @RequestMapping("demo1")
    public class Demo1Controller {
    @GetMapping("set_session")
    public String setSession(HttpServletRequest request) {
    request.getSession().setAttribute("projectName", "demo1");
    return "demo1 install session success";
    }

    @GetMapping("get_session")
    public String getSession(HttpServletRequest request) {
    String projectName = (String) request.getSession().getAttribute("projectName");
    return "demo1 get projectName is " + projectName;
    }
    }
  6. 参照上边的配置再创建一个项目为 demo2

    1. 修改 server.port8082
    2. 修改controller内容如下
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      @RestController
      @RequestMapping("demo2")
      public class Demo2Controller {
      @GetMapping("set_session")
      public String setSession(HttpServletRequest request) {
      request.getSession().setAttribute("projectName", "demo2");
      return "demo2 install session success";
      }

      @GetMapping("get_session")
      public String getSession(HttpServletRequest request) {
      String projectName = (String) request.getSession().getAttribute("projectName");
      return "demo2 get projectName is " + projectName;
      }
      }
  7. 分别启动demo1demo2两个项目,查看共享效果

    1. 访问 demo1 设置session地址 localhost:8081/demo1/set_sessionprojectName设置为 demo1,访问完后,数据已经自动同步到redis中
      UTOOLS1560923374399.png
    2. 访问 demo1 获取session地址 localhost:8081/demo1/set_session 查看 projectName如图
      UTOOLS1560923453196.png
    3. 访问 demo2 获取session地址 localhost:8082/demo2/get_session 查看 projectName如图,看到的是demo1设置的projectName
      UTOOLS1560923590048.png
    4. 再调用 demo2 的设置session地址 localhost:8082/demo2/set_session,查看redis中的数据,已经被修改
      UTOOLS1560923729034.png
    5. 再访问 demo1 查看session,展示的就是 demo2
      UTOOLS1560923794859.png
  8. 至此SpringBoot使用Redis来实现Session共享设置成功

真正在项目实际应用中,是通过 Nginx 进行代理自动分配访问哪个项目,而不是想我这样手动修改请求的链接来查看效果

参考博客: https://bestzuo.cn/posts/859382359.html

作者: 只是学习学习
邮箱: fengzxia1000@163.com
原文地址: https://fengzxia.gitee.io/posts/7e7e2192.html
版权声明: 商业转载请联系作者获得授权,非商业转载请注明出处。