0

摘要:我正在尝试在 Java 中访问项目属性(例如版本),并且我读过的所有地方都说我需要在我的 build.gradle 文件中扩展属性。这一切都很好,很花哨,但我正在使用 LDAP 并在我的属性文件中对其进行配置。每当我尝试扩展属性时,都会收到 LDAP 错误 49 52e (Invalid Credentials),因此似乎 Gradle 处理属性所做的任何事情都会扭曲 LDAP 属性,因此它们不再可用。

项目信息: 我在下面概述了我认为适用的项目信息。如果需要确定问题的更多详细信息,请发表评论,我会添加它们。

  • 语:
    • 时髦的 2.4
    • 爪哇 8
  • 框架:
    • Spring Boot 版本:1.3.1.RELEASE with starter POM
      • 包括spring-boot-starter-security
      • 包括弹簧安全LDAP
  • 构建工具:Gradle
    • 2.3 版
    • Spring Boot Gradle 插件 1.3.1.RELEASE
    • 应用插件:
      • 时髦的
      • 弹簧靴

构建信息:我在 build.gradle 文件中尝试了一些不同的配置来访问版本,但是当我添加“processResources”块时,我在运行应用程序时无法再访问 LDAP。应用程序在没有“processResources”块的情况下运行和验证就很好,但是一旦我添加它,它就会运行,但由于 LDAP 抱怨凭据无效,我无法访问任何内容。我尝试了 3 种不同的扩展配置,并且都以这种方式运行。

构建配置尝试 1:

processResources {
    expand(project.properties)
}

构建配置尝试 2:

processResources {
    filesMatching('**/*.properties') { expand(project.properties) }
}

此时我突然想到我正在属性文件中配置我的 LDAP 登录,所以解决方案可能是完全避免使用属性文件。我发现你可以只扩展你需要的属性,所以我尝试了以下方法。

构建配置尝试 3:

processResources {
    expand projectVersion: project.version
}

如前所述,上述所有尝试都失败了,我仍然得到每个尝试的 LDAP 身份验证错误。没有“procesResources”块的 build.gradle 文件似乎是让 LDAP 满意的唯一方法。

属性信息:如前所述,我在属性文件中配置了 LDAP 信息。以下是相关属性。

应用程序属性

spring.profiles.active=localdev
ldap.securitygroup=DEV
logout.path=
host.securePort=

如您所见,我使用的是 localdev 配置文件,因此我在下面包含了适用的属性。由于它包含敏感信息,我只指定了属性名称而不是它们的值。我使用星号 (*) 表示提供了一个非空值。(在上面的 application.properties 文件中,列出的几个属性的值确实为空):

应用程序-localdev.properties

host.securePort=*
ldap.username=*
ldap.password=*
ldap.base=DC=*,DC=*,DC=*
ldap.roleSearchBase=OU=*,DC=*,DC=*,DC=*
ldap.defaultUrl=ldap://*
ldap.urls=ldap://* ldap://*

属性根本没有改变,它只是在没有 build.gradle 文件中的 processResources 块的情况下工作,然后当我添加这 3 个版本中的任何一个时都没有。

任何有助于解决此问题的帮助将不胜感激,如果需要任何进一步的信息,请告诉我,我会更新此信息。

4

1 回答 1

0

所以一位同事给了我一个很好的提示,说我可以检查 JAR 文件中的属性,看看是否有与最初指定的不同。

长话短说,当我在 build.gradle 文件中没有 processResources 块时,属性不会改变,一切都很好。但是,当添加 processResources 时,ESCAPE CHARACTERS 被删除,导致用户名发生变化,因为我有一个转义字符。

我现在使用的解决方法是加倍转义字符,这对我来说似乎是一种黑客攻击,所以如果有更好的配置方法,请回复!

于 2016-01-25T21:17:07.053 回答