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