如何在 Grails 上使用 LDAP 插件?

2024-01-30

我正在开始一个关于 Groovy 和 Grails 的新项目。我现在正在处理身份验证部分,因为我们有一个 LDAP 服务器,所以我想使用 LDAP 进行身份验证。我开始设置我的环境,我正在使用 SpringSource Tool Suite 和Grails 1.3.5。当我开始使用身份验证部分时,我安装了两个插件:

  • springSecurityCore - 1.0.1
  • springSecurityLdap - 1.0.1

我还为 LDAP 插件运行了“s2 faststart”命令。

一切看起来都很棒,我可以使用 LoginController 和 LogoutController,我能够保护网页,以便只有在登录时才能看到它。我通过在 BootStrap.groovy 中创建一个用户来做到这一点

我还在 Config.groovy 中使用 LDAP 服务器的相应值配置了所有 LDAP 和 Spring Security Core 参数:

   grails.plugins.springsecurity.ldap.context.managerDn
   grails.plugins.springsecurity.ldap.context.managerPassword
   grails.plugins.springsecurity.ldap.context.server
   grails.plugins.springsecurity.ldap.authorities.groupSearchBase
   grails.plugins.springsecurity.ldap.search.base
   grails.plugins.springsecurity.userLookup.userDomainClassName
   grails.plugins.springsecurity.userLookup.authorityJoinClassName
   grails.plugins.springsecurity.authority.className

但是,我不知道如何测试 LDAP 服务器是否已完成身份验证。我确信这不是通过 LDAP 完成的,因为当我在应用程序运行时进入登录框并尝试使用我通常用于 LDAP 服务器的用户名和密码进行身份验证时,它说找不到该用户名和密码用户。如果我尝试使用在 BootStrap.groovy 上创建的用户进行身份验证,我可以登录,但我猜该用户仅在本地创建,并且是暂时的。

  1. 如何将身份验证提供程序设置为 LDAP 服务器?
  2. 运行“s2 快速启动”后安装安全核心和 ldap 插件后我还需要做什么?

Groovy 和 Grails 的东西在后台做了很多事情,以至于一开始很难理解在哪里配置所有东西。

在此先感谢您的帮助

EDIT:我一直在寻找有关如何使用这些插件的信息,但没有找到任何有据可查的信息,我找到了有关 Acegi 的信息,但不再支持该插件,这就是我在这里询问的原因

EDIT:阅读本文(我将看看是否可以使用 LDAP):http://blog.springsource.com/2010/08/11/simplified-spring-security-with-grails/ http://blog.springsource.com/2010/08/11/simplified-spring-security-with-grails/


1.如何将身份验证提供程序设置为LDAP服务器?

我相当确定这是激活 LDAP 身份验证的 Config.groovy 条目。

grails.plugins.springsecurity.providerNames = ['ldapAuthProvider',
'anonymousAuthenticationProvider',
'rememberMeAuthenticationProvider']

2.运行“s2快速启动”后安装安全核心和ldap插件后我还需要做什么?

我发现这个讨论非常有帮助:自定义用户详细信息服务 http://grails.1312388.n4.nabble.com/LDAP-and-CustomUserDetailsService-td2967149.html。结果是 UserDetailsContextMapper 扩展中的这个方法:

UserDetails mapUserFromContext(org.springframework.ldap.core.DirContextOperations ctx,
    java.lang.String username,
    java.util.Collection<GrantedAuthority> authority) {

    User.withTransaction { status ->

        def user = getUser(ctx)  // Creates and saves a MyUser domain class instance


        def userDetails = new MyUserDetails(
                    username,
                    authority ?: NO_ROLES,
                    user.id, 
                    user.name,
                    user.mail)

        userDetails.fullname = user.name
        userDetails.email = user.mail

        return userDetails

    }

}

我认为这个 resources.groovy 条目是必要的:

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

如何在 Grails 上使用 LDAP 插件? 的相关文章

