![]()
Forest已参加2021年度OSC中国开源项目评选活动,如果您喜欢Forest或对Forest感兴趣,请投上您宝贵的一票,感谢!
点击投票👉 投票
Forest介绍
Forest 是一个开源的 Java HTTP 客户端框架,它能够将 HTTP 的所有请求信息(包括 URL、Header 以及 Body 等信息)绑定到您自定义的 Interface 方法上,能够通过调用本地接口方法的方式发送 HTTP 请求
现已 1.9k star
![]()
Forest 如何使用
Forest 不需要您编写具体的 HTTP 调用过程,只需要您定义一个接口,然后通过 Forest 注解将 HTTP 请求的信息添加到接口的方法上即可。请求发送方通过调用您定义的接口便能自动发送请求和接受请求的响应
Forest 的工作原理
Forest 会将您定义好的接口通过动态代理的方式生成一个具体的实现类,然后组织、验证 HTTP 请求信息,绑定动态数据,转换数据形式,SSL 验证签名,调用后端 HTTP API(httpclient 等 API)执行实际请求,等待响应,失败重试,转换响应数据到 Java 类型等脏活累活都由这动态代理的实现类给包了。 请求发送方调用这个接口时,实际上就是在调用这个干脏活累活的实现类
文档和示例
重点更新内容
自定义hostnameVerifier
定义一个实现 HostnameVerifier 接口的类
/**
* 自定义SSL主机名/域名验证器
*/
public class MyHostnameVerifier implements HostnameVerifier {
@Override
public boolean verify(String s, SSLSession sslSession) {
if ("gitee.com".equals(s)) {
return true;
}
return false;
}
}
将自定义的SSL主机名验证器配置到 Forest 的KeyStore中
在Springboot项目的application.yml文件中配置
forest:
ssl-key-stores:
- id: keystore1
hostname-verifier: your.site.MyHostnameVerifier
在接口中绑定
@Post(url = "/something", keyStore = "keystore1")
String postSomething(@Body body);
@SSLHostnameVerifier注解
除了在全局配置文件中的keyStore中配置外, 也可以通过相关注解直接在接口上绑定
public class MyHostnameVerifier implements HostnameVerifier {
@Override
public boolean verify(String hostname, SSLSession session) {
// 只通过域名为 gitee.com 的请求
if ("gitee.com".equals(hostname)) {
return true;
}
return false;
}
}
通过@SSLHostnameVerifier注解绑定到接口
@Post(url = "/something")
@SSLHostnameVerifier(TrustAnyHostnameVerifier.class)
String postSomething(@Body body);
@SSLSocketFactoryBuilder注解
同理 SSLSocketFactory 也一样可以自定义,同时由@SSLSocketFactoryBuilder注解来绑定
public class MySSLSocketFactoryBuilder implements SSLSocketFactoryBuilder {
@Override
public SSLSocketFactory getSSLSocketFactory(ForestRequest request, String protocol) throws Exception {
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null,
new TrustManager[] { new TrustAllManager() },
new SecureRandom());
System.out.println("do MySSLSocketFactoryBuilder");
return sslContext.getSocketFactory();
}
}
绑定到接口
@Post(url = "/something")
@SSLSocketFactoryBuilder(MySSLSocketFactoryBuilder.class)
String postSomething(@Body body);
本次更新
新增特性
修复问题
代码更新
- add: @SSLHostnameVerifier 注解
- add: @SSLSocketFactoryBuilder 注解
鸣谢
本次更新有 @AlexShi 小伙伴参与贡献,万分感谢!
2021年度OSC中国开源项目评选
Forest已参加2021年度OSC中国开源项目评选活动,如果您喜欢Forest或对Forest感兴趣,请投上您宝贵的一票,感谢!
点击投票👉 投票