【问题标题】:Is there a way to have ConcurrentSessionControlStrategy.alwaysCreateSession in Spring Security 4?有没有办法在 Spring Security 4 中使用 ConcurrentSessionControlStrategy.alwaysCreateSession?
【发布时间】:2016-06-16 19:56:13
【问题描述】:

我们正在将我们的应用程序从 SpringSecurity 3 迁移到 4。我们将 ConcurrentSessionControlStrategy bean 配置为始终创建会话(用于定义 bean 的 Grails 表示法)

sessionRegistry(SessionRegistryImpl)
sessionAuthenticationStrategy(ConcurrentSessionControlStrategy, sessionRegistry) { 
    alwaysCreateSession = true
}

因为我们使用来自 Excel 和其他应用程序的具有 基本身份验证 的 HTTP 请求与应用程序交互,如果没有该选项,则不会创建会话,并且必须为每个操作完成身份验证,而不是一次第一个动作。

在 Spring Security 4 中,ConcurrentSessionControlStrategy 已迁移到 ConcurrentSessionControlStrategy(根据迁移指南 - http://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-xml.html),应该在 CompositeSessionAuthenticationStrategy 内部使用,但我们找不到设置会话策略的方法。

我们目前的解决方法是在认证之前调用非基本认证页面,是什么导致会话被创建,随后的请求将针对这个会话执行

【问题讨论】:

  • ConcurrentSessionControl 和你所描述的是不同的东西。 ConcurrentSessionControl 表示同一用户一次允许多少个会话处于活动状态。您正在混合会话创建和并发控制......这些是完全不同的事情。
  • 所以你的意思是alwaysCreateSession 不会影响基本身份验证的会话创建?设置此参数后,外部请求会创建会话,因此它为我们提供了所需的内容。除此之外,我们还控制每个用户允许的会话数,但根据迁移指南进行配置时,这在 4 中运行良好。
  • 是的,它确实会影响会话创建,但它与 ConcurrentSessionControlStrategy 无关。
  • 感谢您的 cmets,他们帮助我找到了解决方案

标签: java spring grails spring-security


【解决方案1】:

M. Deinum 的评论将我引向了另一个方向,我发现在 Grails 的securityContextPersistenceFilterspring-security-core 插件中securityContextPersistenceFilter 是用forceEagerSessionCreation = false 定义的。覆盖这个 bean 来强制创建急切的会话就可以了

securityContextPersistenceFilter(SecurityContextPersistenceFilter, ref('securityContextRepository')) {
    forceEagerSessionCreation = true
}

这可能也可以使用 Grails Spring Security Core 的配置来完成

源代码可在此处获得: https://github.com/grails-plugins/grails-spring-security-core/blob/master/src/main/groovy/grails/plugin/springsecurity/SpringSecurityCoreGrailsPlugin.groovy

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-04
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    相关资源
    最近更新 更多