前言
本篇说一下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: 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信息
至此,实现完成
参考
- spring-session
- httpsession-redis