Spring Security Concurrent Session:未能使“max-sessions”字段可配置

Posted

技术标签:

【中文标题】Spring Security Concurrent Session:未能使“max-sessions”字段可配置【英文标题】:Spring Security Concurrent Session : failed to make "max-sessions" field configurable 【发布时间】:2018-02-23 12:34:39 【问题描述】:

我需要在我的网络应用程序中允许并发会话控制并设置可配置字段“最大会话数”。我的配置如下:

<security:session-management>
    <security:concurrency-control max-sessions="$maxConcurrentSessionsCount" session-registry-ref="sessionRegistry" expired-url="/handleInvalidatedSession.gs4tr"/>
</security:session-management>`

您可以猜到,在“services.properties”文件中应该有“maxConcurrentSessionsCount”字段,客户可以根据自己的意愿设置。 但我在 Intelij 中收到了下一个警告:

"attribute 'max-sessions' on element 'security:concurrency-control' is not valid with respect to its type, 'positiveInteger'".

我成功配置了许多其他的东西,比如“remember-me”中的“token-validity-seconds”和“remember-me-cookie”等。 知道如何解决问题吗?在互联网上搜索了几天寻求帮助,但失败了。

编辑: 在“services.properties”中配置: "maxConcurrentSessionsCount=2"

在启动应用程序时,它会引发下一个错误:

No, it doesn't. It throws next ERROR on starting app:

017-09-14 15:46:47,724 错误 [org.gs4tr.projectdirector.service.context.ContextLoaderListener][localhost-startStop-1][user:] - org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException:来自类路径资源 [org/gs4tr/foundation/modules/webmvc/spring/applicationContext-security-default.xml] 的 XML 文档中的第 75 行无效;嵌套异常是 org.xml.sax.SAXParseException;行号:75;列号:72; cvc-datatype-valid.1.2.1:“$maxConcurrentSessionsCount”不是“整数”的有效值。 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:399) 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336) 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304) 在 org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181) 在 org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217) 在 org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188) 在 org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125) 在 org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94) 在 org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129) 在 org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:537) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:452) 在 org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403) 在 org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306) 在 org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) 在 org.gs4tr.projectdirector.service.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:73) 在 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4811) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5251) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)

【问题讨论】:

所以您收到了警告,但它有效吗?您是否在某处定义了maxConcurrentSesionsCount 参数? IntelliJ IDEA 知道吗? @Kayaman 请参阅有问题的编辑。 【参考方案1】:

这是max-session属性的定义:

<xs:attribute name="max-sessions" type="xs:positiveInteger">
<xs:annotation>
<xs:documentation>
The maximum number of sessions a single authenticated user can have open at the same time. Defaults to "1".
</xs:documentation>
</xs:annotation>
</xs:attribute>

如您所见,属性类型为positiveInteger,不允许使用SpEL。

SpEL(例如获取属性值)是一个字符串,在某些情况下您可以use SpEL:

可以使用如下所示的表达式设置属性或构造函数参数值

【讨论】:

以上是关于Spring Security Concurrent Session:未能使“max-sessions”字段可配置的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security:2.4 Getting Spring Security

没有 JSP 的 Spring Security /j_spring_security_check

Spring-Security

Spring Security 登录错误:HTTP 状态 404 - /j_spring_security_check

未调用 Spring Security j_spring_security_check

Spring Security入门(3-7)Spring Security处理页面的ajax请求