Shiro JndiLdapRealm 针对 LDAP 的授权

2023-11-24

The Shiro 类 JndiLdapRealm 的 JavaDoc明确表示默认情况下禁用授权,并且用户应通过子类化和覆盖 LDAP 服务器来实现授权JndiLdapRealm#doGetAuthorizationInfo方法。 是否有示例代码说明如何执行此操作,包括处理与任何地方可用的 LDAP 服务器的通信/协议?


您应该实现自己的 LdapRealm 扩展 JndiLdapRealm。 在此实现中,您将重写 queryForAuthorizationInfo() ;这是一个简单的例子:

protected AuthorizationInfo queryForAuthorizationInfo(PrincipalCollection principals, LdapContextFactory ldapContextFactory) throws NamingException {

String username = (String) getAvailablePrincipal(principals);

// Perform context search
LdapContext ldapContext = ldapContextFactory.getSystemLdapContext();

Set<String> roleNames;

try {
  roleNames = getRoleNamesForUser(username, ldapContext);
} finally {
  LdapUtils.closeContext(ldapContext);
}

return buildAuthorizationInfo(roleNames);
}

protected AuthorizationInfo buildAuthorizationInfo(Set<String> roleNames) {
return new SimpleAuthorizationInfo(roleNames);
}

protected Set<String> getRoleNamesForUser(String username, LdapContext ldapContext) throws NamingException {
Set<String> roleNames;
roleNames = new LinkedHashSet<String>();

SearchControls searchCtls = new SearchControls();
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);

//SHIRO-115 - prevent potential code injection:
String searchFilter = "(&(objectClass=*)(CN={0}))";
Object[] searchArguments = new Object[]{ username };

NamingEnumeration answer = ldapContext.search(searchBase, searchFilter, searchArguments, searchCtls);

