- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 spring-security 3.1。
我必须以用户指定最大 session 数的方式实现 session 并发策略。这是我所做的:
编码一个类扩展
org.springframework.security.web.authentication.session.ConcurrentSessionControlStrategy 并覆盖该方法protected int getMaximumSessionsForThisUser(Authentication authentication)
我使用命名空间配置对其进行了配置:
<security:http>
...
<security:session-management session-authentication-strategy-ref="mySessionAuthenticationStrategy"/>
...
</security:http>
<bean id="mySessionAuthenticationStrategy" class="foo.bar.MySessionAuthenticationStrategy">
<constructor-arg ref="sessionRegistry"/>
</bean>
<bean id="sessionRegistry"
class="org.springframework.security.core.session.SessionRegistryImpl" />
SessionManagementFilter
为假(阻止任何
SessionAuthenticationStrategy
被调用):
if (!securityContextRepository.containsContext(request))
UsernamePasswordAuthenticationFilter
中设置 session 身份验证策略的文档。 ,但这不是我的选择,因为我将表单登录与 SAML 登录以及
PreAuthentication
结合使用。验证身份验证 token 的机制(3 种不同的身份验证机制)。
最佳答案
简短回答(这是一个猜测):问题可能是您的预身份验证过滤器(或其他非表单登录过滤器)创建了一个 session ,而不会自行调用 SessionAuthenticationStrategy
首先。
详细解释:line you mentioned基本上是在没有 auth-filter 创建新 session 的情况下检查请求是否刚刚在过滤器链的当前执行中通过了身份验证。该检查检查是否存在 session ,以及身份验证对象是否已保存到 session 中。
如果它找到 session 和保存的 auth 对象,那就意味着什么都不用做:关于身份验证和 session 管理的一切都已经通过其他过滤器或相同的 SessionManagementFilter
进行了安排。在处理同一 session 中较早的先前请求期间。
另一种情况是尚未创建 session 或(非匿名)身份验证对象尚未保存在现有 session 中。只有在这种情况下才是 SessionManagementFilter
通过调用 SessionAuthenticationStrategy
来实际执行 session 管理的责任.
根据你的描述,第二种情况永远不会发生,这意味着 session 已经创建,并且在这个执行点已经保存了auth对象。这应该意味着您的自定义身份验证过滤器必须创建了一个 session ,这本身不是问题。然而,一般规则是任何创建 session 的人都必须首先查阅 SessionAuthenticationStrategy
本身。如果您的身份验证过滤器选择忽略它,SessionManagementFilter
将无能为力。 (它无法撤消 session 创建,即使 SessionAuthenticationStrategy
已否决用户的身份验证)。
仔细检查是否是这种情况,并尽量避免在预认证过滤器中创建 session 。请注意, session 创建也可以通过 SaveToSessionResponseWrapper.saveContext()
以一种偷偷摸摸的方式发生。被称为例如在重定向时。
关于spring-security - 自定义 ConcurrentSessionControlStrategy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16903373/
我正在使用 spring-security 3.1。 我必须以用户指定最大 session 数的方式实现 session 并发策略。这是我所做的: 编码一个类扩展 org.springframewor
在我写的http标签内: 我有以下 sas bean 在代码中我从注册表获取信息: @Autowired private SessionRegistr
我有一个使用 ConcurrentSessionControlStrategy 和我自己的 sessionRegistry 实现的工作配置。我升级到 spring security 3.2.4 并且不
我是一名优秀的程序员,十分优秀!