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