我一直在研究使用弹簧安全的应用程序。我对 spring security 很陌生,最终遇到了类似于this和this的问题。但它有点不同。
我以这种方式进行手动身份验证:
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, password);
Authentication authentication = this.authenticationProvider.authenticate(token);
SecurityContextHolder.getContext().setAuthentication(authentication);
当页面加载时,一切似乎都正常。但是,当我在应用程序中导航时,似乎我失去了我的 SecurityContext。(如果用户登录,我有显示用户名的状态栏)
我这样得到我的上下文:
SecurityContextHolder.getContext()
更重要的是,在某些不正确的加载之后,有时它会正确加载上下文并不会完全丢失。似乎我在一个会话中有多个上下文(我有 HttpSessionListener 和 sessionCreated 只触发一次)。我尝试打印出上下文的对象哈希,并注意到有几个不同的哈希重复。只有一个与我的连接用户有关,其他则不是。
所以我假设一个会话中有几个上下文(如果这可能的话)。我希望我清楚地解释了一切。如果有人可以为我提供一些帮助,我将不胜感激。