【问题标题】:HttpSession in SpringbootSpring Boot 中的 HttpSession
【发布时间】:2019-01-26 14:17:18
【问题描述】:

我有两个控制器。我正在尝试以一种方法将登录的用户放入会话中,然后以另一种方法获取它。但是会话不同,如何解决?

@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") 为空

【问题讨论】:

  • 如何向这些端点发送请求?您是否在会话开始时发回正在设置的 cookie?如果不是,服务器怎么知道请求都属于同一个会话?
  • 我在 javascript 中使用 fetch 发送数据。我正在使用 Springboot。如果使用通常的 servlet 一切正常,并且在 Spring 中我能以某种方式理解另一个?

标签: java spring-mvc spring-boot httpsession


【解决方案1】:

WebApps 会话的常见行为是识别您的客户端,通常通过名为 JSESSIONID 的 cookie,但对于 REST 调用,您没有这种可能性,您甚至可能不会从浏览器调用,所以您不能说一个请求与另一个请求来自同一“机器/用户”。

为此,您需要:

  • 正确配置和启用 Spring 会话
  • 有办法识别您的请求,使用某种唯一 ID。

并且每个新请求都必须通知您相同的标识符,因此您可以要求 spring 诸如“给我这个用​​户的会话”之类的东西。

这里有更详细的Spring Session教程。

【讨论】:

  • 只是一个简单的例子:每个请求都需要一个 ID 字段。第一个请求的 ID 为 null,因此您在 java 内部的某个地方为其创建了一个 ID 和一个会话,并在 REST 的响应中返回此 ID,并且来自此“会话”的每个未来请求都需要传递此 ID。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-08
  • 2019-06-04
相关资源
最近更新 更多