使用 LDAP 和组成员身份的 Spring Security

2023-12-06

我正在使用 spring security 来验证用户是否输入了有效的用户名和密码。

我还想验证用户是否属于特定组。

虽然凭据验证有效,但组成员身份验证无效。

我需要配置 ldapAuthoritiesPopulator 吗?


虽然凭据验证有效,但组成员身份验证无效。

我假设组成员身份是 ldap 的组合base and userDn.

这是一个可以帮助您的代码。

    public class LDAPDetail{
      private String url; //your LDAP url
      private Long timeout; // some timeout to connect LDAP
      private String domain; // domain of user
      private String userContainer; // typically value for OU=**,dc=**,dc=**
     // You should be getting value for _domain_ and _userContainer_ from user's LDAP detail                                 
    }

    public void validateUserDetails(){
       LdapDetail ldapDetail = //gets user's value which you want to validate.
       LdapTemplate ldapTemplate =  build(ldapDetail, "username", "password");

       AndFilter filter = new AndFilter();
            filter.and(new EqualsFilter("objectclass", "person")).and(new EqualsFilter("cn", userName));

       ldapTemplate.authenticate(LdapUtils.emptyLdapName(), filter.toString(), "password")
    }

    public static LdapTemplate build(LdapDetail ldapDetail, String userName, String password) {
            LdapContextSource ldapContextSource = new LdapContextSource();
            ldapContextSource.setBase(ldapDetail.getUserContainer());
            ldapContextSource.setUrl(ldapDetail.getUrl());
            ldapContextSource.setAnonymousReadOnly(true);
            ldapContextSource.setCacheEnvironmentProperties(false);
            ldapContextSource.setUserDn(ldapDetail.getDomain());
            ldapContextSource.setBaseEnvironmentProperties(buildContextFor(ldapDetail, userName, password));

            LdapTemplate ldapTemplate = new LdapTemplate(ldapContextSource);
            ldapTemplate.setContextSource(ldapContextSource);

            return ldapTemplate;
        }

    public static Map<String, Object> buildContextFor(LdapDetail ldapDetail, String userName, String password) {
            Map<String, Object> env = new HashMap<>();

            env.put(Context.REFERRAL, "throw");
            env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
            env.put(Context.SECURITY_AUTHENTICATION, "simple");
            env.put(Context.SECURITY_PROTOCOL, "ssl");
            env.put("java.naming.factory.url.pkgs",
                    "org.jboss.naming:org.jnp.interfaces:org.jboss.naming:org.jnp.interfaces");
            env.put("com.sun.jndi.ldap.connect.timeout", String.valueOf(ldapDetail.getTimeout()));
            env.put(Context.PROVIDER_URL, ldapDetail.getUrl());
            env.put("ldap.domain", ldapDetail.getDomain());
            env.put(Context.SECURITY_PRINCIPAL, userName);
            env.put(Context.SECURITY_CREDENTIALS, password);

            return env;
   }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 LDAP 和组成员身份的 Spring Security 的相关文章

