前言

本篇说一下SpringBoot使用redis共享session的方法

导入依赖

<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>

配置redis

spring:
application:
name: session-redis
redis:
database: 0
host: "localhost"
port: 6379
password: ""
jedis:
pool:
max-active: 8
max-idle: 0
max-wait: -1ms
timeout: 100ms
session:
#session超时时间
timeout: 1800
namespace: "session-redis"

配置类

@Configuration
public class SessionConfig extends RedisHttpSessionConfiguration {
@Value("${spring.session.timeout}")
private Integer sessionTimeoutInSec;
@Value("${spring.session.namespace}")
private String sessionRedisNamespace;

@Bean
public LettuceConnectionFactory connectionFactory() {
return new LettuceConnectionFactory();
}

@PostConstruct
public void initConfig() throws Exception {
this.setMaxInactiveIntervalInSeconds(sessionTimeoutInSec);
this.setRedisNamespace(sessionRedisNamespace);
}
}

测试

写一个controller:

@RestController
public class IndexController {
private final static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

@RequestMapping(name = "/login", method = RequestMethod.POST)
public String login(HttpSession session, String username, String pwd) {
if (StringUtils.isBlank(username) || StringUtils.isBlank(pwd)) {
return "username和pwd不能为空";
}
session.setAttribute("username", username);
session.setAttribute("logintime",LocalDateTime.now());
return username + "登陆成功";
}


@RequestMapping(name = "/", method = RequestMethod.GET)
public String index(HttpSession session) {
String username = (String) session.getAttribute("username");
if (StringUtils.isBlank(username)) {
return "您还未登录!";
} else {
return "欢迎您" + username + ",登陆时间为" + formatter.format((LocalDateTime)session.getAttribute("logintime"));
}

}
}

首先访问localhost:8080/login登陆,即可在redis看到共享的session信息

至此,实现完成

参考

  1. spring-session
  2. httpsession-redis