如何按条件中断 Spring Security Provider 链?

Posted

技术标签:

【中文标题】如何按条件中断 Spring Security Provider 链?【英文标题】:How to interrupt spring security provider chain by condition? 【发布时间】:2016-07-09 13:47:29 【问题描述】:

我有以下 sring 安全配置:

<security:authentication-manager>
    <security:authentication-provider ref="provider1"/>
    <security:authentication-provider ref="provider2"/>
    <security:authentication-provider ref="provider3"/>
    <security:authentication-provider ref="provider4"/>
    <security:authentication-provider ref="provider5"/>
    <security:authentication-provider ref="provider6"/>
</security:authentication-manager>

如果现在晚于 21-00,我需要始终返回 auth fail。

我不想为每个提供者添加相同的代码。

有更好的方法吗?

【问题讨论】:

你可以投掷和AccountStatusException。 ***.com/questions/9303502/… @Evgeni 是正确的。但我不明白为什么这对 BadCredentialsException 不起作用 @Evgeni 我在文档中没有看到关于它的提及 我不知道。我刚刚找到了答案... @Evgeni 还是谢谢 【参考方案1】:

这是自定义安全 Web 表达式的典型示例。它用于拦截 url 模式而不是身份验证提供程序

有关详细信息,请查看此answer,其中包含有关实现自定义表达式的更多详细信息

【讨论】:

这些提供程序是很多年前写的,我没有理清它们是如何工作的。我只需要添加额外的约束 这样我的想法就更好了,因为你不需要接触提供者,你只需要添加安全表达式。 请描述这个解决方案。我已经阅读了您的主题,但我仍然不明白。 我应该添加哪些类?

以上是关于如何按条件中断 Spring Security Provider 链?的主要内容,如果未能解决你的问题,请参考以下文章

学好Spring Security 和Apache Shiro你需要具备这些条件

如何有条件地跳过 Grails Spring Security 插件过滤器链中的 SecurityContextPersistenceFilter 过滤器

spring security acl 不比较按位权限

Spring Security - 有条件的 WebApplicationInitializer

Spring Security 有条件的基本认证

Spring security antMatcher 未按预期工作