博客系统:个人博客系统(Spring Boot、Spring MVC、MyBatis)_拾.柒.的博客-CSDN博客
目录
在 application.yml 文件中配置 Redis 连接信息
哈喽 ~ 很高兴见到你!话不多说,开始学习~
本篇是针对个人博客系统功能的扩展之一,在完成了咱们个人博客系统的基础模块之后,就可以在原来的基础上进行功能的扩展了,基础模块在相对应的博客中已经比较清晰的分享过了,这里就不再进行回顾了哈,此篇的任务就是将个人博客系统项目中登录的 Session 信息持久化到 Redis 上,好了,开始正题!
项目实现
添加依赖
在项目的 pom.xml 中添加相关依赖,reload maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
在 application.yml 文件中配置 Redis 连接信息
spring:
#配置redis
redis:
database: 0 #0号仓库
host: 127.0.0.1
port: 6379
#配置session
session:
store-type: redis #配置session信息的存储仓库为redis
redis:
flush-mode: on_save
namespace: spring:session
#session的过期时间
server:
port: 8080
servlet:
session:
timeout: 1800
具体实现
存储 Session
服务器接收到来自客户端的请求,经校验通过后,对请求中的数据(即用户名和密码)进行 Session 保存信息,持久化到 Redis 上
/**
* 登录
*/
private Object lock = new Object();
@RequestMapping("/login")
public AjaxResult login(HttpServletRequest request, HttpServletResponse response,
String username, String password)
throws IOException, ParseException, ParseException {
//非空校验
if(!StringUtils.hasLength(username) || !StringUtils.hasLength(password)) {
return AjaxResult.fail(-1, "账号或密码错误,请稍后重试!");
}
//验证用户
Userinfo userinfo = userService.getUserByName(username);
if(userinfo == null || !StringUtils.hasLength(userinfo.getUsername()) ||
!StringUtils.hasLength(userinfo.getPassword())) {
return AjaxResult.fail(-2, "账号不存在!");
}
//ps:这里注意要对加盐密码解密
if(userinfo == null || !PasswordUtils.check(password, userinfo.getPassword())) {
//用户名不存在或密码错误
return AjaxResult.fail(-5, "账号或密码错误,请稍后重试!");
}
//登录成功 创建会话信息持久到redis
HttpSession session = request.getSession(true);
session.setAttribute(AppVariable.USER_SESSION_KEY, userinfo);
return AjaxResult.success(1);
}
读取 Session
服务器接收请求后,从 Redis 上获取 Session 信息,从而获取用户信息
/**
* 用户信息查询(通过 Redis )
* @param session
* @return
*/
@RequestMapping("/show")
public AjaxResult getUserinfo(HttpSession session) {
Userinfo userinfo = (Userinfo) session.getAttribute(AppVariable.SESSION_KEY);
//非空校验
if(userinfo == null && !StringUtils.hasLength(userinfo.getUsername()) &&
!StringUtils.hasLength(userinfo.getPassword())) {
//校验为空
return AjaxResult.fail(-1,"参数错误");
}
return AjaxResult.success(userinfo.getUsername());
}
不难发现,此处存储和读取 Session 的代码和之前的方式很像,这是因为将 Session 存储到 Redis 由框架帮我们完成了,我们只需遵守约定可以了