我有 angular2 应用程序,并使用 Tomcat 和 spring 来获取数据。我不需要任何页面重新加载或重定向,我需要的只是数据,因此来自服务器的所有响应都有 @ResponseBody 注释。
我的问题是,由于这个注释,我无法获取用户 session 变量。当我登录时,我创建 session ,将用户数据存储在其中,但下次调用时无法获取它。
@JsonIgnoreProperties(ignoreUnknown = true)
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public String login(HttpServletRequest REQ, @RequestBody String BODY) throws Exception
{
...check if all ok...
REQ.getSession().setAttribute("user", user);
... return user data...
}
有没有其他方法可以将我的数据以及所需的数据发送回客户端,以便能够使用 session 。
编辑: 问题不在服务器端,而在客户端。默认情况下,Angular 在跨域请求时不会发送 cookie JSESSIONID。
最佳答案
首先检查您的请求/响应(例如在 Chrome 开发工具中)。 Tomcat 创建名为 JSESSIONID
的新 cookie 来将客户端与服务器 session 对象绑定(bind),因此请在登录方法响应 header 中查找此 cookie。然后确保您在下一个请求中将此 cookie 发送回您的服务器。 session 创建与 Spring
或 @ResponseBody
无关,其生命周期由容器(Tomcat)管理。
此外,如果您要发出跨域请求,请检查 this answer .
关于java - Spring @ResponseBody 无法使用 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38906231/