【问题标题】:Client side authentication with jax-rs and cxf使用 jax-rs 和 cxf 进行客户端身份验证
【发布时间】:2014-08-06 07:52:55
【问题描述】:

我们将把 JAX-RS 实现从 Jersey 切换到 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 做到这一点?

【问题讨论】:

    标签: java jersey cxf jax-rs


    【解决方案1】:

    创建一个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,则可以使用来自 Google GuavaBaseEncoding

    【讨论】:

      【解决方案2】:

      我为此在 CXF Jira 中打开了一个改进:https://issues.apache.org/jira/browse/CXF-6817

      【讨论】:

      • 你在那里,距离能够发布 cmets 仅 4 个代表......这应该是,因为它不是一个答案。只需几个建议的编辑,您就可以回家了!
      猜你喜欢
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 2015-01-03
      • 2012-01-10
      相关资源
      最近更新 更多