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

相关推荐

  • 第一创业涨3% 首创集团拟37.55亿向北京国管转让股份

    关注中金在线: 热门搜索 为您推荐 扫描或点击关注中金在线客服   第一创业表示,本次权益变动属于协议转让,不触及要约收购。本次权益变动前,公司无控股股东和实际控制人。本次权益变动完成后,北京国管将成为公司第一大股东,公司仍无控股股东和实际控制人。   本次权益变动事项尚需国有资产监督管理机构审批和中国证券监督管理委员会核准,本次权益变动能否最终完成尚存在不…

    2023-05-10
  • 柳传志:九成九的创业者会死在半途

      近几年来,天使投资金额以每年百分之几百的速度在迅猛增长,对应着创业项目在以同样比例在增加。究其原因,是中国在经历了三十多年的发展之后,诞生了一大批成功的并积累了众多财富的企业家,如今这些企业家正在转型成投资家,把他们积累的财富投资到有希望长大成树的种子里。北京、深圳、杭州、成都,各自形成了创业中心。   一个人经营企业数十载之后,会积累了大量的财富,这个…

    2023-05-28
  • 创业初期没有钱,该怎么继续下去,个人经验

    二、作为副业发展 一、公司学习 三、别听成功学 五、跟高人学习 四、学会自我投资 其实创业的个人投资也是很有必要的,我之前是不看书的,总是觉得创业干就行了,看书没什么用,但是我在进入自媒体圈子的时候,认识了很多自媒体大咖,他们给我建议就是,没事了买几本书给自己投资一下,我当抱着试试看的态度就开始每天看书,经过我看了一段时间的书我发现,真的看书能对人的思考和判…

    创业分享 2023-05-11
  • vm网红视频打造网红第一视频网站

    vermodel是一家网红孵化公司,本次本站小编采访到vm驻京办事处,就视频栏目业务进行采访 请问站长,vm的视频栏目中心思想是什么? 你好非常高兴接受贵站采访,VM上线了一个视频栏目,意义在于普及网红知识,我们网站每天来很多新注册用户,每天加到社群QQ群不少人,和大家聊的都了发现很多人都有这样一个问题,网红是什么意思?其实大多数网红理解的过于范范,把网红看…

    创业分享 2023-05-31
  • 大学毕业生自主创业比例呈平稳态势

    大学毕业生自主创业比例呈平稳态势 | My数说 2018-07-19 08:55 来源:麦可思研究 毕业生 /创业 /大学 声明:未经授权,不得转载。转载请联系麦可思研究编辑部(微信搜索18602824882)。返回搜狐,查看更多 原标题:大学毕业生自主创业比例呈平稳态势 | My数说 数据说明 自主创业最集中的行业类的比例:2017届同学历层次自主创业人群…

    创业分享 2023-05-16

发表回复

登录后才能评论

联系我们

在线咨询: QQ交谈

邮件:362039258@qq.com

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