依赖 不指定版本防止冲突 直接用版本依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
//直接使用依赖的版本
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.session/spring-session-data-redis -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependencies>
yml文件配置
配置类 解决 Error creating bean with name 'enableRedisKeyspaceNotificationsInitializer' 报错 我解决了好长时间,后面有具体的redis配置细节
@Configuration
public class RedisHttpSessionConfig {
/**
* 解决redis集群环境没有开启Keyspace notifications导致的
*
* Error creating bean with name 'enableRedisKeyspaceNotificationsInitializer' defined in class path resource
*
* */
@Bean
public static ConfigureRedisAction configureRedisAction() {
return ConfigureRedisAction.NO_OP;
}
}
启动两个客户端,8080端口 9000端口 调用接口
8080端口请求登录 后端记录登陆状态
9090端口拿到登陆状态
查看redis存储数据,redis实现session共享成功
配置细节
redis文档 根目录下 redis.conf
1、文件将里面的daemonize no 改成 yes,让服务在后台启动
2、文件将里面的requirepass改成自己的密码,此密码为以后客户端验证身份使用
3、文件里面的bind,修改为指定的IP地址即为只允许该IP地址访问,注释即为允许所有主机访问
4、文件里面的protected-mode改为no,同意远程连接访问
5、redis集群环境没有开启Keyspace notifications 上面配置类解决了这个问题 这里可以忽略
防火墙开启,开放redis端口或者其他服务的端口
关闭防火墙
systemctl stop firewalld
开启防火墙
systemctl start firewalld
开放指定端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent
关闭指定接口
firewall-cmd --zone=public --remove-port=6379/tcp --permanent
重新加载防火墙配置
firewall-cmd --reload
业务代码实现接口
/**
* 用户登录
*
* @param userLoginRequest
* @param request
* @return
*/
@PostMapping("/login")
public BaseResponse<User> userLogin(@RequestBody UserLoginRequest userLoginRequest, HttpServletRequest request) {
if (userLoginRequest == null) {
return ResultUtils.error(ErrorCode.PARAMS_ERROR);
}
String userAccount = userLoginRequest.getUserAccount();
String userPassword = userLoginRequest.getUserPassword();
if (StringUtils.isAnyBlank(userAccount, userPassword)) {
return ResultUtils.error(ErrorCode.PARAMS_ERROR);
}
User user = userService.userLogin(userAccount, userPassword, request);
return ResultUtils.success(user);
}
实现类添加对session的保存 自动保存在redis中
/**
* 用户登录
*
* @param userAccount 用户账户
* @param userPassword 用户密码
* @param request
* @return 脱敏后的用户信息
*/
@Override
public User userLogin(String userAccount, String userPassword, HttpServletRequest request) {
.....
// 4. 记录用户的登录态
request.getSession().setAttribute(USER_LOGIN_STATE, safetyUser);
return safetyUser;
}