Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
B
bme-access-guangdong-upload
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
李洪明
bme-access-guangdong-upload
Commits
dc559b81
Commit
dc559b81
authored
Dec 18, 2025
by
李洪明
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加登录鉴权接口
parent
efbab37f
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
266 additions
and
3 deletions
+266
-3
pom.xml
pom.xml
+6
-0
HttpUtils.java
src/main/java/com/bme/access/guangdong/common/HttpUtils.java
+101
-0
HeartbeatJob.java
src/main/java/com/bme/access/guangdong/job/HeartbeatJob.java
+12
-0
UploadDataTask.java
...ain/java/com/bme/access/guangdong/job/UploadDataTask.java
+2
-3
LoginResult.java
...main/java/com/bme/access/guangdong/model/LoginResult.java
+15
-0
LoginService.java
...n/java/com/bme/access/guangdong/service/LoginService.java
+118
-0
TestController.java
...ain/java/com/bme/access/guangdong/web/TestController.java
+12
-0
No files found.
pom.xml
View file @
dc559b81
...
...
@@ -157,6 +157,12 @@
<artifactId>
alibaba-dingtalk-service-sdk
</artifactId>
<version>
2.0.0
</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>
org.json
</groupId>
<artifactId>
json
</artifactId>
<version>
20250517
</version>
</dependency>
<dependency>
<groupId>
junit
</groupId>
<artifactId>
junit
</artifactId>
...
...
src/main/java/com/bme/access/guangdong/common/HttpUtils.java
View file @
dc559b81
...
...
@@ -2,6 +2,16 @@ package com.bme.access.guangdong.common;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.serializer.SerializerFeature
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.http.HttpResponse
;
import
org.apache.http.client.HttpClient
;
import
org.apache.http.client.methods.HttpPost
;
import
org.apache.http.conn.ClientConnectionManager
;
import
org.apache.http.conn.scheme.Scheme
;
import
org.apache.http.conn.scheme.SchemeRegistry
;
import
org.apache.http.conn.ssl.SSLSocketFactory
;
import
org.apache.http.entity.StringEntity
;
import
org.apache.http.impl.client.DefaultHttpClient
;
import
org.springframework.http.HttpEntity
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.http.HttpMethod
;
...
...
@@ -9,10 +19,19 @@ import org.springframework.http.ResponseEntity;
import
org.springframework.http.converter.StringHttpMessageConverter
;
import
org.springframework.web.client.RestTemplate
;
import
javax.net.ssl.SSLContext
;
import
javax.net.ssl.TrustManager
;
import
javax.net.ssl.X509TrustManager
;
import
java.io.UnsupportedEncodingException
;
import
java.net.URLEncoder
;
import
java.nio.charset.StandardCharsets
;
import
java.security.KeyManagementException
;
import
java.security.MessageDigest
;
import
java.security.NoSuchAlgorithmException
;
import
java.security.cert.X509Certificate
;
import
java.util.Base64
;
import
java.util.HashMap
;
import
java.util.Map
;
public
class
HttpUtils
{
...
...
@@ -110,4 +129,86 @@ public class HttpUtils {
byte
[]
encodedBytes
=
Base64
.
getEncoder
().
encode
(
input
.
getBytes
());
return
new
String
(
encodedBytes
);
}
public
static
HttpResponse
sendPost
(
String
host
,
String
path
,
Map
<
String
,
String
>
querys
,
String
bodyJson
)
throws
Exception
{
HttpClient
httpClient
=
wrapClient
(
host
);
HttpPost
request
=
new
HttpPost
(
buildUrl
(
host
,
path
,
querys
));
Map
<
String
,
String
>
headers
=
new
HashMap
<>();
headers
.
put
(
"Content-Type"
,
"application/json"
);
for
(
Map
.
Entry
<
String
,
String
>
e
:
headers
.
entrySet
())
{
request
.
addHeader
(
e
.
getKey
(),
e
.
getValue
());
}
if
(
bodyJson
!=
null
)
{
StringEntity
entity
=
new
StringEntity
(
bodyJson
,
"UTF-8"
);
request
.
setEntity
(
entity
);
}
return
httpClient
.
execute
(
request
);
}
private
static
HttpClient
wrapClient
(
String
host
)
{
HttpClient
httpClient
=
new
DefaultHttpClient
();
if
(
host
.
startsWith
(
"https://"
))
{
sslClient
(
httpClient
);
}
return
httpClient
;
}
private
static
void
sslClient
(
HttpClient
httpClient
)
{
try
{
SSLContext
ctx
=
SSLContext
.
getInstance
(
"TLS"
);
X509TrustManager
tm
=
new
X509TrustManager
()
{
public
X509Certificate
[]
getAcceptedIssuers
()
{
return
null
;
}
public
void
checkClientTrusted
(
X509Certificate
[]
xcs
,
String
str
)
{
}
public
void
checkServerTrusted
(
X509Certificate
[]
xcs
,
String
str
)
{
}
};
ctx
.
init
(
null
,
new
TrustManager
[]
{
tm
},
null
);
SSLSocketFactory
ssf
=
new
SSLSocketFactory
(
ctx
);
ssf
.
setHostnameVerifier
(
SSLSocketFactory
.
ALLOW_ALL_HOSTNAME_VERIFIER
);
ClientConnectionManager
ccm
=
httpClient
.
getConnectionManager
();
SchemeRegistry
registry
=
ccm
.
getSchemeRegistry
();
registry
.
register
(
new
Scheme
(
"https"
,
443
,
ssf
));
}
catch
(
KeyManagementException
ex
)
{
throw
new
RuntimeException
(
ex
);
}
catch
(
NoSuchAlgorithmException
ex
)
{
throw
new
RuntimeException
(
ex
);
}
}
private
static
String
buildUrl
(
String
host
,
String
path
,
Map
<
String
,
String
>
querys
)
throws
UnsupportedEncodingException
{
StringBuilder
sbUrl
=
new
StringBuilder
();
sbUrl
.
append
(
host
);
if
(!
StringUtils
.
isBlank
(
path
))
{
sbUrl
.
append
(
path
);
}
if
(
null
!=
querys
)
{
StringBuilder
sbQuery
=
new
StringBuilder
();
for
(
Map
.
Entry
<
String
,
String
>
query
:
querys
.
entrySet
())
{
if
(
0
<
sbQuery
.
length
())
{
sbQuery
.
append
(
"&"
);
}
if
(
StringUtils
.
isBlank
(
query
.
getKey
())
&&
!
StringUtils
.
isBlank
(
query
.
getValue
()))
{
sbQuery
.
append
(
query
.
getValue
());
}
if
(!
StringUtils
.
isBlank
(
query
.
getKey
()))
{
sbQuery
.
append
(
query
.
getKey
());
if
(!
StringUtils
.
isBlank
(
query
.
getValue
()))
{
sbQuery
.
append
(
"="
);
sbQuery
.
append
(
URLEncoder
.
encode
(
query
.
getValue
(),
"utf-8"
));
}
}
}
if
(
0
<
sbQuery
.
length
())
{
sbUrl
.
append
(
"?"
).
append
(
sbQuery
);
}
}
return
sbUrl
.
toString
();
}
}
src/main/java/com/bme/access/guangdong/job/HeartbeatJob.java
0 → 100644
View file @
dc559b81
package
com
.
bme
.
access
.
guangdong
.
job
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.scheduling.annotation.EnableScheduling
;
import
org.springframework.stereotype.Component
;
@Component
@EnableScheduling
@Slf4j
public
class
HeartbeatJob
{
}
src/main/java/com/bme/access/guangdong/job/UploadDataTask.java
View file @
dc559b81
...
...
@@ -5,7 +5,6 @@ import com.bme.access.guangdong.service.InFactoryVehicleInfoService;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.scheduling.annotation.EnableScheduling
;
import
org.springframework.scheduling.annotation.Scheduled
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.Resource
;
...
...
@@ -23,7 +22,7 @@ public class UploadDataTask {
/**
* 上传企业信息
*/
@Scheduled
(
cron
=
"0 0/1 * * * *"
)
//
@Scheduled(cron = "0 0/1 * * * *")
public
void
uploadEnterpriseInfo
()
{
log
.
info
(
"上传企业信息"
);
try
{
...
...
@@ -36,7 +35,7 @@ public class UploadDataTask {
/**
* 上传厂内车辆信息
*/
@Scheduled
(
cron
=
"0 0/1 * * * *"
)
//
@Scheduled(cron = "0 0/1 * * * *")
public
void
uploadInFactoryVehicleInfo
()
{
log
.
info
(
"上传厂内车辆信息"
);
try
{
...
...
src/main/java/com/bme/access/guangdong/model/LoginResult.java
0 → 100644
View file @
dc559b81
package
com
.
bme
.
access
.
guangdong
.
model
;
import
lombok.Data
;
@Data
public
class
LoginResult
{
private
Integer
code
;
private
LoginData
data
;
public
class
LoginData
{
private
String
access_token
;
private
Integer
expires_in
;
private
String
aes_secret
;
}
}
src/main/java/com/bme/access/guangdong/service/LoginService.java
0 → 100644
View file @
dc559b81
package
com
.
bme
.
access
.
guangdong
.
service
;
import
com.alibaba.fastjson.JSON
;
import
com.bme.access.guangdong.common.HttpUtils
;
import
com.bme.access.guangdong.model.LoginResult
;
import
org.apache.http.HttpResponse
;
import
org.apache.http.util.EntityUtils
;
import
org.json.JSONObject
;
import
org.springframework.stereotype.Service
;
import
javax.crypto.Cipher
;
import
java.security.KeyFactory
;
import
java.security.MessageDigest
;
import
java.security.NoSuchAlgorithmException
;
import
java.security.PrivateKey
;
import
java.security.spec.PKCS8EncodedKeySpec
;
import
java.util.Base64
;
import
java.util.Map
;
import
java.util.TreeMap
;
@Service
public
class
LoginService
{
private
static
String
appId
=
"mj441323gdzhgt$w_8kc_0uf"
;
private
static
String
secret
=
"pBukGgdLKVjKGp-8wbmJfOqX1S5ibTMW"
;
private
static
String
path
=
"/api/qymj/login"
;
private
static
String
host
=
"http://113.96.111.154:18830"
;
public
LoginResult
login
()
{
LoginResult
loginResult
=
new
LoginResult
();
String
se
=
encryptWithPrivateKey
(
secret
);
String
jsonData
=
"{\"APPID\": \""
+
appId
+
"\", \"SECRET\": \""
+
secret
+
"\"}"
;
String
sign
=
getSign
(
jsonData
);
String
body
=
"{\"APPID\": \""
+
appId
+
"\", \"SECRET\": \""
+
se
+
"\", \"SIGN\": \""
+
sign
+
"\"}"
;
try
{
HttpResponse
response
=
HttpUtils
.
sendPost
(
host
,
path
,
null
,
body
);
String
result
=
EntityUtils
.
toString
(
response
.
getEntity
());
loginResult
=
JSON
.
parseObject
(
result
,
LoginResult
.
class
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
loginResult
;
}
private
String
getSign
(
String
jsonStr
)
{
JSONObject
jsonObj
=
new
JSONObject
(
jsonStr
);
Map
<
String
,
Object
>
sortedMap
=
new
TreeMap
<>(
jsonObj
.
toMap
());
// 使用TreeMap自动排序键值对
String
sortedJsonStr
=
new
JSONObject
(
sortedMap
).
toString
();
// 将排序后的Map转换回JSON字符串
try
{
MessageDigest
digest
=
MessageDigest
.
getInstance
(
"SHA-256"
);
byte
[]
encodedhash
=
digest
.
digest
(
sortedJsonStr
.
getBytes
());
// 生成哈希值字节数组
String
sha256hex
=
bytesToHex
(
encodedhash
);
// 将字节数组转换为十六进制字符串
// System.out.println(sha256hex); // 输出哈希值
return
encryptWithPrivateKey
(
sha256hex
);
}
catch
(
NoSuchAlgorithmException
e
)
{
e
.
printStackTrace
();
}
return
""
;
}
private
static
String
bytesToHex
(
byte
[]
bytes
)
{
StringBuilder
sb
=
new
StringBuilder
();
for
(
int
i
=
0
;
i
<
bytes
.
length
;
i
++)
{
sb
.
append
(
String
.
format
(
"%02x"
,
bytes
[
i
]));
}
return
sb
.
toString
();
}
private
static
String
encryptWithPrivateKey
(
String
plainText
)
{
String
privateKeyPEM
=
"-----BEGIN PRIVATE KEY-----\n"
+
"MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDhyADfLz7QruMO\n"
+
"LlSuGo8LGXdOanh06mGVwi8KmTURBwZU2jd9iritYExOW54BuTuYiKZaLn8N9zoM\n"
+
"cQzn4OANTh//3kpqpcNvyyZ5gssRamIM707m0tvC06Rw029vfqwYUFagigNChdF9\n"
+
"KaKbvkMFBvyMyu/QIz+ESp2YEeauwX1g24Ccnyqda1O914z2oBcQXmBsZEjKR+nw\n"
+
"1/RjHeyc9fUecY3lIKMN9R/nSdD0rTGDMnKabl0l28XS89fogy9UWX9Ejx9k91/v\n"
+
"ciQAzYZBD7zdfK+9y8Z4UNRl8/3sDtCxpO+nkmuMSL1TYJfBjelJfFvmPaxx98CG\n"
+
"wNXAp1SVAgMBAAECggEAXZpvUhfiMN3wYBaxIKT+HJnoLmhRnBb3cgDZQ8mUiISj\n"
+
"CVaWnsN+INLFj87HyOskW+57GPQh1IZkWHgd45wFBz8WYRulOmWSiqxsPQAOdB/o\n"
+
"mngz+9n7JeBcUjI2BsE7U7Eq2M+e3ltgKEW0lmDgpBrrZOtVVLLoSE4u27bALj5d\n"
+
"uBNLflc+qByjcaM2Xvi+IXcvmdDo+e4DT8T/0PXoPbUdq2QUe4Qwc173xouQ1w1y\n"
+
"/zEB0Bk4gFJ6ZJhbu2ekASaeTbboO7t4YAOseKFKHdvksBpu/h74OXvKsBbsuFps\n"
+
"kZAmFfR5CbvWv/GyXetNS54xXiykBumZVksMva/7GQKBgQD+GVXGepjawLKW8d3l\n"
+
"4ZJGr/7kHENEc9jyTVYue6YI67/zZ6BfuQVBQnNRBnKRCBel9XoGadvb54FV40sl\n"
+
"F6ezCYtqB7SE4Q2Vdj/UgTdB1H3f9VAVAGmK7sk235anseYayIuQcJ2C5jxTHzMA\n"
+
"UnRjqhy9BCKUdYTLhgdO4uYakwKBgQDjeG7CinjDTvs5cwYb0i8QVQQswv/EoszW\n"
+
"iAKYwOpbeGbDRzRgxehtY2qjPUwXGf8I/oDqqY/Xl69XziphyZuz/RD8RA9UmMuo\n"
+
"aGMOY2+Sp6WH/pahjmLoX3zo/1lHFUnsp0Tn1cCgE8VKt45yyRDJHT1QkBOSqrS4\n"
+
"qhMtpnpFNwKBgC5204iHwou90OppL/ppVSY36JQt1t8dj/4+xhOZ6LKY6XDI8jqO\n"
+
"yrc0P4IBe9GpeSmPydCCawG7Q5tBBOyzdqb2h9fLsObbgHBkPyfMuR4AjUP2x74P\n"
+
"ZT1SjNjL6fCgR0N+iIbREPxuvXk1q03TxhSzdq3Zo7kiBDZzO8LhGtKhAoGATXkq\n"
+
"OCYTZWnUFMgBT55xmx1pk5lCpYVRQMwIHmCuMUM7tMzeoQsm04Llwf1RmhinjTep\n"
+
"TsM7k5E9DinQs4eH+XB6xYCkvApiatRK0I67ZHam4T+rrBCjzUMgdvbpQFWW3PxH\n"
+
"crKRrbOuIXmNEbk7d1P3GyZHFFABx1ddutGVmVcCgYAPkLeLXQ9tX/QHoR9V0I8T\n"
+
"mFOTlAjAsRk9XRq3bgzdhps3J2+SO0WY4PjHtpMsQxUtfVar0VXQjVM4OOE6hZqt\n"
+
"vzkRDT8rANRvF1plDLUR2Yyd8APsRD843dBByAuKzxVhS4DkVU0uCi3wizsJ5YiL\n"
+
"Ub0o3BeLfLrS2ja3ihcwBA==\n"
+
"-----END PRIVATE KEY-----\n"
;
// 移除PEM头尾并解码Base64
String
privateKeyContent
=
privateKeyPEM
.
replace
(
"-----BEGIN PRIVATE KEY-----"
,
""
)
.
replace
(
"-----END PRIVATE KEY-----"
,
""
)
.
replaceAll
(
"\\s"
,
""
);
// 移除所有空白字符,包括换行符和空格
byte
[]
keyBytes
=
Base64
.
getDecoder
().
decode
(
privateKeyContent
);
try
{
KeyFactory
keyFactory
=
KeyFactory
.
getInstance
(
"RSA"
);
PKCS8EncodedKeySpec
keySpec
=
new
PKCS8EncodedKeySpec
(
keyBytes
);
PrivateKey
privateKey
=
keyFactory
.
generatePrivate
(
keySpec
);
Cipher
cipher
=
Cipher
.
getInstance
(
"RSA/ECB/PKCS1Padding"
);
// 使用PKCS#1填充模式
cipher
.
init
(
Cipher
.
ENCRYPT_MODE
,
privateKey
);
byte
[]
encryptedBytes
=
cipher
.
doFinal
(
plainText
.
getBytes
());
return
Base64
.
getEncoder
().
encodeToString
(
encryptedBytes
);
// 返回Base64编码的字符串,便于查看和传输
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
""
;
}
}
src/main/java/com/bme/access/guangdong/web/TestController.java
View file @
dc559b81
...
...
@@ -2,7 +2,10 @@ package com.bme.access.guangdong.web;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.serializer.SerializerFeature
;
import
com.bme.access.guangdong.model.LoginResult
;
import
com.bme.access.guangdong.service.LoginService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.HttpEntity
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.http.HttpMethod
;
...
...
@@ -28,6 +31,15 @@ public class TestController {
private
static
final
String
USERPWD
=
""
;
private
static
final
String
ACTKEY
=
""
;
@Autowired
private
LoginService
loginService
;
@GetMapping
(
"/test"
)
public
String
test
()
{
LoginResult
result
=
loginService
.
login
();
return
""
;
}
@GetMapping
(
"/uploadInfo"
)
public
String
uploadInfo
(
@RequestParam
(
"method"
)
String
method
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment