This commit is contained in:
parent
b021366642
commit
1122f50f9e
|
@ -32,5 +32,5 @@ build/
|
|||
### VS Code ###
|
||||
.vscode/
|
||||
|
||||
src/resource/application.properties
|
||||
application.properties
|
||||
|
||||
|
|
16
pom.xml
16
pom.xml
|
@ -40,11 +40,21 @@
|
|||
<artifactId>lombok</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-all</artifactId>
|
||||
<version>5.8.27</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents.client5</groupId>
|
||||
<artifactId>httpclient5</artifactId>
|
||||
<version>5.3.1</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
package com.dengqn.igps2xingzhe.config;
|
||||
|
||||
import org.apache.hc.client5.http.classic.HttpClient;
|
||||
import org.apache.hc.client5.http.cookie.BasicCookieStore;
|
||||
import org.apache.hc.client5.http.cookie.CookieStore;
|
||||
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
|
||||
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
|
||||
import org.apache.hc.client5.http.impl.classic.MinimalHttpClient;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @author dengqn
|
||||
* @since 2024/7/20 15:22
|
||||
*/
|
||||
@Component
|
||||
public class HttpClientConfig {
|
||||
@Autowired
|
||||
private IGPSport iGPSport;
|
||||
@Autowired
|
||||
private XingZhe xingZhe;
|
||||
|
||||
@Bean
|
||||
public CookieStore cookieStore() {
|
||||
return new BasicCookieStore();
|
||||
}
|
||||
|
||||
|
||||
@Bean
|
||||
public HttpClient httpClient(CookieStore cookieStore) {
|
||||
return HttpClientBuilder.create()
|
||||
.setDefaultCookieStore(cookieStore)
|
||||
.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36")
|
||||
.build();
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -4,6 +4,8 @@ import lombok.AllArgsConstructor;
|
|||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
|
@ -15,6 +17,8 @@ import java.io.Serializable;
|
|||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Configuration
|
||||
@ConfigurationProperties(prefix = "user.igps")
|
||||
public class IGPSport implements Serializable {
|
||||
private static final long serialVersionUID = 3004387713475397922L;
|
||||
|
||||
|
|
|
@ -4,6 +4,8 @@ import lombok.AllArgsConstructor;
|
|||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
|
@ -15,6 +17,8 @@ import java.io.Serializable;
|
|||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Configuration
|
||||
@ConfigurationProperties(prefix = "user.xingzhe")
|
||||
public class XingZhe implements Serializable {
|
||||
private static final long serialVersionUID = 2522264649038579098L;
|
||||
|
||||
|
|
|
@ -1,23 +1,88 @@
|
|||
package com.dengqn.igps2xingzhe.controller;
|
||||
|
||||
import cn.hutool.crypto.KeyUtil;
|
||||
import cn.hutool.crypto.SecureUtil;
|
||||
import cn.hutool.crypto.asymmetric.AsymmetricAlgorithm;
|
||||
import cn.hutool.crypto.asymmetric.KeyType;
|
||||
import cn.hutool.crypto.asymmetric.RSA;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.dengqn.igps2xingzhe.config.XingZhe;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.catalina.security.SecurityUtil;
|
||||
import org.apache.hc.client5.http.classic.HttpClient;
|
||||
import org.apache.hc.client5.http.cookie.Cookie;
|
||||
import org.apache.hc.client5.http.cookie.CookieStore;
|
||||
import org.apache.hc.core5.http.ContentType;
|
||||
import org.apache.hc.core5.http.HttpResponse;
|
||||
import org.apache.hc.core5.http.io.entity.BasicHttpEntity;
|
||||
import org.apache.hc.core5.http.io.support.ClassicRequestBuilder;
|
||||
import org.apache.hc.core5.http.message.BasicHttpResponse;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.KeyFactory;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.PublicKey;
|
||||
import java.security.spec.InvalidKeySpecException;
|
||||
import java.security.spec.RSAPublicKeySpec;
|
||||
import java.security.spec.X509EncodedKeySpec;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 同步
|
||||
*
|
||||
* @author dengqn
|
||||
* @since 2024/7/20 11:21
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("/api/trigger")
|
||||
public class Trigger {
|
||||
|
||||
@Autowired
|
||||
private HttpClient httpClient;
|
||||
@Autowired
|
||||
private CookieStore cookieStore;
|
||||
|
||||
|
||||
@Autowired
|
||||
private XingZhe xingZhe;
|
||||
|
||||
@GetMapping("/sync/igps2xingzhe")
|
||||
public ResponseEntity<String> onSyncIGPS2XingZhe() {
|
||||
public ResponseEntity<String> onSyncIGPS2XingZhe() throws IOException, NoSuchAlgorithmException, InvalidKeySpecException {
|
||||
|
||||
// 1、获取行者平台的cookie
|
||||
HttpResponse executed = httpClient.execute(ClassicRequestBuilder.get("https://www.imxingzhe.com/user/login").build());
|
||||
System.out.println(executed.getCode());
|
||||
// 2、计算加密后的密码参数
|
||||
|
||||
RSA rsa = new RSA(AsymmetricAlgorithm.RSA_ECB_PKCS1.getValue(), null, xingZhe.getPubKey());
|
||||
String rd = cookieStore.getCookies()
|
||||
.stream().filter(a -> a.getName().equals("rd")).findFirst()
|
||||
.map(Cookie::getValue).orElse("");
|
||||
String encryptBase64 = rsa.encryptBase64(xingZhe.getPassword() + ";" + rd, KeyType.PublicKey);
|
||||
|
||||
Map<String, Object> loginData = new HashMap<>();
|
||||
loginData.put("account", xingZhe.getUsername());
|
||||
loginData.put("password", encryptBase64);
|
||||
loginData.put("source", "web");
|
||||
|
||||
BasicHttpResponse response = (BasicHttpResponse) httpClient.execute(ClassicRequestBuilder
|
||||
.post("https://www.imxingzhe.com/api/v4/account/login")
|
||||
.setEntity(JSONUtil.toJsonPrettyStr(loginData), ContentType.APPLICATION_JSON)
|
||||
.build());
|
||||
log.info("xingzhe login: {}", response);
|
||||
|
||||
return ResponseEntity.ok("ok");
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -2,10 +2,12 @@ spring.application.name=igps2xingzhe
|
|||
|
||||
server.port=18877
|
||||
|
||||
data: E:\\temp
|
||||
|
||||
user.xingzhe.username: xxx
|
||||
user.xingzhe.password: xxx
|
||||
user.xingzhe.pubKey: xxx
|
||||
# 固定公钥
|
||||
user.xingzhe.pubKey: "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDmuQkBbijudDAJgfffDeeIButqWHZvUwcRuvWdg89393FSdz3IJUHc0rgI/S3WuU8N0VePJLmVAZtCOK4qe4FY/eKmWpJmn7JfXB4HTMWjPVoyRZmSYjW4L8GrWmh51Qj7DwpTADadF3aq04o+s1b8LXJa8r6+TIqqL5WUHtRqmQIDAQAB"
|
||||
|
||||
user.igps.username: xxx
|
||||
user.igps.password: xxx
|
||||
|
|
Loading…
Reference in New Issue