Spring Boot 中的 HttpSession
HttpSession in Springboot
我有两个控制器。我试图用一种方法将登录的用户放入会话中,然后用另一种方法获取它。但是会话不同,如何解决?
@RestController
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value = "/user/signIn", method = RequestMethod.POST)
public ResponseEntity<DataUser> signIn(@RequestBody @Valid SignInUser signInUser,
HttpSession session) {
User user = userService.getUser(signInUser.getEmail(), signInUser.getPassword());
session.setAttribute("user", user);
DataUser dataUser = new DataUser((User) session.getAttribute("user"));
return ResponseEntity.ok(dataUser);
}
}
@RestController
public class MessageController {
@Autowired
private MessageService messageService;
@RequestMapping(value = "/data/message", method = RequestMethod.POST)
public Message save(@RequestBody NewMessage newMessage,
HttpSession session) {
System.out.println(session.getAttribute("user"));
Message message = new Message(newMessage);
LocalDateTime dateTime = LocalDateTime.now();
message.setDateTime(dateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
message.setNumberRating(0);
return messageService.save(message);
}
}
session.getAttribute("user") 为空
WebApps 会话的常见行为是识别您的客户端,通常通过名为 JSESSIONID
的 cookie,但对于 REST
调用,您没有这种可能性,您甚至可能都没有从浏览器调用,因此您不能说一个请求来自与另一个请求相同的 "machine/user"。
为此,您需要:
- 正确配置并启用spring会话
- 有办法识别您的请求,某种唯一 ID。
而且每个新请求都必须通知您相同的标识符,因此您可以请求 spring 类似 "give me the session for this user" 的内容。
这里是Spring Session更详细的教程。
我有两个控制器。我试图用一种方法将登录的用户放入会话中,然后用另一种方法获取它。但是会话不同,如何解决?
@RestController
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value = "/user/signIn", method = RequestMethod.POST)
public ResponseEntity<DataUser> signIn(@RequestBody @Valid SignInUser signInUser,
HttpSession session) {
User user = userService.getUser(signInUser.getEmail(), signInUser.getPassword());
session.setAttribute("user", user);
DataUser dataUser = new DataUser((User) session.getAttribute("user"));
return ResponseEntity.ok(dataUser);
}
}
@RestController
public class MessageController {
@Autowired
private MessageService messageService;
@RequestMapping(value = "/data/message", method = RequestMethod.POST)
public Message save(@RequestBody NewMessage newMessage,
HttpSession session) {
System.out.println(session.getAttribute("user"));
Message message = new Message(newMessage);
LocalDateTime dateTime = LocalDateTime.now();
message.setDateTime(dateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
message.setNumberRating(0);
return messageService.save(message);
}
}
session.getAttribute("user") 为空
WebApps 会话的常见行为是识别您的客户端,通常通过名为 JSESSIONID
的 cookie,但对于 REST
调用,您没有这种可能性,您甚至可能都没有从浏览器调用,因此您不能说一个请求来自与另一个请求相同的 "machine/user"。
为此,您需要:
- 正确配置并启用spring会话
- 有办法识别您的请求,某种唯一 ID。
而且每个新请求都必须通知您相同的标识符,因此您可以请求 spring 类似 "give me the session for this user" 的内容。
这里是Spring Session更详细的教程。