Spring LDAP 返回相同且不正确的 objectSid

2024-03-20

在我的 Spring Web 应用程序中,我无法检索正确的objectId来自当前使用 Active Directory 帐户登录的用户。所有属性似乎都有正确的值,但是objectId值始终设置为S-1-5-21-1723711471-3183472479-4012130053-3220159935我不知道它从哪里来。

网络安全配置

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/", "/home").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
                .logout()
                .permitAll();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
                .authenticationProvider(activeDirectoryLdapAuthenticationProvider());
    }

    private ActiveDirectoryLdapAuthenticationProvider activeDirectoryLdapAuthenticationProvider() {
        ActiveDirectoryLdapAuthenticationProvider provider =
                new ActiveDirectoryLdapAuthenticationProvider(LdapConfig.AD_DOMAIN, LdapConfig.AD_SERVER);
        provider.setUserDetailsContextMapper(new LdapUserDetailsContextMapper());
        return provider;
    }
}

LdapUserDetailsContextMapper

@Slf4j
public class LdapUserDetailsContextMapper implements UserDetailsContextMapper {
    @Override
    public UserDetails mapUserFromContext(DirContextOperations ctx, String username, Collection<? extends GrantedAuthority> collection) {
        log.info("username: " + username); //username is correct
        log.info("DN from ctx: " + ctx.getDn()); // returns correct DN
        byte[] byteSid = ctx.getStringAttribute("objectSid").getBytes();
        String sid = LdapUtils.convertBinarySidToString(byteSid);
        log.info("SID: " + sid); // S-1-5-21-1723711471-3183472479-4012130053-3220159935 everytime

        return new User(username, "notUsed", true, true, true, true,
                AuthorityUtils.createAuthorityList("ROLE_USER"));
    }

    @Override
    public void mapUserToContext(UserDetails userDetails, DirContextAdapter dirContextAdapter) {

    }
}

如何从 Active Directory 获取正确的 SID?


我想答案就在这里:http://forum.spring.io/forum/spring-projects/data/ldap/66894-objectsid-and-ldaptemplate http://forum.spring.io/forum/spring-projects/data/ldap/66894-objectsid-and-ldaptemplate

在倒数第二篇文章中,他描述了您遇到的同样问题。在上一篇文章中,他描述了一个修复方法,即将其添加到 Bean 配置文件中:

<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource">
    <property name="url" value="ldap://ldapserver.domain.com:389" />
    <property name="base" value="dc=domain,dc=com" />
    <property name="userDn" value="cn=binduser,cn=Users,dc=domain,dc=com" />
    <property name="password" value="bindpwd"/>
    <property name="baseEnvironmentProperties">
        <map>
        <entry key="java.naming.ldap.attributes.binary">
            <value>objectSid</value>
        </entry>
        </map>
    </property>
</bean>

您必须修改域的值,但我认为重要的部分是baseEnvironmentProperties.

这个线程 http://forum.spring.io/forum/spring-projects/data/ldap/47556-binary-attributes-objectguid-programmatically-set-the-environment还描述了一种编程方式来设置它(尽管,对于objectGuid,但您可以只交换属性)。

AbstractContextSource contextSource = (AbstractContextSource) ldapTemplate.getContextSource();
Map<String,String> baseEnvironmentProperties = new HashMap<String, String>();
baseEnvironmentProperties.put("java.naming.ldap.attributes.binary", "objectSid");
contextSource.setBaseEnvironmentProperties(baseEnvironmentProperties);
contextSource.afterPropertiesSet();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring LDAP 返回相同且不正确的 objectSid 的相关文章

