java - Spring @ResponseBody 无法使用 session

标签 java spring angular

我有 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/

相关文章:

java - 混合泛型类型变量以在 Java 中实现类型安全的映射函数

java - 使用 OpenGL 读取像素颜色?

java - 如何连接一个不仅仅依赖于其自己的存储库的服务?

angular - Angular 模板中的可重用片段

javascript - 如何在 Angular 中创建可重用的输入字段?

angular - @fullcalendar/angular - 事件不起作用

java - JSF 中的 CDI 全局事件处理 (javax.enterprise.event)

java - 我怎样才能让这个框架中的圆圈实际上自动移动?

使用 Spring Boot 后端通过 Google Sign-In 进行 Android 登录

java - Spring Bean 未在应用程序启动时初始化