【问题标题】:Authenticated HEAD call from Maven to Artifactory从 Maven 到 Artifactory 的经过身份验证的 HEAD 调用
【发布时间】:2015-05-03 22:34:16
【问题描述】:

我最近在我的 Artifactory 实例上激活了安全性,这导致了几个问题。留下一个,看起来有点奇怪:

Maven 使用 HTTP HEAD 来检查是否已经部署了新的 SNAPSHOT。 但是,启用安全性后,第一次调用是在没有身份验证标头的情况下完成的,从而导致来自 Artifactory 的 401 响应。

Maven 然后应该使用身份验证标头执行相同的调用。 ma​​ven-metadata.xml 文件就是这种情况。

但对于 .pom 和 .jar 文件,请求不会被重新尝试,如下面的日志所示:

20150303104244|3|REQUEST|xxx.xxx.xxx.xxx|non_authenticated_user|GET|/libs-snapshot-local/mycompany/common/common-config/1.0.4-SNAPSHOT/maven-metadata.xml|HTTP/1.1|401|0
20150303104244|12|REQUEST|xxx.xxx.xxx.xxx|user|GET|/libs-snapshot-local/mycompany/common/common-config/1.0.4-SNAPSHOT/maven-metadata.xml|HTTP/1.1|200|322
20150303104244|40|REQUEST|xxx.xxx.xxx.xxx|user|GET|/libs-snapshot-local/mycompany/common/common-config/1.0.4-SNAPSHOT/maven-metadata.xml.sha1|HTTP/1.1|200|40
20150303104244|4|REQUEST|xxx.xxx.xxx.xxx|user|GET|/libs-snapshot-local/mycompany/common/common-config/1.0.4-SNAPSHOT/maven-metadata.xml.md5|HTTP/1.1|200|32
20150303104245|2|REQUEST|xxx.xxx.xxx.xxx|non_authenticated_user|HEAD|/libs-snapshot-local/mycompany/myproject/myproject-interface/2.0.0-SNAPSHOT/myproject-interface-2.0.0-SNAPSHOT.jar|HTTP/1.1|401|0
20150303104245|2|REQUEST|xxx.xxx.xxx.xxx|non_authenticated_user|HEAD|/libs-snapshot-local/mycompany/myproject/myproject-interface/2.0.0-SNAPSHOT/myproject-interface-2.0.0-SNAPSHOT.jar|HTTP/1.1|401|0

如上所述,使用用户凭据重新尝试下载 maven-metadata.xml 文件,但 myproject-interface-2.0.0-SNAPSHOT.jar 没有。

我尝试为该服务器启用抢先身份验证,但我找不到 Maven 行为的任何变化:

    <server>
        <id>snapshot</id>
        <username>user</username>
        <password>xxx</password>
        <configuration>
            <httpConfiguration>
                <all>
                    <usePreemptive>true</usePreemptive>
                    <params>
                        <property>
                            <name>http.authentication.preemptive</name>
                            <value>%b,true</value>
                        </property>
                    </params>
                </all>
            </httpConfiguration>
        </configuration>
    </server>

这仅涉及现有 SNAPSHOT 的更新,因为下载新工件是使用包含身份验证标头的 HTTP GET 完成的(至少需要重试)。这仍然会妨碍正确使用 SNAPSHOT 工件。

我正在使用 Maven 3.2.1 和 Artifactory 3.4.2。

【问题讨论】:

    标签: maven authentication artifactory maven-metadata


    【解决方案1】:

    对于其他希望在默认情况下启用抢先式身份验证的人:

    The documentation 在 Maven 主站点上的这个设置是错误的。我花了一段时间追踪它,但最终在open bug ticket 上找到了答案,我在下面复制了它。这适用于 OS X 上的 Maven 3.1.1。

    <servers>
     <server>
      <id>serverid</id>
      <username>myuser</username>
      <password>mypassword</password>
      <configuration>
       <wagonProvider>httpclient</wagonProvider>
       <httpConfiguration>
        <all>
         <usePreemptive>true</usePreemptive>
        </all>
       </httpConfiguration>
      </configuration>
     </server>
    </servers>
    

    【讨论】:

      【解决方案2】:

      这与 Artifactory 快照存储库中“Maven 快照版本行为”选项的使用有关。

      正如here 解释的那样,Maven 3 不再支持此选项。

      Maven 3 仅支持唯一快照

      Maven 3 已放弃对 解析和部署非唯一快照。因此,如果您有一个 使用非唯一快照的快照存储库,我们建议 您将 Maven 快照策略更改为“唯一”并删除任何 以前从该存储库部署的快照。独一无二的 Maven 客户端在部署时生成的快照名称无济于事 识别快照所在的源代码控制更改 已建成,与检出时间源无关。 因此,我们建议工件本身应嵌入 修订/标签(作为其名称的一部分或内部)清晰可见 修订跟踪。 Artifactory 允许您使用 修订号作为其构建集成支持的一部分。

      切换到 Unique 解决了这个问题。

      【讨论】:

        猜你喜欢
        • 2016-01-17
        • 1970-01-01
        • 2019-09-25
        • 1970-01-01
        • 2021-11-18
        • 2017-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多