升级到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中,安装模板未生成war / web.xml
我尝试将其添加到/WEB-INF/web.xml,但还是没有运气。
最佳答案
我认为您缺少sessionAuthenticationStragegy bean定义,请尝试删除CompositeSessionAuthenticationStrategy行并将其替换为:sessionAuthenticationStrategy(CompositeSessionAuthenticationStrategy, [ref('concurrentSessionControlAuthenticationStrategy'), ref('sessionFixationProtectionStrategy'), ref('registerSessionAuthenticationStrategy')])
这是我看到的与Grails 4兼容的代码和我的代码之间的唯一区别。
关于grails - grails 4 sessionRegistry空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57949697/