feign上使用摘要认证

这两天碰到一个需求,需要访问公司另一个服务的远程接口,日常也开始接触学习springcloud,想到了feign,比直接用httpclient要方便许多。但是一上手发现对方在请求时需要进行摘要认证,而feign找了半天只有简单的Basic认证。这两种认证的原理和区别就不说了。最终我找了些资料解决了这个问题,直接上代码吧。
首先引入依赖,注意这里得引入一个feign-httpclient,保证有一个ApacheHttpClient实现

@Bean
    public CloseableHttpClient feignClient() throws Exception {
        TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true;
        SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy).build();
        SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext);
        CredentialsProvider provider = new BasicCredentialsProvider();
        // 添加摘要认证的信息包括主机、端口、realm和用户名密码等
        provider.setCredentials(new AuthScope("127.0.0.1",8080,"realm",AuthScope.ANY_SCHEME),
                new UsernamePasswordCredentials("username", "password"));
        return HttpClientBuilder.create().setDefaultCredentialsProvider(provider)
                .setSSLSocketFactory(csf)
                .useSystemProperties().build();
    }

这样,我们在用feign实现远程调用时就可以使用摘要认证。基本思路就是用HttpClient代替feign默认的Client(除了Httpclient还有OkHttp),同时使用它的摘要认证实现方式即可。
其中AuthScope表示由主机名,端口号,领域名称和认证方案名称组成的认证范围。主要有ANY,ANY_HOST,ANY_PORT,ANY_REALM,ANY_SCHEME和自定义,其中认证方案名称有Basic,Digest和NTLM,代码中选了ANY_SCHEME表示主机可能支持的任何一种认证方案。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值