因为您提到了 CXF,所以我想您的意思是 cxf-codegen-plugin。这有点骇人听闻,但它确实有效。
可以使用 java.net.Authenticator 提供 HTTP 身份验证凭据。只需定义他自己的 Authenticator 类,它会覆盖 getPasswordAuthentication(..) 方法。然后必须将其设置为默认身份验证器。据我所知,它不能以声明方式(例如使用环境属性)仅使用 Authenticator.setDefault(..) 以编程方式完成。
为了调用 Authenticator.setDefault(..) 我会使用 CXF 扩展机制。使用类似的类创建单独的 Maven 项目:
public class AuthenticatorReplacer {
public AuthenticatorReplacer(Bus bus) {
java.net.Authenticator.setDefault(new java.net.Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("test", "test123"
.toCharArray());
}
});
}
}
和文件 src\main\resources\META-INF\cxf\bus-extensions.txt 内容:
org.example.AuthenticatorReplacer::false
然后将新创建的项目作为依赖项添加到 cxf-codegen-plugin:
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${project.version}</version>
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>cxf-authenticator-replacer</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
...
</plugin>
这样 AuthenticatorReplacer 由 CXF 扩展机制初始化,并用我们的替换默认的 Authenticator。