From 89eff0cecfd9fd0efd0999189bd039a679f750f9 Mon Sep 17 00:00:00 2001 From: zhangjian <zhangjianrock@163.com> Date: 星期二, 11 七月 2023 11:34:27 +0800 Subject: [PATCH] 无人机转发接口反射调用 --- ard-work/src/main/java/com/ruoyi/device/uav/service/IUavService.java | 9 +++ ard-work/src/main/java/com/ruoyi/utils/forest/UavClient.java | 3 + ard-work/src/main/java/com/ruoyi/device/uav/controller/ArdUavController.java | 26 +++++--- ard-work/src/main/java/com/ruoyi/device/uav/service/UavService.java | 115 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 143 insertions(+), 10 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/device/uav/controller/ArdUavController.java b/ard-work/src/main/java/com/ruoyi/device/uav/controller/ArdUavController.java index cf246b5..feb37e3 100644 --- a/ard-work/src/main/java/com/ruoyi/device/uav/controller/ArdUavController.java +++ b/ard-work/src/main/java/com/ruoyi/device/uav/controller/ArdUavController.java @@ -25,8 +25,7 @@ import org.apache.commons.codec.binary.Base64; -import static org.springframework.http.HttpMethod.GET; -import static org.springframework.http.HttpMethod.POST; +import static org.springframework.http.HttpMethod.*; /** * 鐩告満璁惧Controller @@ -39,9 +38,9 @@ @RequestMapping("/device/uav") @Api(tags = "鏃犱汉鏈哄閮ㄦ帴鍙�") public class ArdUavController extends BaseController { - public static final String USERNAME = "ardbailu"; - public static final String PASSWORD = "ardkj12345"; - public static final String SALT = "0123456789012345"; + public static final String USERNAME = "ardbailu";//鐢ㄦ埛鍚� + public static final String PASSWORD = "ardkj12345";//瀵嗙爜 + public static final String SALT = "0123456789012345";//鐩� //token 鐧婚檰鍚庢瘡娆¤姹�,鍦╤eader涓惡甯� private String token;//鐧诲綍鎴愬姛杩斿洖鐨則oken @@ -81,6 +80,18 @@ } + @PostMapping("/") + @ApiOperation("鏃犱汉鏈簆ost鎺ュ彛") + public Object post(@RequestParam String url, @RequestParam String data) { + return doUavRequest(POST, url, data); + } + + @DeleteMapping("/") + @ApiOperation("鏃犱汉鏈篸elete鎺ュ彛") + public Object delete(@RequestParam String url, @RequestParam String data) { + return doUavRequest(DELETE, url, data); + } + @Nullable private String doUavRequest(HttpMethod method, String url, String data) { String res = null; @@ -113,11 +124,6 @@ return res; } - @PostMapping("/") - @ApiOperation("鏃犱汉鏈簆ost鎺ュ彛") - public Object post(@RequestParam String url, @RequestParam String data) { - return doUavRequest(POST, url, data); - } public String Encrypt(String sSrc, String sKey) { if (sKey == null) { diff --git a/ard-work/src/main/java/com/ruoyi/device/uav/service/IUavService.java b/ard-work/src/main/java/com/ruoyi/device/uav/service/IUavService.java new file mode 100644 index 0000000..a9e8893 --- /dev/null +++ b/ard-work/src/main/java/com/ruoyi/device/uav/service/IUavService.java @@ -0,0 +1,9 @@ +package com.ruoyi.device.uav.service; + +import org.springframework.http.HttpMethod; + +public interface IUavService { + String doUavRequest(HttpMethod method, String url, String data); + + void login(); +} diff --git a/ard-work/src/main/java/com/ruoyi/device/uav/service/UavService.java b/ard-work/src/main/java/com/ruoyi/device/uav/service/UavService.java new file mode 100644 index 0000000..1950bfd --- /dev/null +++ b/ard-work/src/main/java/com/ruoyi/device/uav/service/UavService.java @@ -0,0 +1,115 @@ +package com.ruoyi.device.uav.service; + +import com.dtflys.forest.exceptions.ForestNetworkException; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.ruoyi.utils.forest.UavClient; +import org.apache.commons.codec.binary.Base64; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpMethod; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Map; + +@Service +public class UavService implements IUavService { + public static final String USERNAME = "ardbailu";//鐢ㄦ埛鍚� + public static final String PASSWORD = "ardkj12345";//瀵嗙爜 + public static final String SALT = "0123456789012345";//鐩� + + //token 鐧婚檰鍚庢瘡娆¤姹�,鍦╤eader涓惡甯� + private String token;//鐧诲綍鎴愬姛杩斿洖鐨則oken + private ObjectMapper om = new ObjectMapper(); + @Autowired + private UavClient uavClient; + + @PostConstruct + public void created() { + this.login(); + } + + @Override + public String doUavRequest(HttpMethod method, String url, String data) { + String res = null; + Method requestMethod = null; + //鑾峰彇method + try { + requestMethod = UavClient.class.getMethod(method.name(), String.class, String.class, String.class); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } + //鎵цmethod + try { + res = (String) requestMethod.invoke(this.uavClient, url, this.token, data); + } catch (InvocationTargetException e) { + ForestNetworkException fe = (ForestNetworkException) e.getCause(); + if (fe.getStatusCode() == 401) {//token澶辨晥,閲嶆柊鐧诲綍 + this.login(); + } + try {//鍐嶆璋冪敤鎺ュ彛 + res = (String) requestMethod.invoke(this.uavClient, url, this.token, data); + } catch (IllegalAccessException ex) { + throw new RuntimeException(ex); + } catch (InvocationTargetException ex) { + throw new RuntimeException(ex); + } + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + + return res; + } + + @Override + public void login() { + String codedPassword = this.Encrypt(PASSWORD, SALT); + String body = "{\"username\":\"" + USERNAME + "\",\"password\":\"" + codedPassword + "\"}"; + try { + String res = uavClient.POST("login", null, body); + Map resMap = om.readValue(res, Map.class); + Map data = (Map) resMap.get("data"); + if (data != null) { + this.token = (String) data.get("access_token"); + } + } catch (ForestNetworkException e) { + e.printStackTrace(); + } catch (JsonMappingException e) { + throw new RuntimeException(e); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + + public String Encrypt(String sSrc, String sKey) { + if (sKey == null) { + System.out.print("Key涓虹┖null"); + return null; + } + // 鍒ゆ柇Key鏄惁涓�16浣� + if (sKey.length() != 16) { + System.out.print("Key闀垮害涓嶆槸16浣�"); + return null; + } + byte[] encrypted = null; + try { + byte[] raw = sKey.getBytes("utf-8"); + SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); + Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"绠楁硶/妯″紡/琛ョ爜鏂瑰紡" + cipher.init(Cipher.ENCRYPT_MODE, skeySpec); + encrypted = cipher.doFinal(sSrc.getBytes("utf-8")); + } catch (Exception e) { + e.printStackTrace(); + ; + } + return new Base64().encodeToString(encrypted);//姝ゅ浣跨敤BASE64鍋氳浆鐮佸姛鑳斤紝鍚屾椂鑳借捣鍒�2娆″姞瀵嗙殑浣滅敤銆� + } +} diff --git a/ard-work/src/main/java/com/ruoyi/utils/forest/UavClient.java b/ard-work/src/main/java/com/ruoyi/utils/forest/UavClient.java index b7d86d4..c90ce14 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/forest/UavClient.java +++ b/ard-work/src/main/java/com/ruoyi/utils/forest/UavClient.java @@ -22,6 +22,9 @@ @UavAuth(token = "${token}") @Post(IP + "${url}") String POST(@DataVariable("url") String url, @DataVariable("token") String token, @JSONBody String body); + @UavAuth(token = "${token}") + @Post(IP + "${url}") + String DELETE(@DataVariable("url") String url, @DataVariable("token") String token, @JSONBody String body); } -- Gitblit v1.9.3