feign动态设置数据源(https请求)

1、背景

在使用

springboot-feign/spingcloud-feign时,需要在启动springboot的时候,注入的方式将feigncofing配置好,也就是说项目启动以后只能有一个数据源,且不能修改,在网上找了很多资料没有找到解决方案(网上应该有,只是我没有找到),后面只能是硬着头皮看源码,问题解决 2、代码

其实在这里用的原生的feign,并不是springboot/springcloud封装的feign,废话不说,上代码

public final class HttpsUtil { public static <T> T getRemote(Class<T> apiType, String url, String apiCert, String certPassWord) { // apiCert 是p12文件读了以后的数据,可以把p12文件放在本地,我这里是伪代码了 feign.Client.Default client = FeignClient(apiCert, certPassWord); Decoder decoder = (response, type) -> { final String result = IOUtils.toString(response.body().asInputStream(), StandardCharsets.UTF_8); if (String.class.getName() == type.getTypeName()) { return result; } try { return JSON.parseObject(result, type); } catch (Exception e) { log.error(“json parse exception”); } return result; }; ErrorDecoder errorDecoder = (methodKey, response) -> { try { final String result = IOUtils.toString(response.body().asInputStream(), StandardCharsets.UTF_8); log.info(“feign client decoder response body : {}”, result); throw new SysStatusException(response.status(), result); } catch (IOException e) { log.info(“feign client decoder response error {}”, e); } throw new BizStatusException(response.status(), BizCommMessage.ERROR_MSG); }; T remote = Feign.builder() .decoder(decoder) .errorDecoder(errorDecoder) .client(url) .target(apiType, client); return remote; } public static Client getFeignClient(String apiCert, String certPassWord) { final SSLSocketFactory sslSocketFactory = getSSLSocketFactory(apiCert, certPassWord); feign.Client.Default aDefault = new Client.Default(sslSocketFactory, new NoopHostnameVerifier()); return aDefault; } public static SSLSocketFactory getSSLSocketFactory(String apiCert, String certPassWord) { byte[] bytes = apiCert.getBytes(); try (ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes)) { KeyStore keyStore = KeyStore.getInstance(KEY_STORE_TYPE); keyStore.load(inputStream, certPassWord.toCharArray()); SSLContext sslContext = SSLContexts.custom() // 忽略掉对服务器端证书的校验,特别重要,被这行代码坑过 .loadTrustMaterial((TrustStrategy) (chain, authType) -> true) .loadKeyMaterial(keyStore, certPassWord.toCharArray()) .build(); return sslContext.getSocketFactory(); } catch (IOException e) { log.error(“=======init feign client throw IOException======={}”, e); } catch (KeyStoreException e) { log.error(“=======init feign client throw KeyStoreException======={}”, e); } catch (UnrecoverableKeyException e) { log.error(“=======init feign client throw UnrecoverableKeyException======={}”, e); } catch (CertificateException e) { log.error(“=======init feign client throw CertificateException======={}”, e); } catch (NoSuchAlgorithmException e) { log.error(“=======init feign client throw NoSuchAlgorithmException======={}”, e); } catch (KeyManagementException e) { log.error(“=======init feign client throw KeyManagementException======={}”, e); } return null; } }2.2、 编写请求方法public interface TestRemote { @Override @RequestLine(“POST /apis/{test}/query”) @Headers({“Content-Type: application/json”,“Accept: application/json”}) @Body(“{body}”) String query(@Param(“test”) String test, @Param(“body”) String body); }2.3、发送请求public static void main(String[] args) { TestRemote testRemote = HttpsUtil.getRemote(TestRemote.class,String url, String apiCert, String certPassWord); testRemote.query(“test”,“{\”id\”:1}”); }总结:

这样就可以根据前端传来的参数,切换不同的客户端

免责声明:文章内容来自互联网,本站仅作为分享,不对其真实性负责,如有侵权等情况,请与本站联系删除。
转载请注明出处:feign动态设置数据源(https请求) https://www.dachanpin.com/a/cyfx/11395.html

(0)
上一篇 2023-05-12 03:14:58
下一篇 2023-05-12 03:15:59

相关推荐

  • 为什么大厂总爱问计算机基础知识和原理?

    黑马粉丝,你听过这个段子吗? 如果你在简历中写了这句话,保证能拿到大厂面试机会:扎实的计算机基础,良好的数据结构与算法功底。 然后,你就会被问到头皮发麻。 虽然是段子,但也一定程度上说明了大厂非常注重计算机基础,也是真的喜欢问计算机基础。“为什么大厂面试官总爱问计算机基础知识和原理?”,这个问题就曾在多个平台上成为程序员的灵魂拷问。 并且大厂不仅是在校招面试…

    2023-05-12
    89
  • 每天增"创客"680人 "创业之城"成都是怎样炼成的

      之前在盛大公司工作的创业者曾贤儒,在上海、北京都曾工作过,现在在成都运营一家小型孵化器,为创业者提供融资服务和创业辅导。他说,前两年来成都,发现这里和北京、上海已经差不多了,到处都是创业咖啡馆,大家都在谈论创业、融资,感觉可以留下来做点事情,就卖掉了北京回龙观的房子,到成都创业。   以休闲和旅游著称的成都,正在全力打造自己的另一个标签:创业之城。截至目…

    创业分享 2023-05-30
    136
  • 安博中国东莞物流园带你领略工业物流全球领袖的风采

    2012年东莞市重大建设项目——安博中国东莞物流中心在石排动工。该项目由美国上市公司安博投资9000万美元兴建,规划用地371亩,首期用地200亩,建筑面积达84000平方米,将建成华南地区最大的、集世界500强企业加工配送基地以及高端消费品物流配送中心为一体的电子商务化商贸综合性物流园。 东莞市委常委、宣传部部长潘新潮出席动工仪式。他表示,安博中国投资东莞…

    创业分享 2023-05-12
    39
  • 联通一站式全屋精装店怎么样?6大加盟优势 助您成功创业

     现在市场上,家装建材行业的发展是非常好的,所以现在加盟商选择加盟建材行业也是非常不错的,其中联通一站式全屋精装就是行业中的人气品牌,产品质量高,环保又安全,在市场上是很受欢迎的,当然也是吸引了加盟商的关注。那么,开联通一站式全屋精装店怎么样?接下来就为大家详细的介绍。       近年来,家居行业整体维持10%左右的平稳增长,随着人们生…

    2023-05-18
    67
  • 细分创业服务对象 中国劳动保障新闻网

    细分创业服务对象 来源:中国劳动保障新闻网 作者:王平顺 日期:2016-05-27 [导读]创业是一项系统工程,实现大众创业、万众创新必须激发各类群体的创业活力。江西省武宁县劳动就业管理局适应各类群体在创业需求、创业能力上的不同,将服务对象进行细分,以差异化路线为各个群体提供优质的创业服务。   创业是一项系统工程,实现大众创业、万众创新必须激发各类群体的…

    创业分享 2023-05-24
    38

发表回复

登录后才能评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信