使用jax-rs和cxf进行客户端身份验证

时间:2014-08-06 07:52:55

标签: java jersey cxf jax-rs

我们将把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完成此操作?

2 个答案:

答案 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