随机推荐

  • 将这行文本读入结构的最简单方法?

    我有一个文本文件 其中的数据格式如下 Lee AUS 2 103 2 62 TRUE Check AUS 4 48 0 23 FALSE Mills AUS 8 236 0 69 FALSE 我需要将每一行放入一个结构中 但是我想避免使用固
  • 启用 CORS 的正确位置在哪里?

    我在用着Spyne 这个例子 你好世界 代码 制作一个生成一些内容的网络服务json数据 然后我尝试在客户端浏览器中的 JavaScript 代码中使用这些数据 当我去到地址时http localhost 8000 say hello na
  • NVD3.js 为图表中的特定条形着色

    有没有办法给特定的条形着色 如果条形小于线 则将其涂成红色 Code https github com tvinci webs blob gh pages lineplusbar html 例子 http tvinci github io
  • 尝试传递 constexpr lambda 并使用它来显式指定返回类型

    我想使用一个函数并传递一个constexpr lambda 但是 只有当我通过以下方式推导类型时 它才会成功编译auto 通过显式给出类型 gt std array
  • XAML 中的 XPath 绑定错误

    我在 XAML 中有一个绑定 Binding XPath List Item Status OK Visual Studio 告诉我它需要 和 但是当我查看其他地方的文档时 这条线看起来不错 它不会编译并给我一个错误 指出成员 List I
  • Oracle SQL 一条语句对多个属性和表进行权限授权

    是否可以在一条语句中对不同的表或属性授予不同的权限 例如我想结合 GRANT SELECT ON tbl TO user and GRANT UPDATE OF attr ON tbl TO user 此外 我可以结合授予不同关系的特权 G
  • 当 QThread 尝试通过 PyGILState_Ensure() 获取 Python GIL 时发生死锁

    我有一个 C Qt 应用程序 我想在其中嵌入 Python 解释器 我想从 QThread 调用 Python 但在调用 PyGILState Ensure 以尝试获取全局解释器锁 GIL 的行处遇到死锁 我将在下面提供一个最小且直接的示例
  • JOptionPane 在不同行上具有多个输入

    我想创建一个JOptionPane允许用户选择要连接的 IP 地址和端口 它的结构应该是这样的 IP 地址 此处的文本字段 端口 此处的文本字段 取消 确定 标签应左对齐 文本字段也应左对齐 我无法在这里真正对故事板进行建模 但基本上文本字
  • Android RecyclerView 复选框会自行检查

    我有一个 RecyclerView 它有一个复选框和文本视图 数字 10 20 30 40 直到 500 应显示在文本视图中 选中的复选框应在文本视图中添加与该复选框对应的数字 例如如果用户仅检查值 10 则 textView 将显示 10
  • Python 2.6 中导入 win32api 错误

    在Windows操作系统 64位 下运行python26时 我有这样的错误 import win32api error in Python 2 6 pywintypes26 dll or pythoncom26 dll missing Im
  • UnboundLocalError:局部变量...在赋值之前引用[重复]

    这个问题在这里已经有答案了 我得到一个UnboundLocalError因为我在 if 语句中使用了未执行的模板值 处理这种情况的标准方法是什么 class Test webapp RequestHandler def get self u
  • 内联元素的 box-shadow

    多行文本位于图像上 文本应该出现在白色背景上 就像胶带一样 文本的每一行的左侧和右侧都需要有一个小的填充 这可以通过内联文本的框阴影来实现 div slide background color black height 200px widt
  • Ruby on Rails:使用 Thin Start --ssl 时,force_ssl 不会从 http 重定向到 https

    我一直在尝试将我的rails项目配置为使用SSL 作为应用程序范围 和thin 通过添加thin gem并放置config force ssl true to application rb 但结果 我遇到了一个恼人的问题 当我使用以下命令启
  • 如何将 flutter windows 应用程序与 firebase 集成? [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我正在尝试使用 flutter 创建 Windows 应用程序 并且想使用 firebase 进行身份验证并使用 firestore 来存储数据 那么我该如何整合它呢 首先 使用fir
  • 从长形式到宽形式没有 id.var?

    我有一些长格式的数据 如下所示 dat1 data frame id rep LETTERS 1 2 each 4 value 1 8 以表格形式 id value A 1 A 2 A 3 A 4 B 5 B 6 B 7 B 8 我希望它是
  • R 中的舍入误差?

    考虑以下 gt x lt 178379 4999999999999999999999999999999 gt x 1 178379 5 gt round x 1 178380 这似乎是一个基本的舍入错误 R 中是否存在已知的舍入误差 或者是
  • 如何恢复未提交的更改(包括文件和文件夹)?

    是否有 Git 命令可以恢复工作树和索引中所有未提交的更改 并删除新创建的文件和文件夹 您可以运行这两个命令 Revert changes to modified files git reset hard Remove all untrac
  • matplotlib.pyplot 格式字符串 kwarg?

    我正在读matplotlib docs 我正在努力寻找 格式字符串 的关键字参数 或者它只是一个位置参数 这是一个具体的pyplot论点 有点像旧的论点的残余pylab In ro r表示红色 o 表示圆形标记 参数可以这样设置 color
  • 如何验证函数的多个输入?

    我有一个 Validator 类 它允许我们使用 setter 方法设置其成员变量 主要是布尔值 的值 mv1 mv2 mv3 等 让我们将所有这些变量称为 设置 所有 setter 方法都返回此 Validator 而不是通常的 void
  • 使用 LDAP 和组成员身份的 Spring Security

    我正在使用 spring security 来验证用户是否输入了有效的用户名和密码 我还想验证用户是否属于特定组 虽然凭据验证有效 但组成员身份验证无效 我需要配置 ldapAuthoritiesPopulator 吗 虽然凭据验证有效 但