有时候需要服务端和客户端之间联调进行断点定位问题。通常可以设置局域网中的本地IP地址进行联调。但有时候不处于同一局域网,又没有公网IP的情况下。也需要远程联调定位。
拿公众号的开发服务器配置来演示下这种类似的使用场景吧。
环境及服务器关系说明:
啊里云
1.A机 : nginx 反向代理机器 : 47.xx.xx.110 对应的域名为 test.fengsh998.com
2.B机 : SpringBoot 发布用到的环境啊里云: 102.xx.xx.119 端口 9099
3.个人开发电脑IDEA:用于调试SpringBoot 提供的接口(接口名为:message)。
访问链路说明:
访问 : https://test.fengsh998.com 经域名解释到47.xx.xx.110然后通过nginx 反向代理跳转到102.xx.xx.119:9099.
对于第一步nginx这个不是必要的,只不过我今天是拿微信小程序消息服务配置来做说明的。
正常客户端访问test.fengsh998.com解释到102.xx.xx.119这个就好了。
关于nginx反向代理怎么配置本文就不阐述了。
springboot :开放一个message接口主要是用来校验用的。
@RestController
public class wxApiController {
@RequestMapping(value = "/message")
public String wxmessage(String signature, String timestamp, String nonce, String echostr) {
String token = "g428qcmzqt95kswnwej9alq1dpo71ttw";
String aesKey = "hmMh6H5Ubp1fJkEItJT9ABywRUge8kUl0hb7UYk7aRP";
/*
1.将token、timestamp、nonce三个参数进行字典序排序
2.将三个参数字符串拼接成一个字符串进行sha1加密
3.开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
*/
String[] strarr = {token,timestamp,nonce};
Arrays.sort(strarr);
StringBuilder sb = new StringBuilder();
for (String str : strarr) {
sb.append(str);
}
String laststring = sb.toString();
String checksign = this.sha1(laststring);
if (checksign != null && checksign.equals(signature)) {
return echostr;
}
return "Error";
}
private String sha1(String str) {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-1");
digest.update(str.getBytes());
byte messageDigest[] = digest.digest();
// 创建 16进制字符串
StringBuffer hexString = new StringBuffer();
// 字节数组转换为 十六进制 数
for (int i = 0; i < messageDigest.length; i++) {
String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
if (shaHex.length() < 2) {
hexString.append(0);
}
hexString.append(shaHex);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
}
将springboot打个jar包,发布到 102.xx.xx.119这台机上,记得配置的时候设置端口,当然根据自己需求来设端口,我这里设置了9099。然后使用
java -jar [打出来的jar包名]
然后在浏器里输入
http://102.xx.xx.119:9099/message?signature=werw×tamp=345433&nonce=ewe&echostr=reter
可以看到随便输入一些参数就可以调用到接口了,只不过现在校验不OK而已。
现在开始设置远程Debug设置。
添加一个remote,然后进行相关配置
然后在发布的那台啊里云机器上执行
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 message-0.0.1-SNAPSHOT.jar --server.port=9099
其中红色部分就是从图中配置的位置COPY出来的。紫色这个是打出来要发布的jar包。最后是启动的端口。
等这个启动OK后。就可以在idea中开启debug
可以看到成功连接到102.xx.xx.119这台机启动的5005端口上
然后浏览上输入
http://102.xx.xx.119:9099/message?signature=werw×tamp=345433&nonce=ewe&echostr=reter
再看下断点。可以看到启作用了。
最后,既然远程调试可以OK了,那么可以配置下消息服务器了。
然后就会触发断点。这样主可以进行调试微信的这个验证接口了。