From a7c7965a518359a1c81bde0a8c451f2fc1cc25fe Mon Sep 17 00:00:00 2001
From: zhangjian <zhangjianrock@163.com>
Date: 星期五, 07 七月 2023 16:31:40 +0800
Subject: [PATCH] 无人机转发接口
---
ard-work/pom.xml | 11 ++
ard-work/src/main/java/com/ruoyi/utils/forest/UavClient.java | 26 ++++++
ard-work/src/main/java/com/ruoyi/device/uav/controller/ArdUavController.java | 132 +++++++++++++++++++++++++++++++++
ard-work/src/main/java/com/ruoyi/utils/forest/UavAuthLifeCircle.java | 40 ++++++++++
ard-work/src/main/java/com/ruoyi/utils/forest/UavAuth.java | 18 ++++
5 files changed, 227 insertions(+), 0 deletions(-)
diff --git a/ard-work/pom.xml b/ard-work/pom.xml
index 0047bfb..2d02074 100644
--- a/ard-work/pom.xml
+++ b/ard-work/pom.xml
@@ -16,6 +16,17 @@
<dependencies>
<!-- 閫氱敤宸ュ叿-->
<dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ <version>1.10</version>
+ </dependency>
+
+
+ <dependency>
+ <groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-common</artifactId>
+ </dependency>
+ <dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common</artifactId>
</dependency>
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
new file mode 100644
index 0000000..a78bb9e
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/uav/controller/ArdUavController.java
@@ -0,0 +1,132 @@
+package com.ruoyi.device.uav.controller;
+
+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.github.pagehelper.util.StringUtil;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.utils.forest.UavClient;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.binary.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+import java.util.*;
+
+import org.apache.commons.codec.binary.Base64;
+
+/**
+ * 鐩告満璁惧Controller
+ *
+ * @author ruoyi
+ * @date 2023-01-31
+ */
+@Slf4j(topic = "uav")
+@RestController
+@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";
+
+ //token 鐧婚檰鍚庢瘡娆¤姹�,鍦╤eader涓惡甯�
+ private String token = null;
+ private ObjectMapper om = new ObjectMapper();
+
+ @Autowired
+ private UavClient uavClient;
+
+ public void uavLogin() {
+ 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");
+ 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 getToken() {
+ if (StringUtil.isEmpty(this.token)) {
+ this.uavLogin();
+ }
+ return this.token;
+ }
+
+ @GetMapping("/")
+ @ApiOperation("鏃犱汉鏈篻et鎺ュ彛")
+ public Object get(@RequestParam String url, @RequestParam String data) {
+ String res = null;
+ String token = getToken();
+ try {
+ res = uavClient.get(url, token, data);
+ } catch (ForestNetworkException e) {
+ if (e.getStatusCode() == 401) {
+ this.uavLogin();
+ token = getToken();
+ res = uavClient.get(url, token, data);
+ }
+ }
+
+ return res;
+
+ }
+
+ @PostMapping("/")
+ @ApiOperation("鏃犱汉鏈簆ost鎺ュ彛")
+ public Object post(@RequestParam String url, @RequestParam String data) {
+ String res = null;
+ String token = getToken();
+ try {
+ res = uavClient.post(url, token, data);
+ } catch (ForestNetworkException e) {
+ if (e.getStatusCode() == 401) {
+ this.uavLogin();
+ token = getToken();
+ res = uavClient.post(url, token, data);
+ }
+ }catch (Exception e){
+ System.out.println(e.getMessage());
+ }
+
+ return res;
+ }
+
+ 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/UavAuth.java b/ard-work/src/main/java/com/ruoyi/utils/forest/UavAuth.java
new file mode 100644
index 0000000..78a93f0
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/utils/forest/UavAuth.java
@@ -0,0 +1,18 @@
+package com.ruoyi.utils.forest;
+
+
+import com.dtflys.forest.annotation.MethodLifeCycle;
+import com.dtflys.forest.annotation.RequestAttributes;
+
+import java.lang.annotation.*;
+
+@MethodLifeCycle(UavAuthLifeCircle.class)
+@Documented
+/** 閲嶇偣锛� @MethodLifeCycle娉ㄨВ鎸囧畾璇ユ敞瑙g殑鐢熷懡鍛ㄦ湡绫�*/
+@RequestAttributes
+@Retention(RetentionPolicy.RUNTIME)
+/** 鎸囧畾璇ユ敞瑙e彲鐢ㄤ簬绫讳笂鎴栨柟娉曚笂 */
+@Target({ElementType.TYPE, ElementType.METHOD})
+public @interface UavAuth {
+ String token();
+}
diff --git a/ard-work/src/main/java/com/ruoyi/utils/forest/UavAuthLifeCircle.java b/ard-work/src/main/java/com/ruoyi/utils/forest/UavAuthLifeCircle.java
new file mode 100644
index 0000000..3173958
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/utils/forest/UavAuthLifeCircle.java
@@ -0,0 +1,40 @@
+package com.ruoyi.utils.forest;
+
+import com.dtflys.forest.http.ForestRequest;
+import com.dtflys.forest.lifecycles.MethodAnnotationLifeCycle;
+import com.dtflys.forest.reflection.ForestMethod;
+
+public class UavAuthLifeCircle implements MethodAnnotationLifeCycle<UavAuth, Object> {
+
+
+ /**
+ * 褰撴柟娉曡皟鐢ㄦ椂璋冪敤姝ゆ柟娉曪紝姝ゆ椂杩樻病鏈夋墽琛岃姹傚彂閫�
+ * 娆℃柟娉曞彲浠ヨ幏寰楄姹傚搴旂殑鏂规硶璋冪敤淇℃伅锛屼互鍙婂姩鎬佷紶鍏ョ殑鏂规硶璋冪敤鍙傛暟鍒楄〃
+ */
+ @Override
+ public void onInvokeMethod(ForestRequest request, ForestMethod method, Object[] args) {
+ System.out.println("Invoke Method '" + method.getMethodName() + "' Arguments: " + args);
+ }
+
+ /**
+ * 鍙戦�佽姹傚墠鎵ц姝ゆ柟娉�
+ */
+ @Override
+ public boolean beforeExecute(ForestRequest request) {
+ String token = (String) getAttribute(request, "token");
+ System.out.println(" UavAuthLifeCircle token:"+token);
+ if(token!=null){
+ request.addHeader("x-auth-token", token);
+ }
+ return true;
+ }
+
+ /**
+ * 姝ゆ柟娉曞湪璇锋眰鏂规硶鍒濆鍖栫殑鏃跺�欒璋冪敤
+ */
+
+ @Override
+ public void onMethodInitialized(ForestMethod forestMethod, UavAuth uavAuth) {
+ System.out.println("Method '" + forestMethod.getMethodName());
+ }
+}
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
new file mode 100644
index 0000000..4efe3bb
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/utils/forest/UavClient.java
@@ -0,0 +1,26 @@
+package com.ruoyi.utils.forest;
+
+import com.dtflys.forest.annotation.DataVariable;
+import com.dtflys.forest.annotation.Get;
+import com.dtflys.forest.annotation.JSONBody;
+import com.dtflys.forest.annotation.Post;
+import org.springframework.stereotype.Component;
+
+@Component
+public interface UavClient {
+ @Get("http://www.baidu.com")
+ String test();
+
+ public static String IP = "http://112.98.126.2:6100/";
+
+
+ @UavAuth(token = "${token}")
+ @Get(IP + "${url}")
+ String get(@DataVariable("url") String url, @DataVariable("token") String token, @JSONBody String body);
+
+ @UavAuth(token = "${token}")
+ @Post(IP + "${url}")
+ String post(@DataVariable("url") String url, @DataVariable("token") String token, @JSONBody String body);
+
+
+}
--
Gitblit v1.9.3