【问题标题】:Grails 3 and LDAP AuthenticationGrails 3 和 LDAP 身份验证
【发布时间】:2016-03-04 16:47:25
【问题描述】:

我正在尝试将 ldap 身份验证与 grails 3 集成。基本上,这是我要做的:

当调用特定路径时,我想确保用户是目录中正确“组”的一部分。

为了解决这个问题,我所做的是配置 tomcat 的 server.xml 文件,以启用 jndi 领域。

<Realm className="org.apache.catalina.realm.JNDIRealm" debug="99"
    connectionName="cn=angryIp,ou=People,o=cools,dc=mains,dc=com"
    connectionPassword="angryIp"
    connectionURL="ldap://localhost:10389"
    userPattern="cn={0},ou=People,o=cools,dc=mains,dc=com"
    roleBase="ou=Groups,o=cools,dc=mains,dc=com"
    roleName="cn"
    roleSearch="uniqueMember={1}"
/>

我有一个配置版本的 apache directory studio 正在运行,我能够查询并返回结果。 (换句话说,到目前为止,上面的配置是正确的)

为了更进一步,我需要在 web.xml 文件中添加安全约束。但是,grails 3 不再支持使用 web.xml。 (我什至创建了一个 web.xml 文件,该文件被放置在 src/main/webapp/WEB-INF 目录中,作为以前版本的一些推荐,但是应用程序随后变得不可部署)这给我带来了一个问题,因为所有教程假设我们可以创建该文件。

我还查看了在 application.yml 文件中使用 ldap 的 grails 3 文档,但我在这里遇到的问题是需要连接参数。例如:ldap ip 字符串、用户名、密码等。虽然我知道本地环境的这些数据,但 war 文件将部署到许多客户端,我不知道他们的 IP。

所以我遇到的问题/问题是:

a) 由于 grails 3 没有 web.xml 文件,我如何以编程方式配置相同的属性?尽管这对服务器管理员来说很可怕,而且真的给我带来的好处很少。

b) 对于 application.yml 中的 ldap 配置,是否有替代静态类型 IP 的替代方案?

【问题讨论】:

  • 您是否尝试过使用 Spring Security Core Plugin for Grails 和 LDAP Plugin?
  • 从我到目前为止看到的文档中,这两个都需要提前知道connectionUrl。我不会知道的。我希望将 ldap 与 jndi 一起使用,以便客户轻松更改它

标签: spring tomcat grails


【解决方案1】:

Grails 和大多数 Grails 插件的配置都可以外部化。如果你将application.groovy文件或application.yml文件外化,你可以在不同的系统上轻松自定义配置。

在 Grails 3 上有很多示例。其中一个在这里:http://grails.1312388.n4.nabble.com/Grails-3-External-config-td4658823.html

我们使用这种方法对我们的应用程序进行自定义 - 电子邮件、ldap 和其他选项很容易。您也可以使用命令行参数或系统环境,但外部配置更加灵活

【讨论】:

  • 感谢您的反馈,但我不明白这是如何适用的。首先,一些外部化文件需要调用 Applications.groovy 主方法。我相信这是针对嵌入式 tomcat 的,它肯定不是我们的生产环境。接下来,从我读过的文档中,当您发出命令时:dev war,无论您使用什么文件来支持配置,它都会将这些属性插入到战争中。显然,我不希望那样。我需要一种动态的方法,这是 jndi 提供的。您能否详细说明或提供有关您的方法如何解决问题的代码?
  • 如果您使用 Spring Security LDAP,您可以在外部配置中设置 grails.plugin.springsecurity.ldap.context.server 选项,每个环境都不同。此选项用于指定服务器的主机/IP。还有许多其他带有前缀grails.plugin.springsecurity.ldap.context 的选项可以设置所有其他内容。我不明白你在这里嵌入的tomcat是什么意思。外部配置不在战争中,它位于您安装了应用程序的服务器的文件系统中
  • 我想你是在引用这个:stackoverflow.com/questions/13561127/…,然后在其中添加 grails.plugin.springsecurity.ldap.context.server。我只是不确定这对 imo 有什么好处。虽然是的,但我可以将文件外部化,但现在我不得不处理它的维护问题......如果 web.xml 文件在那里,那会好得多,因为这样我就可以在我的部署目录中轻松导航到它(tomcat 中的 webapps),并进行必要的更改
  • 除非我得到一些解决方案来使 web.xl 文件正常工作,否则我想我只能采用该解决方案。可能实现 EnvironmentAware 和 setEnv 方法,然后从那里开始。 /叹息
  • Grails 3 基于 Spring Boot,因此您应该能够以此处 docs.spring.io/spring-boot/docs/current/reference/html/… 中描述的方式使用 web.xml。但我真的不推荐你想做的事情。使用 web.xml,您必须按照您的描述来管理它。更重要的是,您必须在每次部署时修改 web.xml,因为它将被覆盖。如果您不想有外部配置文件,您可以使用系统环境或application.groovy 中的命令行参数来设置 LDAP 服务器连接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-12
  • 1970-01-01
  • 1970-01-01
  • 2012-02-18
  • 1970-01-01
相关资源
最近更新 更多