spring - 如何将自定义凭据传递给 Spring Boot ldap
问题描述
我正在使用 spring-ldap 和 spring-boot-starter 安全性的组合。我已经配置了基本设置,但停留在传递用户名和密码以进行身份验证。它总是试图验证 application.properties 中指定的默认凭据。无论如何通过传递登录表单中给出的凭据来正确执行此操作。
@Override protected void configure(AuthenticationManagerBuilder auth) 抛出异常 {
if(Boolean.parseBoolean(ldapEnabled)) {
auth
.ldapAuthentication()
.contextSource()
.url(ldapUrls + ldapBaseDn)
.managerDn(ldapSecurityPrincipal)
.managerPassword(ldapPrincipalPassword)
.and()
.userDnPatterns(ldapUserDnPattern);
}
}
ldap.urls= ldap://localhost:10389/
ldap.base.dn= ou=users,dc=example,dc=com
ldap.username= cn=test, ou=users,dc=example,dc=com
ldap.user.dn.pattern = cn={0}
ldap.partitionSuffix=dc=example,dc=com
ldap.partition=example
ldap.principal=uid=admin,ou=system
ldap.password=secret
ldap.port=10389
ldap.url=ldap://localhost:10389/
解决方案
我可以通过创建一个返回用户详细信息上下文映射器的 bean 来解决这个问题,如下所示。
@Bean
public UserDetailsContextMapper userDetailsContextMapper() {
return new LdapUserDetailsMapper() {
@Override
public UserDetails mapUserFromContext(DirContextOperations ctx, String username, Collection<? extends GrantedAuthority> authorities) {
UserDetails details = super.mapUserFromContext(ctx, username, authorities);
return details;
}
};
}
推荐阅读
- json - 验证文件名匹配目录名
- java - Java(这个集合)有什么意义?
- powershell - 使用 PowerShell 2 操作 Windows 防火墙规则
- r - 在 R 中组合多个单独的数据点的问题
- javascript - 使用 reactjs 前端将数据插入到 nodejs 和 mongodb 后端时出现问题
- python - 通过列表项循环访问前一项的优雅方式
- javascript - TypeScript 'number' 不可分配给 0 | 10 | 20 即使数字为 0
- javascript - 具有数千个可观察对象的 Knockout.js 表单对浏览器性能的影响
- c# - 如何模拟模拟的 IQueryable 的 .Where() 扩展
使用 NSubstitite - python - 无法从定义中调用 StringVar(根据下拉菜单保存到 .csv 中的特定行)