Springboot2.x + Redis管理Session共享
1.maven管理jar包
```
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
```
注意:当前版本用的2.0.1,需要假如spring-boot-starter-security。不然会报错。
2. controller层
@RestController
public class RedisController {
@GetMapping("/setSessionId")
public String setredisResult(HttpServletRequest request){
HttpSession session = request.getSession();
session.setAttribute("sessionId","1001_ceshi");
return "设置ok...";
}
@GetMapping("/getSessionId")
public String redisResult(HttpServletRequest request) {
HttpSession session = request.getSession();
String sessid = (String) session.getAttribute("sessionId");
return "sessionId:"+sessid;
}
@RequestMapping("/mytest")
public String redisResult(@RequestParam(value = "zheng", required = false) String zheng) {
System.err.println(zheng);
return "return: " + zheng;
}
}
3. 配置config
3.1 RedisSessionConfig配置类
/**
- 保存登录用户的session信息
- Redis客户端版本需要2.8以上
- maxInactiveIntervalInSeconds设置过期时间
*/
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 600)
public class RedisSessionConfig {
}
3.2 SecurityConfig配置类
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
/**
* 配置不需要登陆验证(不然访问任意接口都跳转到login登录页面) 因为在spirngboot中,security是默认开启的。
*
* spring-session-data-redis需要配合spring-boot-starter-security一起使用,不然会报错。目前2.0版本是这样的
*
* security.basic.enabled=false 但是spring boot 2.0+之后这样配置就不能生效了。
*
* @param http
* @throws Exception
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().permitAll().and().logout().permitAll();
}
}
4.配置文件
server.port=8083
#session存储类型
spring.session.store-type=redis
#Redis数据库索引(默认为0)
spring.redis.database=0
#Redis服务器地址
spring.redis.host=127.0.0.1
#Redis服务器连接端口
spring.redis.port=6379
#Redis服务器连接密码(默认为空)
spring.redis.password=
#连接超时时间(毫秒)
spring.redis.timeout=30000
5.测试结果
启动2个项目,端口分别为8093, 8094,。 首先访问 http://localhost:/8093/setSessionId 进行设置Redis, 然后访问 http://localhost:/8094/getSessionId 查看上一步缓存的Session。