spring-security - 具有相同凭据的 Spring-security 多重身份验证机制
问题描述
我正在尝试同时使用 2 种授权机制:LDAP 和 DAO。它们按配置顺序工作。如果用户凭据在两种机制中都匹配,则这是不合适的。(例如,在 LDAP 中有一个用户m.smith的密码为qwerty,而在数据库中有一个用户m.smith的密码为qwerty)是否有可能以某种方式传达当前使用哪种机制的标志?在这种情况下,应该忽略另一种机制。
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.ldapAuthentication()
.contextSource(contextSource)
.userSearchFilter("(sAMAccountName={0})")
.userDetailsContextMapper(userDetailsContextMapper);
auth
.userDetailsService(userDetailsService)
.passwordEncoder(passwordEncoder());
}
解决方案
如果您有两种完全不相交的机制,那么您可能应该在上层修复它(从 UI 开始)。例如,如果用户使用 LDAP 身份验证,您将发送一个标志(例如 HTTP 标头)来指示要使用的身份验证类型。然后,您可以实现将执行特定类型的身份验证(以编程方式)的自定义过滤器。
我不知道有任何其他解决方案可以在运行时执行您想要的操作。
推荐阅读
- google-apps-script - 谷歌应用程序脚本,如何创建一个在更改工作表名称时激活的事件对象脚本?
- mysql - Node js,将Json数据转成Html格式
- pdo - 如何构造一个合适的 foreach()
- python - 如何使用python cgi显示背景图像
- php - MySQL-添加休息后每天开两次店的营业时间
- android - Android 文本识别 - 限制文本识别器
- android - Google Places Android EditText 和 ListView
- scala - reduceByKeyAndWindow 在 Spark 流中如何工作?
- javascript - JavaScript - 使用 AppendChild() 向表中添加新行
- graphql - 在赛普拉斯的上下文中:如何等待 Apollo 客户端 Graphql 请求