在我的网络应用中,我有两个用户系统,一个是管理员,另一个是用户。我使用Multiple HttpSecurity分别为管理员和用户配置安全过滤器链。 首先,当我同时通过登录浏览器中的管理员和用户登录我的Web应用程序时,后者登录UserInfo将覆盖前者。
这是一个很大的错误,当我尝试修复它时,我了解SpringSecurity架构和实现,SpringSecurity使用会话Storing the SecurityContext between requests。因此,当我通过管理员和用户在登录浏览器中登录我的Web应用程序时同一时间,后一个登录userInfo将覆盖以前的登录userInfo。
通过覆盖HttpSessionSecurityContextRepository
,我创建了我的SecurityContextRepository
:OneSessionMultiContextRepository
。我可以使用它来确定哪个SecurityContext
从会话中获取或哪个键用于按当前存储到会话servletPath。
这解决了上面的问题,两个用户系统可以在我的网络应用程序中登录而不会相互影响。但是有一个新问题,当我退出一个,另一个是注销时!我发现SpringSecurity在注销时无效会话,导致这个问题。
如果我想要解决此问题,我必须禁止SessionFixationProtectionStrategy
并且在注销时永远不会无效会话。我不想这样做,因为禁止SessionFixationProtectionStrategy
并且当注销会降低安全性时永远无效会话
我如何解决这个问题?我的目的是让管理员和用户可以同时登录我的网络应用程序,而不会相互影响。
我不明白为什么SpringSecurity不会为这种情况提供支持,我认为这种情况很熟悉。
我不知道我应该把这些代码放在这里,因为它们太长了,如果需要我的代码,请告诉我。
我的英语不是很好。请原谅我。