gpt4 book ai didi

java - Autowiring HttpSession 给出与 HttpServletRequest 不同的对象

转载 作者:太空宇宙 更新时间:2023-11-04 11:42:33 27 4
gpt4 key购买 nike

我使用 Spring Security,登录时发现框架有奇怪的行为。 Spring Security WebAuthenticationDetails 具有从 HTTP 请求获取的参数 sessionId ,这一切都应该很好,但实际上 REST 请求给了我另一个 session id。如果我 Autowiring HttpSession,然后从中获取 session ID,我将获得类似Spring的ID。看来我一个用户有两个 id。这是对的吗?或者我错过了什么?

编辑:

例如,这个类将给出一些 session ID

public class AuthenticationEventListener implements ApplicationListener<AbstractAuthenticationEvent> {

@Autowired
HttpSession httpSession;

@Override
public void onApplicationEvent(AbstractAuthenticationEvent event) {
if (event instanceof AuthenticationSuccessEvent) {
LoggedUser loggedUser = (LoggedUser) event.getAuthentication().getPrincipal();
loggedUser.initSessionParams(event.getAuthentication());
String sessionId = httpSession.getId();
}
}
}

这个方法会给出另一个:

@RequestMapping(value = "/chart")
public Map getTestStatusesChart(HttpServletRequest request) {
String sessionId= request.getSession(false).getId();
return null;
}

最佳答案

所以答案是:在安全条件下,Spring 默认更改 session ID。为了防止这种行为,您需要在 Spring Security 配置中禁用 session 固定保护。更多信息 link

关于java - Autowiring HttpSession 给出与 HttpServletRequest 不同的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42646230/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com