From 57f42628814996e77f675b3d0d74a7b8e1840432 Mon Sep 17 00:00:00 2001 From: xuqm Date: Tue, 4 Apr 2023 16:30:56 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BE=A4=E7=BB=84=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 ++ .../trust/pushdemo/controller/HelloController.java | 46 ++++++++++++++++--- .../org/bjca/trust/pushdemo/message/ImClient.java | 53 +++++++++++++++++----- .../cn/org/bjca/trust/pushdemo/message/ImUser.java | 13 ++++++ .../bjca/trust/pushdemo/message/SendMessage.java | 9 ++++ 5 files changed, 107 insertions(+), 18 deletions(-) create mode 100644 src/main/java/cn/org/bjca/trust/pushdemo/message/ImUser.java diff --git a/pom.xml b/pom.xml index bf3345f..efcd4c0 100644 --- a/pom.xml +++ b/pom.xml @@ -37,6 +37,10 @@ gson 2.9.0 + + org.springframework.boot + spring-boot-starter-webflux + diff --git a/src/main/java/cn/org/bjca/trust/pushdemo/controller/HelloController.java b/src/main/java/cn/org/bjca/trust/pushdemo/controller/HelloController.java index caa1bd0..b973e0b 100644 --- a/src/main/java/cn/org/bjca/trust/pushdemo/controller/HelloController.java +++ b/src/main/java/cn/org/bjca/trust/pushdemo/controller/HelloController.java @@ -1,17 +1,49 @@ package cn.org.bjca.trust.pushdemo.controller; -import org.springframework.web.bind.annotation.*; +import org.apache.tomcat.util.codec.binary.Base64; +import org.springframework.http.HttpHeaders; +import org.springframework.util.MultiValueMap; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.reactive.function.BodyInserters; +import org.springframework.web.reactive.function.client.WebClient; + +import java.nio.charset.StandardCharsets; @RestController @RequestMapping("hello") public class HelloController { + @GetMapping("/{id}") - public String getById(@PathVariable Integer id) { + public String getById(@PathVariable String id) { System.out.println("id ==> " + id); - return "{\n" + - " \"msg\": \"qdxorigin\",\n" + - " \"status\": \"200\",\n" + - " \"data\": \"Sbfuiaefhaikufhcsauik\"\n" + - "}"; + + WebClient webClient = WebClient.builder().baseUrl("http://127.0.0.1:15672").defaultHeaders(httpHeaders -> httpHeaders.addAll(getHeaders())).build(); + + webClient.put().uri("/api/users/{userId}", id) // 请求路径 + .body(BodyInserters.fromValue("{\n" + " \"username\": \"" + id + "\",\n" + " \"password\": \"" + id + "\",\n" + " \"tags\": \"none\"\n" + "}")).retrieve(); + + webClient.put().uri("/api/permissions/{vhost}/{userId}", "/", id) // 请求路径 + .body(BodyInserters.fromValue("{\n" + " \"username\": \"" + id + "\",\n" + " \"vhost\": \"/\",\n" + " \"configure\": \".*\",\n" + " \"write\": \".*\",\n" + " \"read\": \".*\"\n" + "}")).retrieve(); + webClient.put().uri("/api/topic-permissions/{vhost}/{userId}", "/", id) // 请求路径 + .body(BodyInserters.fromValue("{\n" + " \"username\": \"" + id + "\",\n" + " \"vhost\": \"/\",\n" + " \"exchange\": \"\",\n" + " \"write\": \".*\",\n" + " \"read\": \".*\"\n" + "}")).retrieve(); + + + return "{\n" + " \"msg\": \"qdxorigin\",\n" + " \"status\": \"200\",\n" + " \"data\": \"Sbfuiaefhaikufhcsauik\"\n" + "}"; + } + + String enc = new String(Base64.encodeBase64("admin:admin".getBytes(StandardCharsets.ISO_8859_1), false)); + HttpHeaders headers = null; + + private MultiValueMap getHeaders() { + + if (headers == null) { + headers = new HttpHeaders(); + headers.add(HttpHeaders.AUTHORIZATION, "Basic " + enc); + headers.add(HttpHeaders.CONTENT_TYPE, "application/json"); + } + return headers; } } diff --git a/src/main/java/cn/org/bjca/trust/pushdemo/message/ImClient.java b/src/main/java/cn/org/bjca/trust/pushdemo/message/ImClient.java index 8582005..316f8dd 100644 --- a/src/main/java/cn/org/bjca/trust/pushdemo/message/ImClient.java +++ b/src/main/java/cn/org/bjca/trust/pushdemo/message/ImClient.java @@ -1,9 +1,17 @@ package cn.org.bjca.trust.pushdemo.message; import cn.org.bjca.trust.pushdemo.json.GsonImplHelp; +import org.apache.tomcat.util.codec.binary.Base64; import org.eclipse.paho.client.mqttv3.*; +import org.springframework.http.HttpHeaders; +import org.springframework.util.MultiValueMap; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; public class ImClient implements ImClientInterface { @@ -76,6 +84,18 @@ public class ImClient implements ImClientInterface { System.out.println("----------------------掉线--------------------------"); } + final String enc = new String(Base64.encodeBase64("admin:admin".getBytes(StandardCharsets.ISO_8859_1), false)); + HttpHeaders headers = null; + + private MultiValueMap getHeaders() { + + if (headers == null) { + headers = new HttpHeaders(); + headers.add(HttpHeaders.AUTHORIZATION, "Basic " + enc); + headers.add(HttpHeaders.CONTENT_TYPE, "application/json"); + } + return headers; + } @Override public void messageArrived(String s, MqttMessage mqttMessage) { // System.out.println(new String(mqttMessage.getPayload())); @@ -94,17 +114,28 @@ public class ImClient implements ImClientInterface { } try { if (sendMessage.getToClientId().startsWith("G_")) { - SendMessage message1 = new SendMessage(); - message1.setMessageId(sendMessage.getMessageId()); - message1.setMessage(sendMessage.getMessage()); - message1.setMessageType(sendMessage.getMessageType()); - message1.setFromClientId(sendMessage.getToClientId()); - message1.setTarget(sendMessage.getFromClientId()); - message1.setToClientId("xuqm"); - message1.setTimestamp(sendMessage.getTimestamp()); - message1.setTenantNo(sendMessage.getTenantNo()); - client.publish(message1.getToClientId(), GsonImplHelp.get().toJson(message1).getBytes(StandardCharsets.UTF_8), 2, false); - } else { + + + WebClient webClient = WebClient.builder().baseUrl("http://127.0.0.1:15672").defaultHeaders(httpHeaders -> httpHeaders.addAll(getHeaders())).build(); + + Mono m = webClient.get().uri("/api/users/") // 请求路径 + .retrieve().bodyToMono(ImUser[].class); + + for (ImUser imUser : m.block()) {SendMessage message1 = new SendMessage(); + message1.setMessageId(sendMessage.getMessageId()); + message1.setMessage(sendMessage.getMessage()); + message1.setMessageType(sendMessage.getMessageType()); + message1.setDescribe(sendMessage.getDescribe()); + message1.setFromClientId(sendMessage.getToClientId()); + message1.setTarget(sendMessage.getFromClientId()); + message1.setToClientId(imUser.getName()); + message1.setTimestamp(sendMessage.getTimestamp()); + message1.setTenantNo(sendMessage.getTenantNo()); + client.publish(message1.getToClientId(), GsonImplHelp.get().toJson(message1).getBytes(StandardCharsets.UTF_8), 2, false); + + } + + } else { client.publish(sendMessage.getToClientId(), GsonImplHelp.get().toJson(sendMessage).getBytes(StandardCharsets.UTF_8), 2, false); } } catch (MqttException e) { diff --git a/src/main/java/cn/org/bjca/trust/pushdemo/message/ImUser.java b/src/main/java/cn/org/bjca/trust/pushdemo/message/ImUser.java new file mode 100644 index 0000000..ffb5a78 --- /dev/null +++ b/src/main/java/cn/org/bjca/trust/pushdemo/message/ImUser.java @@ -0,0 +1,13 @@ +package cn.org.bjca.trust.pushdemo.message; + +public class ImUser { + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/src/main/java/cn/org/bjca/trust/pushdemo/message/SendMessage.java b/src/main/java/cn/org/bjca/trust/pushdemo/message/SendMessage.java index 40bd1fc..b0e7781 100644 --- a/src/main/java/cn/org/bjca/trust/pushdemo/message/SendMessage.java +++ b/src/main/java/cn/org/bjca/trust/pushdemo/message/SendMessage.java @@ -9,6 +9,7 @@ public class SendMessage extends BaseMessage { private String target; private int messageType; private String message; + private String describe; private String fromClientId; private String tenantNo; @@ -32,6 +33,14 @@ public class SendMessage extends BaseMessage { this.messageId = messageId; } + public String getDescribe() { + return describe; + } + + public void setDescribe(String describe) { + this.describe = describe; + } + public long getTimestamp() { return this.timestamp; }