升级到 grails 4, sessionRegistry.getAllPrincipal() 始终为空。
resources.groovy 中的原始 spring bean 是
sessionRegistry(SessionRegistryImpl)
concurrentSessionFilter(ConcurrentSessionFilter){
sessionRegistry = sessionRegistry
expiredUrl = '/login'
}
由于这不再有效,我尝试将 resources.groovy 更新为
sessionRegistry(SessionRegistryImpl)
registerSessionAuthenticationStrategy(RegisterSessionAuthenticationStrategy, ref(sessionRegistry))
sessionFixationProtectionStrategy(SessionFixationProtectionStrategy)
concurrentSessionControlAuthenticationStrategy(ConcurrentSessionControlAuthenticationStrategy, ref(sessionRegistry)){
maximumSessions=1
exceptionIfMaximumExceeded=true
}
compositeSessionAuthenticationStrategy(CompositeSessionAuthenticationStrategy,
[ref(registerSessionAuthenticationStrategy),ref(sessionFixationProtectionStrategy),ref(concurrentSessionControlAuthenticationStrategy)])
所有这些 bean 都来自 org.springframework.security.web.authentication.session 包。
我也为 grails.plugin.springsecurity.providerNames 添加了名称
DaoAuthenticationProvider 由自定义身份验证提供程序扩展。登录和注销工作正常,但主体永远不会在升级后的应用程序中注册。我是否需要手动注册它们(sessionRegistry.registerNewSession())?
有旧答案说使用 grails install-templates 然后编辑 src/templates/war 中的 web.xml。但是在 grails 4 中, install-templates 没有生成 war/web.xml
我尝试将它添加到 /WEB-INF/web.xml,但仍然没有运气。