while (answer.hasMoreElements()) {
  SearchResult sr = (SearchResult) answer.next();

  if (log.isDebugEnabled()) {
    log.debug("Retrieving group names for user [" + sr.getName() + "]");
  }

  Attributes attrs = sr.getAttributes();

  if (attrs != null) {
    NamingEnumeration ae = attrs.getAll();
    while (ae.hasMore()) {
      Attribute attr = (Attribute) ae.next();

      if (attr.getID().equals("memberOf")) {

        Collection<String> groupNames = LdapUtils.getAllAttributeValues(attr);

        if (log.isDebugEnabled()) {
          log.debug("Groups found for user [" + username + "]: " + groupNames);
        }

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

Shiro JndiLdapRealm 针对 LDAP 的授权 的相关文章

  • 通过 ldapmodify 修改 Active Directory 密码

    我正在研究各种 LDAP 操作的脚本编写 然而 我在 Active Directory 用户创建方面遇到了一些障碍 当我通过以下 LDIF 加载时 它失败ldapmodify命令 dn CN Frank CN Users DC domain
  • 如何在 Jenkins 中创建用户并将其添加到组中进行身份验证?

    我选择使用 Jenkins 自己的用户数据库 安全领域进行用户登录 因为我无法在公司中使用 LDAP 当您决定将主机名或端口号更改为其他名称时 Google 的 OpenID 就会出现问题 为了安全起见 我使用 基于项目的矩阵授权策略 模式
  • LDAPSEARCH 转换为表格格式

    有没有办法执行 LDAP 搜索并将结果保存为表格格式 例如 csv 干杯 乔治 您可以使用优秀的铣床工具 mlr https miller readthedocs io en latest 最后一点 echo output sed s g
  • 为什么我从 LDAP 属性中获取“System.__ComObject”?

    我将是第一个承认这是被删减和过去的节目的人 我以前没看过AD 实在是看不懂 我想这就是我的下一个研究 不管怎样 这是一些测试代码 它应该显示到期日期 要么以可读的形式 要么以刻度显示 这并不重要 这是一个 Web 表单 在开发 Web 服务
  • Sitecore 与 LDAP - 以编程方式进行身份验证

    我正在 Sitecore 中创建一个应用程序 我只希望用户可以通过直接 URL 来使用它 我希望针对 LDAP 进行身份验证 我尝试直接进入应用程序并让它重定向到自动登录页面并将我重定向到应用程序 但它没有这样做 相反 它带我进入了 Sit
  • 查找 Active Directory 中特定用户所属的组/分发列表

    假设我在 OU Groups DC contaco DC com ct 我可以找到子 OU 中的所有组 但找到用户 bobdole 所属的所有组的唯一方法是查看每个组 看看他是否在 成员 字段中 不幸的是 当我查看用户 bobdole 时
  • 如何在不检索记录的情况下计算 LDAP 查询匹配的条目数?

    如何在不检索记录的情况下计算 LDAP 查询匹配的条目数 我正在对一大组条目尝试几种不同的 LDAP 过滤器 出于性能原因 我只想知道返回条目的数量 而不是获取全部条目 这可能吗 如何实现 不可以 LDAP 协议不提供计数支持 服务器实现可
  • 如何在 Windows 中向 AD 组添加自定义属性?

    我想知道如何编写这个脚本 另外 是否有一个开箱即用的 GUI 工具可以让我做到这一点 您是指扩展 AD 架构时交换添加的 CustomField 属性吗 如果是这样 那么你可以使用ADSIEdit http technet microsof
  • Apache Shiro EhCache初始化异常:同一VM中已存在另一个未命名的CacheManager

    我正在尝试将 EhCache 配置为处理启用 Apache Shiro 的 Web 服务中的授权缓存 目前我收到以下异常 org apache shiro cache CacheException net sf ehcache CacheE
  • 使用 UnboundId api 查看 LDAP 中修改的条目

    这是我想要查看 LDAP 中已在 LDAP 服务器端修改的修改条目的要求 Unboundid API 中是否有任何 API 或代码 以便我可以查看 LDAP 中修改的条目 尽管您的问题不太清楚 但我认为您是在问是否有一种方法可以检测目录服务
  • 如何使用 Java 连接到 Active Directory

    我使用的是Weblogic Ejb3 0 爪哇1 6 我需要通过 Java 代码访问 Active Directory 我读到了几种方法 Kerberos LDAP 有人可以建议我以舒适的方式这样做吗 我在哪里可以有一些完整的代码示例 谢谢
  • Spring Security 与 Struts 的集成

    我正在尝试在一个简单的应用程序中将 spring security 与 struts1 2 使用 LDAP 集成 我有 applicationContext security xml
  • PHP LDAP:如何搜索用户是否在组中?

    如何使用 php ldap 模块检查用户是否属于某个组 我对 ldap 完全陌生 因此有点困惑 通过谷歌搜索 到目前为止我已经想出了这个 ds ldap connect ldapHost ldapPort if ds r ldap bind
  • 使用证书和自定义 ssl 套接字工厂到 ldap 的 SSL 连接

    这是我的场景 我想使用 jndi 连接到 ldap 我使用自定义 SSLSOcketfactory 来读取信任库和密钥库 上下文创建成功 但是当我尝试使用相同的凭据进行身份验证时 它会抛出一个错误 告知不支持该身份验证方法 这是我的自定义
  • python - Flask_simpleldap 不会绑定

    我在用着烧瓶 simpledap https github com admiralobvious flask simpleldap并且正在努力获得绑定连接来执行任何有用的操作 我的 LDAP 服务器是活动目录 精简后的代码如下所示 几乎与这
  • 为什么我没有这个类,而它应该在 rt.jar 中?

    所以 我正在尝试在 java 中实现 LDAP 连接 这需要com sun jndi ldap LdapCtxFactory 贾芬德表明LdapCtxFactory应包含在rt jar 据我了解 这是java SDK的基础 Eclipse
  • JAVA - 带有特殊字符的 LDAP 密码不起作用

    我试图在我的系统上创建一个登录屏幕 在 Active Directory 中进行查询 但是当用户的密码包含一些特殊字符 如 和 时 它不会验证 我需要加密密码才能工作吗 我该怎么做 我使用 getPassword 通过 JPasswordF
  • 如何在生产中安全地更改会话 cookie 域或名称?

    我们最近意识到我们的会话 cookie 正在被写入我们网站的完全限定域名 www myapp com 例如 MYAPPCOOKIE 79D5DB83 domain www myapp com 我们希望将其切换为可以跨子域共享的cookie
  • Adobe AIR 应用程序能否实现针对 Active Directory 的 SSO 身份验证?

    我对 AIR 应用程序了解不多 但我喜欢目前所看到的内容 所以现在 我想知道这种类型的应用程序在工作中的内联网中是否有意义 在投入时间和精力加强 AIR 开发之前 我想知道 Windows 上的 AIR 应用程序是否可以针对 Active
  • Docker 容器中的 LDAP 身份验证

    默认情况下 当Docker容器启动时 里面的用户是sudo I want 默认情况下将 sudo 用户锁定在容器中 在容器中使用 LDAP 身份验证而不是默认身份验证 当用户与映像一起提供时 或者在容器运行时由 sudo 用户创建 为此 我

随机推荐

  • jQuery Mobile 导航还是更改页面?

    随着 jQuery Mobile 1 3 的到来 navigate 已添加功能 我听说这是更改页面的推荐方法 而且它们似乎解决了页面之间传输数据的问题 问题是 既然它已经被简化了 我如何访问其他选项changePage提供 我真的很想使用的
  • mongodb 归档格式是什么?

    我已经使用它们的存档选项备份了一些 mongoDB 但我不能简单地解压它们 当我执行一些步骤来解压缩数据时 存档看起来像是一个大文件中的整个数据库 我想获取各个收藏的文件 有没有办法做到这一点 tar xvf valk archive ta
  • 如何将网址中的双斜杠/多斜杠替换为单斜杠

    我有一个像这样的网址 http 127 0 0 1 7000 test test index html 预期输出 http 127 0 0 1 7000 test test index html 我使用这个正则表达式 http 2 输出是
  • 我的 Rails Javascript 清单文件既不编译也不包含任何所需的文件

    我看过一些与此类似的帖子 但没有解决方案 所以我想我会提出一个更有记录的问题 我的问题清单文件中的 JS 不包含或编译任何 JS 当在本地运行我的服务器并打开 JS 文件时 我看不到任何编译内容 只有标准的 application js 清
  • 在 Objective-C 中,在每个类中导入相同的头文件会使编译时间更长吗?

    我是 Objective C iOS 编程的初学者 我想制作一个头文件 其中包含我在项目中使用的所有类头 并在每个类头文件中导入头文件 就像这个问题 在同一个头文件中包含多个类 但这种方法会增加编译时间吗 或者还有什么其他的缺点吗 请告诉我
  • func_num_args、func_get_arg 和 func_get_args 从 php 5.2 到 5.3 的行为差异

    我看过PHP手册 但我不明白 PHP 早期版本和更高版本之间的行为差 异 我不明白这个说法 由于该函数依赖于当前作用域来确定参数详细信息 因此在 5 3 0 之前的版本中不能将其用作函数参数 如果必须传递该值 则应将结果分配给一个变量 然后
  • Python/Tkinter:ModuleNotFoundError:没有名为“_tkinter”的模块

    这是我在 StackOverflow 上发表的第一篇文章 我会尽力使其尽可能正确和完整 如果您有任何改进我的文章的建议 我会很乐意接受 我在运行使用 Tkinter 的 Python 编写的代码时遇到问题 我将尝试详细描述我的操作 以便于识
  • 将 HTML 转义字符解码回 C# 中的正常字符串

    我的问题很简单 我在网上搜索了一下 但找不到一种快速方法来对字符串中的 HTML 文本进行转义 例如 lt gt amp 应以字符串形式返回 有没有一种快速的方法 或者我必须编写自己的 unescaper use System Web Ht
  • 在Android应用程序中获取用户的位置权限[重复]

    这个问题在这里已经有答案了 I m trying to get the users actual location with the typicaly permissions box like this 如果有人知道如何制作 请回答 在运行
  • 无法更新 UITableViewCell 中 UI 对象的框架

    我有一个子类 UITableViewCell 我需要动态更改 UILabel 的框架 这是我所做的 UITableViewCell tableView UITableView tableView cellForRowAtIndexPath
  • XSLT 转换子目录中的多个文件

    我创建了一个可以转换单个 XML 文件的 XSLT 文件 但是 我有数百个包含多个 xml 文件的目录 XSLT 有没有办法转换所有这些文件 我正在使用集合功能来获取所有文件的列表 但是 现在不确定如何应用转换 这是我的示例 XSLT 文件
  • 即使 WooCommerce 中的购物车为空,也可通过 URL 中的 GET 方法应用优惠券折扣

    我有一个插件 可以将倡导者推荐优惠券代码发送到他们输入的电子邮件中 当观众收到这封电子邮件时 我想创建一个流程 他们可以在其中单击电子邮件中的 立即购买 优惠券将自动添加 截至目前 对于 立即购买 按钮下的链接 我已输入以下内容 websi
  • jqGrid (v4.1.2) 树形网格的排序不适用于邻接模型

    我一直在使用 jqGrid 有一些有用的问题 and answers关于邻接模型 除了排序之外 我已经连接并工作了所需的一切 该问题实际上已在上面的答案链接中复制 谁能看到什么需要修复吗 奥列格似乎是这方面的专家 我已经尝试过这个选项que
  • 如何抑制已读回执?

    我正在使用 WebDav 以编程方式 阅读 电子邮件 当我处理完这些电子邮件后 我也会删除这些电子邮件 但是 这引起了一个有趣的问题 每次我删除电子邮件时 原始发件人都会收到未读回复 我已登录 Outlook Web App 并选中该选项不
  • MSBuild:如何创建并使用任务在构建时转换内容项?

    我有一个 Silverlight 3 项目 内容如下
  • 从 Eclipse 导出的 JAR 中排除 JUnit

    我正在使用 Eclipse JUnit 集成 它将 JUnit 库自动包含到我的项目中 问题是当我使用导出项目时可运行的 JAR 文件目的地 它包括 JUnit 有没有办法从导出的 JAR 中排除 JUnit 最好是测试 如果您通过右键单击
  • 为具有凭据支持的 tomcat 应用程序启用 CORS

    我的服务器上有一个从 IIS 运行的简单 GWT 应用程序 我正在尝试测试对同一服务器上运行的 tomcat 的 HTTP 请求 但是 由于两个应用程序服务器都在不同的端口上运行 因此我的浏览器 chrome 和 firefox 将请求视为
  • IntelliJ IDEA Community Edition 14.0 Windows 8.1 中的丑陋字体

    I use macType除了 Intellij 之外 它可以在其他地方呈现精美的字体 我尝试通过这些 Java 选项配置 Intellij Dawt useSystemAAFontSettings On Dswing aatext Tru
  • 我可以在 GoDaddy 上使用 NHibernate 吗?

    来自的评论 Net 托管 灵活媒介信任 says Godaddy 是中等信任度 这意味着你不能使用 IL 发出的东西 Nhibernate 需要它来进行代理 这是真的吗 有人在 GoDaddy 上使用 NHibernate 吗 我已经在中等
  • Shiro JndiLdapRealm 针对 LDAP 的授权

    The Shiro 类 JndiLdapRealm 的 JavaDoc明确表示默认情况下禁用授权 并且用户应通过子类化和覆盖 LDAP 服务器来实现授权JndiLdapRealm doGetAuthorizationInfo方法 是否有示例