我们将把Jersey的JAX-RS实现切换到Apache CXF 3.0。我只是无法弄清楚如何通过Apache CXF方式完成基本身份验证。我在CXF WebClient
周围找到的所有示例,而不是JAX-RS客户端API。
这与泽西岛有关:
Client client = ClientBuilder.newClient();
client.register(HttpAuthenticationFeature.basic(config.getUsername(),config.getPassword()));
如何使用Apache CXF完成此操作?
答案 0 :(得分:0)
创建ClientRequestFilter
以执行基本身份验证:
@Provider
public class Authenticator implements ClientRequestFilter {
private String user;
private String password;
public Authenticator(String user, String password) {
this.user = user;
this.password = password;
}
@Override
public void filter(ClientRequestContext requestContext) throws IOException {
requestContext.getHeaders().add(
HttpHeaders.AUTHORIZATION, getBasicAuthentication());
}
private String getBasicAuthentication() {
String userAndPassword = this.user + ":" + this.password;
byte[] userAndPasswordBytes = userAndPassword.getBytes("UTF-8");
return "Basic " + Base64.getEncoder().encodeToString(userAndPasswordBytes);
}
}
并在Client
:
Client client = ClientBuilder.newClient().register(new Authenticator(user, password));
上述解决方案使用Java 8 Base64.Encoder
执行Base64编码
如果由于某种原因您未使用Java 8,则可以使用BaseEncoding
中的Google Guava。
答案 1 :(得分:0)
我已经为此开启了CXF Jira的改进:https://issues.apache.org/jira/browse/CXF-6817