From 69b4d77c0402b73f5fd1ee6102b8143a232980da Mon Sep 17 00:00:00 2001 From: wanglizhong <wlz> Date: 星期六, 03 五月 2025 01:38:45 +0800 Subject: [PATCH] feat:请求gps接口正常 --- ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java | 13 ruoyi-system/src/main/java/com/ruoyi/system/config/GpsServiceConfig.java | 39 ++++ ruoyi-system/pom.xml | 6 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/GpsCollectServiceImpl.java | 144 ++++++++++++++++ ruoyi-common/src/main/java/com/ruoyi/common/utils/MD5Util.java | 37 ++++ ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsLoginRequest.java | 63 +++++++ ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/GpsCollectController.java | 36 ++++ ruoyi-admin/src/main/resources/application.yml | 12 ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtil.java | 119 +++++++++++++ ruoyi-common/pom.xml | 6 ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsLoginResponse.java | 24 ++ ruoyi-system/src/main/java/com/ruoyi/system/service/IGpsCollectService.java | 16 + 12 files changed, 504 insertions(+), 11 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/GpsCollectController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/GpsCollectController.java new file mode 100644 index 0000000..ec7d4d0 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/GpsCollectController.java @@ -0,0 +1,36 @@ +package com.ruoyi.web.controller.system; + +import com.ruoyi.common.annotation.Anonymous; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.system.domain.GpsLoginRequest; +import com.ruoyi.system.domain.GpsLoginResponse; +import com.ruoyi.system.service.IGpsCollectService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * GPS閲囬泦鎺ュ彛 + */ +@RestController +@RequestMapping("/system/gpscollect") +public class GpsCollectController extends BaseController { + + @Autowired + private IGpsCollectService gpsCollectService; + + /** + * 娴嬭瘯鐧诲綍鎺ュ彛 + */ + @Anonymous() + @GetMapping("/testLogin") + public AjaxResult testLogin() { + GpsLoginRequest request = new GpsLoginRequest(); + request.setType("USER"); + request.setFrom("WEB"); + request.setBrowser("Chrome/104.0.0.0"); + + GpsLoginResponse response = gpsCollectService.login(request); + return success(response); + } +} \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index db0b9f1..7d421e6 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -12,10 +12,7 @@ addressEnabled: false # 楠岃瘉鐮佺被鍨� math 鏁板瓧璁$畻 char 瀛楃楠岃瘉 captchaType: math - # 鍖垮悕璁块棶閰嶇疆 - anonymous: - appId: appId1 - securityKey: your_security_key + # 寮�鍙戠幆澧冮厤缃� server: @@ -131,3 +128,10 @@ excludes: /system/notice # 鍖归厤閾炬帴 urlPatterns: /system/*,/monitor/*,/tool/* + +# GPS鏈嶅姟閰嶇疆 +gps: + service: + domain: https://gps51.com + username: 鐜嬫煇浜� + password: Aa1357 diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index fc5574e..5266477 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -46,7 +46,11 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> - + <dependency> + <groupId>com.alibaba</groupId> + <artifactId>fastjson</artifactId> + <version>1.2.83</version> + </dependency> <!--甯哥敤宸ュ叿绫� --> <dependency> <groupId>org.apache.commons</groupId> diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtil.java new file mode 100644 index 0000000..9afdb90 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtil.java @@ -0,0 +1,119 @@ +package com.ruoyi.common.utils; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.util.Map; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import java.security.cert.X509Certificate; +import com.alibaba.fastjson.JSON; + +/** + * HTTP宸ュ叿绫� + */ +public class HttpUtil { + + private static final int CONNECT_TIMEOUT = 5000; + private static final int READ_TIMEOUT = 5000; + + static { + try { + // 鍒涘缓淇′换鎵�鏈夎瘉涔︾殑TrustManager + TrustManager[] trustAllCerts = new TrustManager[] { + new X509TrustManager() { + public X509Certificate[] getAcceptedIssuers() { + return null; + } + public void checkClientTrusted(X509Certificate[] certs, String authType) { + } + public void checkServerTrusted(X509Certificate[] certs, String authType) { + } + } + }; + + // 鍒濆鍖朣SLContext + SSLContext sc = SSLContext.getInstance("SSL"); + sc.init(null, trustAllCerts, new java.security.SecureRandom()); + HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); + + // 璁剧疆涓绘満鍚嶉獙璇佸櫒 + HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true); + } catch (Exception e) { + throw new RuntimeException("鍒濆鍖朣SL涓婁笅鏂囧け璐�", e); + } + } + + /** + * 鍙戦�丳OST璇锋眰 + * @param url 璇锋眰URL + * @param params 璇锋眰鍙傛暟 + * @return 鍝嶅簲鍐呭 + */ + public static String post(String url, Map<String, String> params) { + StringBuilder response = new StringBuilder(); + HttpURLConnection conn = null; + try { + // 鍒涘缓杩炴帴 + URL requestUrl = new URL(url); + boolean isHttps = url.toLowerCase().startsWith("https"); + + // 鏍规嵁鍗忚绫诲瀷鍒涘缓杩炴帴 + if (isHttps) { + conn = (HttpsURLConnection) requestUrl.openConnection(); + } else { + conn = (HttpURLConnection) requestUrl.openConnection(); + } + + // 璁剧疆璇锋眰灞炴�� + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setDoInput(true); + conn.setUseCaches(false); + conn.setRequestProperty("Content-Type", "application/json"); + conn.setRequestProperty("Accept", "application/json"); + + // 璁剧疆瓒呮椂鏃堕棿 + conn.setConnectTimeout(CONNECT_TIMEOUT); + conn.setReadTimeout(READ_TIMEOUT); + + // 鏋勫缓JSON鍙傛暟瀛楃涓� + String jsonParams = JSON.toJSONString(params); + + // 鍙戦�佽姹傚弬鏁� + try (OutputStream os = conn.getOutputStream()) { + os.write(jsonParams.getBytes(StandardCharsets.UTF_8)); + os.flush(); + } + + // 鑾峰彇鍝嶅簲鐮� + int responseCode = conn.getResponseCode(); + if (responseCode != HttpURLConnection.HTTP_OK) { + throw new RuntimeException("HTTP璇锋眰澶辫触锛屽搷搴旂爜: " + responseCode); + } + + // 璇诲彇鍝嶅簲 + try (BufferedReader reader = new BufferedReader( + new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) { + String line; + while ((line = reader.readLine()) != null) { + response.append(line); + } + } + + } catch (Exception e) { + throw new RuntimeException("HTTP璇锋眰澶辫触: " + e.getMessage(), e); + } finally { + if (conn != null) { + conn.disconnect(); + } + } + + return response.toString(); + } +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/MD5Util.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/MD5Util.java new file mode 100644 index 0000000..a945d79 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/MD5Util.java @@ -0,0 +1,37 @@ +package com.ruoyi.common.utils; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +/** + * MD5鍔犲瘑宸ュ叿绫� + */ +public class MD5Util { + /** + * MD5鍔犲瘑锛�32浣嶅皬鍐欙級 + * @param plainText 鏄庢枃 + * @return 32浣嶅皬鍐橫D5 + */ + public static String md5(String plainText) { + try { + MessageDigest md = MessageDigest.getInstance("MD5"); + md.update(plainText.getBytes()); + byte[] b = md.digest(); + StringBuilder buf = new StringBuilder(""); + for (int offset = 0; offset < b.length; offset++) { + int i = b[offset]; + if (i < 0) { + i += 256; + } + if (i < 16) { + buf.append("0"); + } + buf.append(Integer.toHexString(i)); + } + return buf.toString(); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + return ""; + } + } +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java index 534d21c..edbf719 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java @@ -214,7 +214,7 @@ String urlNameString = url + "?" + param; try { - log.info("sendSSLPost - {}", urlNameString); +// log.info("sendSSLPost - {}", urlNameString); SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom()); URL console = new URL(urlNameString); @@ -240,25 +240,26 @@ result.append(new String(ret.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8)); } } - log.info("recv - {}", result); +// log.info("recv - {}", result); conn.disconnect(); br.close(); } catch (ConnectException e) { - log.error("璋冪敤HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e); +// log.error("璋冪敤HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e); } catch (SocketTimeoutException e) { - log.error("璋冪敤HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e); +// log.error("璋冪敤HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e); } catch (IOException e) { - log.error("璋冪敤HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e); +// log.error("璋冪敤HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e); } catch (Exception e) { - log.error("璋冪敤HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e); + +// log.error("璋冪敤HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e); } return result.toString(); } diff --git a/ruoyi-system/pom.xml b/ruoyi-system/pom.xml index 44b16f5..f38f016 100644 --- a/ruoyi-system/pom.xml +++ b/ruoyi-system/pom.xml @@ -32,6 +32,12 @@ <artifactId>lombok</artifactId> <scope>provided</scope> </dependency> + <!-- FastJSON --> + <dependency> + <groupId>com.alibaba</groupId> + <artifactId>fastjson</artifactId> + <version>1.2.83</version> + </dependency> </dependencies> diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/config/GpsServiceConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/config/GpsServiceConfig.java new file mode 100644 index 0000000..9b708f9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/config/GpsServiceConfig.java @@ -0,0 +1,39 @@ +package com.ruoyi.system.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * GPS鏈嶅姟閰嶇疆 + */ +@Component +@ConfigurationProperties(prefix = "gps.service") +public class GpsServiceConfig { + private String domain; + private String username; + private String password; + + public String getDomain() { + return domain; + } + + public void setDomain(String domain) { + this.domain = domain; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsLoginRequest.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsLoginRequest.java new file mode 100644 index 0000000..55097cb --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsLoginRequest.java @@ -0,0 +1,63 @@ +package com.ruoyi.system.domain; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * GPS鐧诲綍璇锋眰瀹炰綋 + */ +public class GpsLoginRequest { + @JsonProperty("username") + private String username; + + @JsonProperty("password") + private String password; + + @JsonProperty("from") + private String from; + + @JsonProperty("type") + private String type; + + @JsonProperty("browser") + private String browser; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getBrowser() { + return browser; + } + + public void setBrowser(String browser) { + this.browser = browser; + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsLoginResponse.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsLoginResponse.java new file mode 100644 index 0000000..14c66b3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsLoginResponse.java @@ -0,0 +1,24 @@ +package com.ruoyi.system.domain; + +import lombok.Data; + +/** + * GPS鐧诲綍鍝嶅簲 + */ +@Data +public class GpsLoginResponse { + /** + * 鏄惁鎴愬姛 + */ + private boolean success; + + /** + * 娑堟伅 + */ + private String message; + + /** + * Token + */ + private String token; +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IGpsCollectService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IGpsCollectService.java new file mode 100644 index 0000000..33359e8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IGpsCollectService.java @@ -0,0 +1,16 @@ +package com.ruoyi.system.service; + +import com.ruoyi.system.domain.GpsLoginRequest; +import com.ruoyi.system.domain.GpsLoginResponse; + +/** + * GPS閲囬泦鏈嶅姟鎺ュ彛 + */ +public interface IGpsCollectService { + /** + * GPS鐧诲綍 + * @param request 鐧诲綍璇锋眰 + * @return 鐧诲綍鍝嶅簲 + */ + GpsLoginResponse login(GpsLoginRequest request); +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/GpsCollectServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/GpsCollectServiceImpl.java new file mode 100644 index 0000000..9cc92ea --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/GpsCollectServiceImpl.java @@ -0,0 +1,144 @@ +package com.ruoyi.system.service.impl; + +import com.ruoyi.common.utils.http.HttpUtils; +import com.ruoyi.system.domain.GpsLoginRequest; +import com.ruoyi.system.domain.GpsLoginResponse; +import com.ruoyi.system.service.IGpsCollectService; +import com.ruoyi.system.config.GpsServiceConfig; +import com.ruoyi.common.utils.MD5Util; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import java.util.HashMap; +import java.util.Map; +import org.springframework.util.StringUtils; +import com.ruoyi.common.utils.HttpUtil; +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.common.exception.ServiceException; + +/** + * GPS閲囬泦鏈嶅姟瀹炵幇 + */ +@Service +public class GpsCollectServiceImpl implements IGpsCollectService { + + private final RestTemplate restTemplate; + private final GpsServiceConfig gpsServiceConfig; + + public GpsCollectServiceImpl(GpsServiceConfig gpsServiceConfig) { + this.restTemplate = new RestTemplate(); + this.gpsServiceConfig = gpsServiceConfig; + } + + @Override + public GpsLoginResponse login(GpsLoginRequest request) { + // 鍙傛暟鏍¢獙 + if (StringUtils.isEmpty(request.getType()) || StringUtils.isEmpty(request.getFrom())) { + throw new ServiceException("鍙傛暟涓嶈兘涓虹┖"); + } + + // 鏋勫缓璇锋眰URL + String url = gpsServiceConfig.getDomain() + "/webapi?action=login"; + + // 璁剧疆璇锋眰鍙傛暟 + Map<String, String> params = new HashMap<>(); + params.put("username", gpsServiceConfig.getUsername()); + params.put("password", MD5Util.md5(gpsServiceConfig.getPassword())); + params.put("type", request.getType()); + params.put("from", request.getFrom()); + params.put("browser", request.getBrowser()); + + StringBuilder paramStr = new StringBuilder(); + for (Map.Entry<String, String> entry : params.entrySet()) { + if (paramStr.length() > 0) { + paramStr.append("&"); + } + paramStr.append(entry.getKey()).append("=").append(entry.getValue()); + } + + // 鍙戦�佽姹� + String response = HttpUtil.post(url,params); + + // 瑙f瀽鍝嶅簲 + GpsLoginResponse loginResponse = new GpsLoginResponse(); + try { + JSONObject jsonResponse = JSONObject.parseObject(response); + int status = jsonResponse.getIntValue("status"); + String username = jsonResponse.getString("username"); + + // 鏍规嵁杩斿洖鐮佽缃搷搴斾俊鎭� + switch (status) { + case 0: + loginResponse.setSuccess(true); + loginResponse.setMessage("鐧诲綍鎴愬姛"); + loginResponse.setToken(jsonResponse.getString("token")); + break; + case -1: + loginResponse.setSuccess(false); + loginResponse.setMessage("鐧诲綍澶辫触"); + break; + case 1: + loginResponse.setSuccess(false); + loginResponse.setMessage("瀵嗙爜閿欒"); + break; + case 2: + loginResponse.setSuccess(false); + loginResponse.setMessage("绂佹鐧诲綍"); + break; + case 3: + loginResponse.setSuccess(false); + loginResponse.setMessage("璐﹀彿宸茬鐢�"); + break; + case 4: + loginResponse.setSuccess(false); + loginResponse.setMessage("璁惧鍒版湡"); + break; + case 5: + loginResponse.setSuccess(false); + loginResponse.setMessage("璁惧杩囨湡"); + break; + case 9903: + loginResponse.setSuccess(false); + loginResponse.setMessage("Token杩囨湡"); + break; + case 9906: + loginResponse.setSuccess(false); + loginResponse.setMessage("璐﹀彿鍦ㄥ叾浠栧湴鏂圭櫥褰�"); + break; + default: + loginResponse.setSuccess(false); + loginResponse.setMessage("鏈煡閿欒"); + break; + } + } catch (Exception e) { + loginResponse.setSuccess(false); + loginResponse.setMessage("瑙f瀽鍝嶅簲澶辫触锛�" + e.getMessage()); + } + + return loginResponse; + } + + /** + * 鏍¢獙鐧诲綍鏉ユ簮 + */ + private boolean isValidFrom(String from) { + if (from == null) { + return false; + } + return "ANDROID".equals(from) || "IPHONE".equals(from) || + "WEB".equals(from) || "WEIXIN".equals(from); + } + + /** + * 鏍¢獙鐧诲綍绫诲瀷 + */ + private boolean isValidType(String type) { + if (type == null) { + return false; + } + return "USER".equals(type) || "DEVICE".equals(type); + } +} \ No newline at end of file -- Gitblit v1.9.1