随机推荐

  • 为什么 ListView 项目不会增长以包裹其内容?

    我有一个相当复杂的 ListView 具有可变的列表项高度 在某些情况下 我需要在列表项中显示一个附加视图 该视图默认是隐藏的 View GONE 通过启用它 View VISIBLE 列表项的高度会增加 或者至少应该如此 问题 即使我将项
  • 如何将文件夹结构复制到另一个目录下?

    我有一些与复制文件夹结构相关的问题 事实上 我需要将pdf文件转换为文本文件 因此 我导入 pdf 的位置有这样的文件夹结构 D f subfolder1 subfolder2 a pdf 我想在 下创建确切的文件夹结构D g subfol
  • 在 Hibernate 中运行时急切加载整个对象图

    在说出 指定查询中的获取类型 之类的内容之前 请先阅读以下内容 那不是我所追求的 我正在寻找一种方法来急切加载完整的对象图 对象 它的所有子对象以及它们的所有子对象等等 I do not想要枚举要加载的所有属性 直到运行时我才认识它们 N
  • Linux中如何保护进程间共享的内存

    在 Linux 或其他现代操作系统中 每个进程的内存都受到保护 因此一个进程中的疯狂写入不会导致任何其他进程崩溃 现在假设我们在进程 A 和进程 B 之间共享内存 现在假设 由于软错误 进程 A 无意中向该内存区域写入了一些内容 鉴于进程
  • 如何在 React 中呈现未定义状态的数据?

    我正在 componentDidMount 内获取数据 但在初始渲染期间我未定义 然后再次渲染发生 并且在此期间状态变量被填充 现在 当它不是未定义的并且在填充之后 我想对其进行解构并在我的组件内显示数据 注意 getProjectDeta
  • C++ 中的变量作用域?

    在 C 中 main 中声明的任何变量都可以在整个 main 中使用 对吗 我的意思是 如果变量是在 try 循环中声明的 它们仍然可以在整个 main 中访问吗 因为我在 main 的 try 循环中声明了几个变量 但是如果我在 try
  • 如何获取字典中键的ReadOnlyCollection

    我的课程包含一个Dictionary
  • python time.strftime %z 始终为零而不是时区偏移

    gt gt gt import time gt gt gt t 1440935442 gt gt gt time strftime Y m d H M S z time gmtime t 2015 08 30 11 50 42 0000 g
  • 按实体名称和上次修改日期搜索

    我在 RavenDb 中存储了许多命令 它们都实现了 ICommand 我希望能够搜索上次修改的元数据和 Raven Entity Name 我目前正在对每个命令进行多重映射 如下所示 public class CommandAuditSe
  • 将 PHP 日期范围转换为 MYSQL 单个日期

    我有一个可用性日历 其中我当前正在逐个添加日期 并使用 mysql 查询来确定是否存在具有特定日期的行 并将当天的类别更改为 已预订 红色 我想在我的表单中输入一个范围 并通过 php 或 mysql 将其处理为多个单独的日期 我的日期格式
  • 使用 TensorFlow Dataset API 和 flat_map 的并行线程

    我正在将 TensorFlow 代码从旧的队列接口更改为新的数据集API https www tensorflow org api docs python tf data Dataset 使用旧界面我可以指定num threads论证tf
  • Powershell 检查本地管理员凭据

    我正在尝试运行一个需要管理员输入才能处理某些事情的脚本 我不想让脚本运行失败 而是尝试捕获错误并将其扔回到凭据中 但我找不到可以将本地管理凭据传递给陷阱的命令 有人有什么可能有用的东西吗 我发现很多都会检查域凭据 但这是一个本地管理员帐户
  • Java Swing:显示 JPopupMenu 后插入符侦听器停止触发

    我正在制作一个文本编辑器应用程序 并且遇到了一个问题 在显示 JPopupMenu 后键入或粘贴文本时 我的 CaretListener 不会被触发 我已将 CaretListener 添加到 JTextArea textArea addC
  • 如何为 Next.js API 请求进行 HTTP 代理

    我在网上尝试了很多方法 但到目前为止没有任何效果 第一次尝试 src pages api proxy slug js import createProxyMiddleware from http proxy middleware Creat
  • CommonServiceLocator 的评论中的“环境”一词的含义是什么?

    我想猜测 环境容器 与它是静态类这一事实有关 但这只是一个猜测 或者这是指标准模式 也就是说 我真的需要从头到尾读完 GoF 的书 namespace Microsoft Practices ServiceLocation
  • 为什么 cmpsb 似乎不比较寄存器的值?

    我正在尝试以 16 位实模式编写 DOS 克隆 尽管一旦我完成了当前问题 我可能只会学习 32 位汇编 我的问题过去一直受到负面回应 但这是最后一次 恐怕我确实需要咨询这个网站 改进我之前的问题 我付出了更多努力来了解有关汇编代码中的指针和
  • 如何使用 ffmpeg 降低多个 JPEG 图像文件的质量?

    我想降低当时一堆图像的质量 和 q v x其中 x 是 1 到 30 之间的数字 数字越大 质量越差 即使使用 我也能节省很多空间x 1 现在 当涉及到处理多个文件时 我陷入了困境 我尝试过这两个批处理文件 mkdir processed
  • 获取 Facebook 公共页面评级和评论

    我不是某些页面的所有者 但我想访问页面评论和评级 每次访问时我都会得到空数据集 gt http https graph facebook com 102227700571 tabs reviews access token fb oauth
  • 在 PowerPoint 中从编辑模式下的按钮调用宏

    我正在尝试编写一个可以在 PowerPoint 2007 2010 的编辑模式下调用的 vba 宏 我可以轻松地将命令按钮添加到演示文稿中 但是 只能在幻灯片模式下单击此按钮来触发 vba 宏 但是 我想做的是让此按钮在编辑模式下触发关联的
  • 如何在 Grails 上使用 LDAP 插件?

    我正在开始一个关于 Groovy 和 Grails 的新项目 我现在正在处理身份验证部分 因为我们有一个 LDAP 服务器 所以我想使用 LDAP 进行身份验证 我开始设置我的环境 我正在使用 SpringSource Tool Suite