From 314ccc3fbb5b4cb1be4a77bc107a0ca1a2b2f0a3 Mon Sep 17 00:00:00 2001
From: Crunchy <3114200645@qq.com>
Date: 星期六, 15 三月 2025 10:37:31 +0800
Subject: [PATCH] 浪潮单点登录,注册,心跳
---
ruoyi-admin/src/main/java/com/ruoyi/web/controller/tide/TideUtils.java | 173 ++++++++++++++++++++++++++++++++++
ruoyi-admin/src/main/java/com/ruoyi/web/controller/tide/TideController.java | 81 ++++++++++++++++
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java | 2
ruoyi-admin/src/main/resources/application-druid.yml | 4
ruoyi-admin/src/main/java/com/ruoyi/web/controller/tide/TidePojo.java | 31 ++++++
ruoyi-admin/src/main/resources/application.yml | 4
6 files changed, 290 insertions(+), 5 deletions(-)
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tide/TideController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tide/TideController.java
new file mode 100644
index 0000000..6e341b2
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tide/TideController.java
@@ -0,0 +1,81 @@
+package com.ruoyi.web.controller.tide;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.ruoyi.common.annotation.Anonymous;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.web.service.SysLoginService;
+import com.ruoyi.system.service.ISysUserService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@RequestMapping("/tide")
+@RestController
+@Api(tags = "瀵规帴娴疆绯荤粺")
+@Anonymous
+@Slf4j
+public class TideController {
+
+ @Autowired
+ private SysLoginService loginService;
+
+ @Autowired
+ private ISysUserService userService;
+
+ @ApiOperation(value = "鐧诲綍")
+ @PostMapping("/tideLogin")
+ public AjaxResult login(@RequestBody String code) {
+ String token = TideUtils.getToken(code);
+ JSONObject userInfo = TideUtils.getUserInfo(token);
+ JSONObject tenant = JSONObject.parseObject(userInfo.get("tenant").toString());
+ AjaxResult ajax = AjaxResult.success();
+ // 鐢熸垚浠ょ墝
+ String generateToken = loginService.login(tenant.get("tenantAccount").toString(), tenant.get("tenantPassword").toString(), null,
+ IdWorker.get32UUID());
+ ajax.put(Constants.TOKEN, generateToken);
+ return ajax;
+ }
+
+ @PostMapping("/applicationOrdering")
+ public JSONObject order (@RequestBody TidePojo tidePojo) {
+ SysUser user = new SysUser();
+ String randomString = TideUtils.getRandomString(12);
+ String password = SecurityUtils.encryptPassword(randomString);
+ user.setPassword(password);
+ user.setUserName(tidePojo.getPltAccountLogin());
+ user.setNickName(tidePojo.getEnterpriseName());
+ user.setStatus("0");
+ user.setDelFlag("0");
+ user.setPostIds(new Long[]{1L});
+ user.setRoleId(1L);
+ userService.insertUser(user);
+ Map<String, Object> map = new HashMap<>();
+ map.put("account", tidePojo.getPltAccountLogin());
+ map.put("token", randomString);
+ map.put("tenantId", user.getUserId());
+ return TideUtils.getResult(20000, "鎴愬姛", map);
+ }
+
+ @PostMapping("/cancellation")
+ public JSONObject cancellation (@RequestBody TidePojo tidePojo) {
+ log.info("鎵ц浜嗘敞閿�淇℃伅锛�" + tidePojo);
+ return TideUtils.getResult(20000, "鎴愬姛", null);
+ }
+
+ public static void main(String[] args) {
+ String password = SecurityUtils.encryptPassword("tzvy7lB.");
+ System.out.println(password);
+ }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tide/TidePojo.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tide/TidePojo.java
new file mode 100644
index 0000000..968bfe9
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tide/TidePojo.java
@@ -0,0 +1,31 @@
+package com.ruoyi.web.controller.tide;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class TidePojo {
+ @ApiModelProperty("浼佷笟鍚嶇О")
+ private String enterpriseName;
+
+ @ApiModelProperty("骞冲彴鐢ㄦ埛")
+ private String pltUserCn;
+
+ @ApiModelProperty("骞冲彴璐﹀彿")
+ private String pltAccountLogin;
+
+ @ApiModelProperty("璁㈣喘鏃堕暱")
+ private Integer purchaseDuration;
+
+ @ApiModelProperty("璁㈠崟鏃堕暱鍗曚綅")
+ private String purchaseUnit;
+
+ @ApiModelProperty("appKey")
+ private String appKey;
+
+ @ApiModelProperty("appSecret")
+ private String appSecret;
+
+ @ApiModelProperty("code")
+ private String code;
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tide/TideUtils.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tide/TideUtils.java
new file mode 100644
index 0000000..aea37c7
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tide/TideUtils.java
@@ -0,0 +1,173 @@
+package com.ruoyi.web.controller.tide;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.RandomUtil;
+import cn.hutool.crypto.digest.HMac;
+import cn.hutool.crypto.digest.HmacAlgorithm;
+import cn.hutool.http.HttpRequest;
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.util.HashMap;
+
+@Data
+@Component
+@Slf4j
+public class TideUtils {
+ private final static String appId = "19472937-3039-4bf1-8334-13dc20e076e5";
+
+ private final static String appSecret = "b57bbad60724f810e7bb7e1e7b8791b63eba50e50faef6fa819ade822fac9e4a";
+
+ // 鍐呯綉鍦板潃
+ private final static String ip = "http://58.56.84.138:8083";
+
+ // MD5鍔犲瘑骞惰浆鎹负16杩涘埗
+ public static String md5Encryption(String input) {
+ try {
+ MessageDigest md = MessageDigest.getInstance("MD5");
+ byte[] digest = md.digest(input.getBytes());
+ StringBuilder sb = new StringBuilder();
+ for (byte b : digest) {
+ sb.append(String.format("%02x", b & 0xff));
+ }
+ return sb.toString();
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ // get璇锋眰
+ public static HashMap<String, String> getGetHeader(String parameter) {
+ // 鏃堕棿鎴�
+ String xTime = String.valueOf(DateUtil.current());
+ // 鑾峰彇闅忔満16浣嶅瓧绗︿覆
+ String xRandom = RandomUtil.randomString(16);
+ String xSignSplicingTogether;
+ // 鏈夊弬鏁�
+ if (ObjectUtils.isNotEmpty(parameter)) {
+ // 鍔犲瘑寰楀嚭x-body
+ String xBody = md5Encryption(parameter);
+ // 涓簒-sign鍔犲瘑鍋氭嫾鎺�
+ xSignSplicingTogether = "x-body=" + xBody + "&x-random=" + xRandom + "&x-time=" + xTime;
+ // 鏃犲弬鏁�
+ } else {
+ xSignSplicingTogether = "x-random=" + xRandom + "&x-time=" + xTime;
+ }
+ // 閰嶇疆鍔犲瘑鏂瑰紡涓庡瘑閽�
+ HMac hMac = new HMac(HmacAlgorithm.HmacSHA256, appSecret.getBytes());
+ // 寰楀嚭x-sign
+ String xSign = hMac.digestHex(xSignSplicingTogether);
+ HashMap<String, String> result = new HashMap<>();
+ result.put("x-time", xTime);
+ result.put("x-random", xRandom);
+ result.put("x-sign", xSign);
+ result.put("appKey", appId);
+ return result;
+ }
+
+ // post璇锋眰
+ public static HashMap<String, String> getPostHeader(String parameter) {
+ // 鏃堕棿鎴�
+ String xTime = String.valueOf(DateUtil.current());
+ // 鑾峰彇闅忔満16浣嶅瓧绗︿覆
+ String xRandom = RandomUtil.randomString(16);
+ String xSignSplicingTogether;
+ // 鏈夊弬鏁�
+ if (ObjectUtils.isNotEmpty(parameter)) {
+ // 鍔犲瘑寰楀嚭x-body
+ String xBody = md5Encryption(parameter);
+ // 涓簒-sign鍔犲瘑鍋氭嫾鎺�
+ xSignSplicingTogether = "x-body=" + xBody + "&x-random=" + xRandom + "&x-time=" + xTime;
+ // 鏃犲弬鏁�
+ } else {
+ xSignSplicingTogether = "x-random=" + xRandom + "&x-time=" + xTime;
+ }
+ // x-sign 鍔犲瘑
+ HMac hMac = new HMac(HmacAlgorithm.HmacSHA256, appSecret.getBytes());
+ String xSign = hMac.digestHex(xSignSplicingTogether);
+ HashMap<String, String> result = new HashMap<>();
+ result.put("x-time", xTime);
+ result.put("x-random", xRandom);
+ result.put("x-sign", xSign);
+ result.put("appKey", appId);
+ return result;
+ }
+
+ /**
+ * 浜斿垎閽熶竴娆$殑蹇冭烦
+ */
+// @Scheduled(cron = "0 0/5 * * * ?")
+ public static void heartbeat(){
+ HashMap<String, String> header = getGetHeader(null);
+ String url = ip + "/cpn/api/extra/v1/application/heartbeat";
+ String body = HttpRequest.get(url).headerMap(header, false).execute().body();
+ System.out.println(body + "=======MES蹇冭烦鎵ц鎴愬姛锛�");
+ }
+
+ // 鑾峰彇token
+ public static String getToken(String code) {
+ String url = ip + "/cpn/extral/applicationCode/appAuthCheck";
+ JSONObject json = new JSONObject();
+ json.put("code", code);
+ json.put("appID", appId);
+ json.put("appSecret", appSecret);
+ HashMap<String, String> header = getPostHeader(json.toString());
+ String body = HttpRequest.post(url)
+ .headerMap(header, false)
+ .body(json.toString())
+ .execute().body();
+ JSONObject jsonObject = JSONObject.parseObject(body);
+ return jsonObject.get("data").toString();
+ }
+
+ // 鑾峰彇鐢ㄦ埛淇℃伅
+ public static JSONObject getUserInfo(String token) {
+ String url = ip + "/cpn/api/extral/applicationCode/getUserInfoByToken";
+ JSONObject json = new JSONObject();
+ json.put("appID", appId);
+ HashMap<String, String> header = getPostHeader(json.toString());
+ header.put("Authorization", token);
+ String body = HttpRequest.post(url)
+ .headerMap(header, false)
+ .body(json.toString())
+ .execute().body();
+ JSONObject jsonObject = JSONObject.parseObject(body);
+ return JSONObject.parseObject(jsonObject.get("data").toString());
+ }
+
+ public static JSONObject getResult(Integer code, String msg, Object data) {
+ JSONObject json = new JSONObject();
+ json.put("code", code);
+ json.put("msg", msg);
+ json.put("data", data);
+ String xRandom = RandomUtil.randomString(16);
+ json.put("traceId", xRandom);
+ return json;
+ }
+
+ public static String getRandomString(int length) {
+ SecureRandom random = new SecureRandom();
+ String uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ String lowercaseLetters = "abcdefghijklmnopqrstuvwxyz";
+ String numbers = "0123456789";
+ String specialCharacters = "!@$%^&*()_+-=.";
+ String characterSet = uppercaseLetters + lowercaseLetters + numbers + specialCharacters;
+ StringBuilder passwordBuilder = new StringBuilder();
+
+ for (int i = 0; i < length; i++) {
+ int randomIndex = random.nextInt(characterSet.length());
+ char randomChar = characterSet.charAt(randomIndex);
+ passwordBuilder.append(randomChar);
+ }
+
+ return passwordBuilder.toString();
+ }
+}
diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml
index dfad74e..14ca9c5 100644
--- a/ruoyi-admin/src/main/resources/application-druid.yml
+++ b/ruoyi-admin/src/main/resources/application-druid.yml
@@ -71,7 +71,7 @@
# 鏁版嵁搴撶储寮�
database: 0
# # 瀵嗙爜
- # password: root2022!
+ password: 123456
# 杩炴帴瓒呮椂鏃堕棿
timeout: 10s
lettuce:
@@ -96,7 +96,7 @@
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
- log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+ log-impl: # org.apache.ibatis.logging.stdout.StdOutImpl
# Swagger閰嶇疆
swagger:
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index b6f9251..203958b 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -7,7 +7,7 @@
# 鐗堟潈骞翠唤
copyrightYear: 2025
# 鏂囦欢璺緞 绀轰緥锛� Windows閰嶇疆D:/ruoyi/uploadPath锛孡inux閰嶇疆 /home/ruoyi/uploadPath锛�
- profile: /javaWork/lims-ruoyi/file/uploadPath
+ profile: D:\webapp
# 鑾峰彇ip鍦板潃寮�鍏�
addressEnabled: false
# 楠岃瘉鐮佺被鍨� math 鏁板瓧璁$畻 char 瀛楃楠岃瘉
@@ -33,7 +33,7 @@
# 鏃ュ織閰嶇疆
logging:
- file-location: /javaWork/lims-ruoyi
+ file-location: D:\webapp
level:
com.ruoyi: info
org.springframework: warn
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
index 05fbbf4..12b3138 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
@@ -100,7 +100,7 @@
public String login(String username, String password, String code, String uuid)
{
// 楠岃瘉鐮佹牎楠�
- validateCaptcha(username, code, uuid);
+// validateCaptcha(username, code, uuid);
// 鐧诲綍鍓嶇疆鏍¢獙
loginPreCheck(username, password);
// 鐢ㄦ埛楠岃瘉
--
Gitblit v1.9.3