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
一次请求的来龙去脉 – Tomcat架构解析(二)
下一篇 2023-05-12 03:15:59

相关推荐

  • 密山创业公益讲堂开课 农民不“猫冬”学创业

    据密山市就业局董福山局长介绍,市就业局按照省厅部署,聘请高校教师和创业成功人士开展创业公益讲堂“送教上门”活动,主要目的就是按照“大众创业、万众创新”的要求,为没有创业想法的人培养意识,为已经创业的人传授方法,让创业者有更多的获得感,增强自信心和创业能力。公益讲堂以当地特色农副产品营销、社会服务类项目为基础,将“互联网+”农产品创新思维、电子商务渠道与营销、…

    创业分享 2023-05-13
  • 四川新闻网披露IPO招股书 拟创业板上市

    招股书显示,四川新闻网控股股东,四川省新传媒公司成立于2007年5月,其唯一股东为四川省新闻中心。新传媒公司持有四川新闻网6000万股股份,占目前总股份的60%。四川新闻网实际掌控人为四川省委宣传部,其持有新传媒公司100%的股权。 2014年前三季度,该公司营收8650万元,净利润2416万元。2013年全年营收1.13亿元,净利润3052万元。 本次募集…

    创业分享 2023-05-12
  • 第二届南方科技大学“梧桐树”国际创新创业大赛决赛圆满落幕

    play stop mute max volume repeat   9月16日下午,第二届南方科技大学“梧桐树”国际创新创业大赛决赛在南科大会议中心圆满落幕,来自海内外14支代表队同台竞技,项目涵盖新一代电子信息、高端制造装备、新材料与绿色低碳、生物医药与健康等4个前沿科技领域。   本次大赛由深圳市发展与改革委员会、深圳市南山区政府指导,南方科技大学科技…

    创业分享 2023-05-10
  • 港科技创新创业白皮书发布 建议打造国际创科中心

    (原标题:各方建言香港创科发展 业界冀打造国际创新科技中心) 香港X科技创新创业平台11日在港发布“跑赢智能时代”白皮书,并同场举行青年科技创新创业论坛,邀请学术界、商界、投资界专家及青年创业者就如何将香港打造成智能时代下的国际创新科技中心展开讨论。 红衫资本全球执行合伙人、香港X科技创新创业平台主席沈南鹏表示,香港务实,科技创业的风险和不确定性对年轻人是极…

    创业分享 2023-05-21
  • 北京物资学院MBA教育中心邀岚山社会基金创始人分享创业经验

    接着肖晗先生提供了公司吸引投资人融资的方法。投资准备阶段重点在于业务、规划。公司业务是基础,而谨慎、乐观的预测和规划是能否让公司成熟运转的关键。而在投资中阶段,公司创始人要学会换位思考,从而将闪光点展示出来,利用人际关系网,吸引投资人。此外是重视投资人的建议,多和投资人、其他企业交流。初创企业需要一个碰撞的过程,完善自身。再者,需要知己知彼。创始人应当认识到…

    2023-05-16

发表回复

登录后才能评论

联系我们

在线咨询: QQ交谈

邮件:362039258@qq.com

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