1 .什么是 Session
Session 是 用于保持状态的基于Web 服务器 的方法。 Session允许通过将对象存储在Web服务器的内存中在整个用户会话过程中保持任何对象。 存储需要在整个用户会话过程中保持其状态的信息,例如登录信息或用户浏览Web应用程序时需要的其它信息。
2.SpringSession实现会话同步
Spring Session 提供了一个 API 和实现,用于管理用户的会话信息,同时使其在不依赖于特定于应用程
序容器的解决方案的情况下,可以轻松地支持集群会话。
它还提供了透明的集成:HttpSession 允许以中立的方式替换应用程序容器(即 Tomcat)中的HttpSession,并支持在 Headers 中提供会话 ID 以与 RESTful API 一起使用。
WebSocket 能够在接收 WebSocket 消息时使HttpSession保持活动状态
WebSession 允许以与应用程序容器无关的方式替换 Spring WebFlux 的WebSession。
3.导入依赖包
4.配置application.yml文件
5.创建RedisConfig文件
@Configuration
public class RedisConfig {
@Bean("springSessionDefaultRedisSerializer")
public RedisSerializer<Object> redisSerializer(){
return new GenericFastJsonRedisSerializer();
}
}
6.创建实体类文件
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User implements Serializable {
private Integer id;
private String username;
private String password;
}
7.创建Service文件
@Service
public class UserService {
public User getUser(String username,String password){
User user = new User();
user.setId(1);
user.setUsername("root");
user.setPassword("1234");
return user;
}
}
8.创建Controller访问
@RestController
@RequestMapping("/user")
public class UserController {
private final Logger log = LoggerFactory.getLogger(this.getClass());
@Resource
private UserService userService;
@PostMapping("/login")
public String login(String username, String password, HttpSession session) {
User user = userService.getUserByUsernameAndPassword(username, password);
String userJson = JSONObject.toJSONString(user);
session.setAttribute("user", userJson);
log.info("sessionId: {}, user: {}", session.getId(), userJson);
return JSONObject.toJSONString(user);
}
@GetMapping("/session")
public String getData(HttpSession session) {
Object user = session.getAttribute("user");
String userJson = JSONObject.toJSONString(user);
log.info("sessionId: {}, user: {}", session.getId(), userJson);
return userJson;
}
}
9.使用api分别访问两个方法
10.可以正常读取用户Session值,并且Redis数据同步。
到这里会话同步就已经成功了!