RPC远程调用
RPC(远程过程调用):像调用本地方法一样去调用远端的接口。
| 角色 | 接口名称 | 职责 |
|---|---|---|
| 提供者 (Provider) | 接口 A | 被动方。等着别人传 token过来,它只负责“读”和“回”。 |
| 调用者 (Consumer) | 接口 B | 主动方。构造请求,把 token塞进 Header,发给 A,再看 A 回传的是不是对的。 |
pom.xml引入Hutool依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.all.version}</version>
</dependency>
Hutool 发送请求
针对最为常用的GET和POST请求,HttpUtil封装了两个方法,
HttpUtil.getHttpUtil.post
这两个方法用于请求普通页面,然后返回页面内容的字符串,同时提供一些重载方法用于指定请求参数(指定参数支持File对象,可实现文件上传,当然仅仅针对POST请求)。
GET请求:
// 最简单的HTTP请求,可以自动通过header等信息判断编码,不区分HTTP和HTTPS
String result1= HttpUtil.get("https://www.baidu.com");
// 当无法识别页面编码的时候,可以自定义请求页面的编码
String result2= HttpUtil.get("https://www.baidu.com", CharsetUtil.CHARSET_UTF_8);
//可以单独传入http参数,这样参数会自动做URL编码,拼接在URL中
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("city", "北京");
String result3= HttpUtil.get("https://www.baidu.com", paramMap);
POST请求:
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("city", "北京");
String result= HttpUtil.post("https://www.baidu.com", paramMap);
携带自定义请求头(Header)
这是实现 token 校验的关键。当需要设置 Header 时,必须使用 HttpRequest 类:
String result = HttpRequest.post(url)
.header("token", "your_token_value") // 设置请求头
.form(paramMap) // 设置表单参数
.execute()
.body(); // 获取响应内容
实现基础通信
① 编写接口 A (服务端)
这个接口通过 @RequestHeader 注解直接获取。
@GetMapping("/interfaceA")
public String interfaceA(@RequestHeader("token") String token) {
// 逻辑:从 Header 中获取 token 并原样返回
System.out.println("接口A收到Token: " + token);
return token;
}
② 编写接口 B (调用端)
接口 B 会用到 Hutool 去访问上面的接口 A。
@GetMapping("/interfaceB")
public String interfaceB(String testToken) {
// 1. 定义请求的目标地址(接口A的URL)
String url = "http://localhost:8080/interfaceA";
// 2. 使用 Hutool 发起带 Header 的请求
String resultToken = HttpRequest.get(url)
.header("token", testToken) // 设置变化的 token
.execute()
.body();
// 3. 检查并返回结果
if (testToken.equals(resultToken)) {
return "验证成功,返回的Token是: " + resultToken;
} else {
return "验证失败!";
}
}