随机推荐

  • 我可以在 Django 中使用 HTTP 基本身份验证吗?

    我们有一个在 Apache 上运行的网站 访问该网站有许多通过 HTTP 基本身份验证保护的静态页面 我使用 Django 内置的用户管理支持 用 Django 编写了网站的新部分 我遇到的问题是用户必须通过 HTTP Basic 身份验证
  • 如何使用 cURL 和 PHP 来欺骗引荐来源网址?

    我正在尝试使用 PHP 学习 cURL 来欺骗网站的引荐来源网址 我希望通过以下脚本来完成此任务 但它似乎不起作用 有什么想法 建议我哪里出错了 或者你知道有什么教程可以帮助我解决这个问题吗 Thanks Jessica
  • junit 测试用例生成器

    有没有一个好的工具可以根据一些原始模板自动生成 jUnit 测试用例 这样一来 没有太多 Java 或 jUnit 背景的工程师就可以编写测试用例 作为背景信息 这是用于黑盒测试 如果除了使用 jUnit 之外还有其他替代方法来运行回归测试
  • 在 Jenkins 管道中执行 gcloud 命令

    我尝试在 Jenkins 声明性管道中运行 gcloud 命令 如下例所示 pipeline agent any stages stage Run gcloud version steps sh gcloud version 我下载了 GC
  • Eclipse“增强类反编译器”插件调试时不反编译

    问题描述 查看类 即 Ctrl Shift T 时反编译工作正常 但从调试角度单步执行代码时则不然 而是打开 类文件查看器 使用的版本 Eclipse Oxygen 和增强型类反编译器 3 0 0 这也适用于氧气和更高版本 单击 窗口 gt
  • 在 ExtJS 网格中编辑整行后触发“afteredit”?

    我有一个 ExtJS 编辑器网格 里面有一些列 我想修改记录上的数据并将数据自动保存到数据库 但我只需要在完成编辑当前行的所有单元格后保存数据 我使用了 afteredit 事件 但它在一个单元格更改后立即触发了该事件 在完成所有单元格的修
  • 如何在 IndexPath 处使用 reloadRows 更新行

    我正在尝试使用按钮删除单元格 这是一个单元格的实现 UITableViewCell tableView UITableView tableView cellForRowAtIndexPath NSIndexPath indexPath st
  • Mac OS 10.14 Mojave + qt5.5 + gem capybara-webkit

    我的配置是 MAC Mojave v10 14 我尝试安装需要 qt5 5 的 gem Capybara webkit v 1 15 0 但 qt5 5 已从自制程序中删除 并且与 Xcode v10 不兼容 我试试这个 卸载 Xcode
  • 在 Android 中的 doinbackground() 中执行 UI 任务

    有没有办法在 AsyncTask 的 doinbackground 中执行 UI 任务 我很清楚最好在 onPostExecute 方法中执行此操作 但就我而言 由于我需要使用可重复使用的警报 因此能够访问我的 doinbackground
  • 查找 jQuery 中所有未选中的复选框

    我有一个复选框列表
  • Django,在模型中按函数过滤 Q 对象

    在我的 Profile 模型中 我有以下功能 它用于返回用户的全名 如果某些数据丢失 则返回用户的全名 def full name self first name self user first name strip if first na
  • 像java一样的Visual Studio参数化单元测试

    在 Java 测试环境中 我可以使用参数化单元测试 如以下代码所示 RunWith value Parameterized class public class JunitTest6 private int number public Ju
  • 在后台重新加载 UITableView 的数据

    在我的应用程序中 我有一个 UITableViewController 它的 tableView 分为 3 个部分 我从我的服务器下载每个部分的数据 为此 我有 3 个函数 例如 f1 f2 和 f3 每个更新一个相应的 NSArray 用
  • VS 2022:Roslyn 代码分析的高 RAM 和 CPU 问题

    我们在 Visual Studio 2022 v 17 2 2 64 位 中拥有一个庞大的解决方案 ASP NET MVC C Roslyn 代码分析始终使用高 CPU 和 RAM 有办法防止这个问题吗 配置还是其他 在 Visual St
  • 单击提交按钮时重新加载页面后如何滚动到特定 div?

    我正在尝试做一些奇特的事情 我已经成功编写了代码 以便在填写小表单并单击提交按钮时显示数据库中的结果 结果显示在表单的正下方 但我觉得如果页面能自动向下滚动到包含已填写表单结果的 div 那就太好了 我想我必须使用 jquery 或 aja
  • Angular2 - 将 POST 与 angular-in-memory-web-api 一起使用

    我正在使用 Angular 2 的 angular in memory web api 到目前为止 我只使用了 GET 调用 而且运行良好 我要调用的 API 仅使用 POST 调用 因此我开始将 GET 调用重写为 POST 调用 但随后
  • 如何从 Ruby on Rails 应用程序打印(条形码)标签?

    我在 RoR 中开发的第一个应用程序是针对我们库存中使用的一些 Kiosk 触摸屏 PC 当库存工人拿起一些材料时 他在表格中输入数量 现在我想在我们的 Zebra 打印机上打印一个标签 其中包含 客户名称 材料描述 数量和条形码 我如何从
  • 如何为 FsCheck 测试生成空字符串

    Using FsCheck https github com fsharp FsCheck Haskell QuickCheck 测试库的 F 版本 用于生成测试C https github com fsharp FsCheck blob
  • 使用 jquery 验证文件上传控件

    如何使用 jquery 验证 asp net FileUpload 控件 我需要验证两件事 当用户单击 确定 按钮时 FileUpload 不应为空 并且它应仅包含 excel 和 csv 文件 请帮忙 您可以验证扩展 form submi
  • Spring LDAP 返回相同且不正确的 objectSid

    在我的 Spring Web 应用程序中 我无法检索正确的objectId来自当前使用 Active Directory 帐户登录的用户 所有属性似乎都有正确的值 但是objectId值始终设置为S 1 5 21 1723711471 31