当前位置: 首页 > news >正文

JavaEE:分布式session

一、使用Redis存储分布式session:

1.SpringBoot整合Redis,见如下地址:

JavaEE:SpringBoot整合Redis_a526001650a-CSDN博客

2.代码实现分布式session存储(此处以token为例):

@Autowired
private RedisTemplate<String, String> redisTemplate; //Redis数据操作类//登录接口,存储token到redis中
@PostMapping("/login")
public Response login(String phone, String code, HttpServletRequest request, HttpServletResponse response) {//...省略验证手机号/验证码逻辑//1.根据手机号从库中查出用户信息User user = ...;//2.生成tokenString token = jwtUtil.genToken(String userNo, String phone);user.setToken(token);//3.1.缓存token到redis中redisTemplate.opsForValue().set("USER_TOKEN" + ":" + user.getId(), token);//3.2.缓存用户信息到cookie中Cookie c = new Cookie("USER", gson.toJson(user));c.setMaxAge(时间); //设置最大有效期c.setDomain("yyh.com");c.setPath("/");response.addCookie(c);return Response.ok(user); //返回登录成功
}//退出登录接口,移除redis中的token
@PostMapping("/logout")
public Response logout(@RequestParam String userId, HttpServletRequest request, HttpServletResponse response) {//...省略获取/验证token逻辑//1.清除redis中的tokenredisTemplate.delete("USER_TOKEN" + ":" + userId);//2.清除cookie中tokenCookie c = new Cookie("USER", null);c.setDomain("yyh.com");c.setPath("/");c.setMaxAge(0); //设置过期时间为0(设为已过期)response.addCookie(c);return Response.ok(); //返回退出登录成功
}

二、使用Spring Session存储分布式session:

1.导入spring session与spring安全框架依赖:

<!-- 导入spring session -->
<dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId><version>3.5.1</version>
</dependency>
<!-- 导入spring安全框架 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId><version>3.5.3</version>
</dependency>

2.配置spring-session使用redis存储,在application.yml中:

spring:session: #配置spring-session使用redis存储store-type: redis

3.代码实现分布式session存储(此处以token为例):

(1)在Application中开启基于redis的httpsesion:

@SpringBootApplication(exclude = {SecurityAutoConfiguration.class}) //免除spring-session存储key时要求登录
@EnableRedisHttpSession  //开启基于redis的httpsesion
public class Application { //启动类public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

(2)使用spring-session存储分布式token:

//登录接口,保存token到SpringSession中
@PostMapping("/login")
public Response login(String phone, String code, HttpServletRequest request, HttpServletResponse response) {//...省略验证手机号/验证码逻辑//1.根据手机号查出用户信息User user = ...;//2.生成tokenString token = jwtUtil.genToken(String userNo, String phone);user.setToken(token);//3.保存token到SpringSession中HttpSession hs = request.getSession();hs.setAttribute("USER_TOKEN" + ":" + user.getId(), token);hs.setMaxInactiveInterval(30 * 24* 60 * 60); //超时时间//...省略缓存用户信息到cookie中return Response.ok(user); //返回登录成功
}//登出接口,移除SpringSession中token
@PostMapping("/logout")
public Response logout(@RequestParam String userId, HttpServletRequest request, HttpServletResponse response) {//...省略获取/验证token逻辑//1.清除Spring Session中的tokenHttpSession hs = request.getSession();hs.removeAttribute("USER_TOKEN" + ":" + userId); //删除指定用户token//...省略清除cookie中tokenreturn Response.ok(); //返回退出登录成功
}

相关文章:

  • 转运网站开发营销软件有哪些
  • 珠海做网站的公司介绍网站安全检测
  • 电子商务网站建设的特点seo咨询服务
  • 免费制作网站用什么做电商怎么推广自己的产品
  • 网站开发技术分析品牌策划的五个步骤
  • 模板做的网站 怎么提升排名站内搜索引擎
  • 2025学年湖北省职业院校技能大赛 “信息安全管理与评估”赛项 样题卷(五)
  • centos 7 安装NVIDIA Container Toolkit
  • 【unity游戏开发——网络】计算机网络中的三种数据管理模型(分散式、集中式、分布式)和三大通信模型(C/S、B/S、P2P)
  • 环境太多?不好管理怎么办?TakMll 工具帮你快速切换和管理多语言、多版本情况下的版本切换。
  • Tailwind CSS 重用样式
  • 内测分发平台是否支持应用的微服务化部署
  • Spring Boot使用Redis常用场景
  • 代码随想录|图论|04广度优先搜索理论基础
  • Vue 3 最基础核心知识详解
  • Go语言与云原生:Kubernetes Operator开发全流程
  • docker 安装Elasticsearch + kibana + ik分词器
  • Golang单例实现
  • Spring学习笔记【8】
  • 八股文——JAVA基础:基本数据类型与包装类的区别
  • 【Ansible】Ansible入门
  • 数的范围(连续数字边界)
  • OceanBase向量检索在货拉拉的探索和实践
  • 论文阅读:A Survey on Large Language Models for Code Generation
  • PYTHON从入门到实践5-列表操作
  • DDNS-GO 使用教程:快速搭建属于自己的动态域名解析服务(Windows 版)