httpSession.getAttribute("userId") returns null in spring 在来自 Angular 前端的一些频繁 API 请求后启动

httpSession.getAttribute("userId") returns null in spring Boot after some frequent API request from Angular front end

我正在开发一个在 Angular 5 中实现前端的应用程序,而后端在 Spring 引导中,我正在使用 JWT 令牌进行身份验证。我无法弄清楚的问题是,当用户登录时,我在后端的 HttpSession 中设置了 userId,以便在同一用户以后的请求中使用 userId。

session.setAttribute("userId", userData.getUsername());

如果同一用户以半秒之类的间隔向后端的 RestController 发出请求,则正确返回 httpSession,如果我发出非常快的请求,则 httpSession 开始返回 NULL。我正在从 Angular 向各种服务提出这样的请求。

getMyAccountList(){
    return this.http.get('/api/account/getMyAccountList');
  }

所以我发现这是由于 Spring 安全的会话固定行为,默认情况下处于活动状态。在WebSecuirtyConfigurerAdapter配置HttpSecurity http可以解决问题。只需要添加这个配置即可。

http.sessionManagement().sessionFixation().none();

也参考这个post:Apache Tomcat 7 Changing JSESSIONID on Every Request