Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
GeoFlyApi
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
RTFly
GeoFlyApi
Commits
b80788ce
Commit
b80788ce
authored
Dec 25, 2025
by
gdj
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加ufile验证
parent
ab5a23e4
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
189 additions
and
0 deletions
+189
-0
sample/src/main/java/com/dji/sample/CloudApiSampleApplication.java
+7
-0
sample/src/main/java/com/dji/sample/common/util/CommonUtil.java
+177
-0
sample/src/main/java/com/dji/sample/manage/controller/DeviceController.java
+0
-0
sample/src/main/java/com/dji/sample/manage/controller/LoginController.java
+5
-0
No files found.
sample/src/main/java/com/dji/sample/CloudApiSampleApplication.java
View file @
b80788ce
package
com
.
dji
.
sample
;
import
com.dji.sample.common.util.CommonUtil
;
import
org.mybatis.spring.annotation.MapperScan
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
...
...
@@ -13,6 +14,12 @@ import org.springframework.scheduling.annotation.EnableScheduling;
public
class
CloudApiSampleApplication
{
public
static
void
main
(
String
[]
args
)
{
CommonUtil
.
InitAuth
();
if
(!
CommonUtil
.
isAuthValid
()){
throw
new
RuntimeException
(
"环境配置错误"
);
}
SpringApplication
.
run
(
CloudApiSampleApplication
.
class
,
args
);
}
...
...
sample/src/main/java/com/dji/sample/common/util/CommonUtil.java
0 → 100644
View file @
b80788ce
/*
* Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the dreamlu.net developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
package
com
.
dji
.
sample
.
common
.
util
;
import
org.springframework.boot.system.ApplicationHome
;
import
javax.crypto.Cipher
;
import
java.io.*
;
import
java.security.KeyFactory
;
import
java.security.PublicKey
;
import
java.security.spec.X509EncodedKeySpec
;
import
java.time.Duration
;
import
java.time.LocalDateTime
;
import
java.time.format.DateTimeFormatter
;
import
java.util.Base64
;
import
java.util.HashMap
;
/**
* 通用工具类
*
* @author Chill
*/
public
class
CommonUtil
{
private
static
HashMap
authItems
=
null
;
public
static
void
InitAuth
()
{
final
String
publicKeyStr
=
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVU5UPfDeNjolq0VH6oG+GXTdbJ3ZHdhybkv7URSu94DiqpW703SZmV6zpsNtnsBLeGk+k4ELVPcThDS9st/2Y+IkK0gshu4G7SqqusZhGj3c3BCT/0sDgHr84htl2WUZlY/WofajyKNMEPo/NFt5814os2gFvg8wV6gOj+2m/QQIDAQAB"
;
final
int
MAX_DECRYPT_BLOCK
=
128
;
try
{
// 现场环境
ApplicationHome
home
=
new
ApplicationHome
(
CommonUtil
.
class
);
String
jarPath
=
home
.
getSource
().
getParentFile
().
toString
();
// 现场环境
File
file
;
file
=
new
File
(
jarPath
+
File
.
separator
+
"ufile"
);
if
(!
file
.
exists
())
file
=
new
File
(
"C:/app/nginx/conf/ufile"
);
// 本机测试
// File file = new File("/Users/Ryan/ufile");
String
lic
=
null
;
if
(
file
.
isFile
()
&&
file
.
exists
())
{
FileInputStream
fileInputStream
=
null
;
InputStreamReader
inputStreamReader
=
null
;
BufferedReader
bufferedReader
=
null
;
try
{
fileInputStream
=
new
FileInputStream
(
file
);
inputStreamReader
=
new
InputStreamReader
(
fileInputStream
);
bufferedReader
=
new
BufferedReader
(
inputStreamReader
);
StringBuffer
sb
=
new
StringBuffer
();
String
text
;
while
((
text
=
bufferedReader
.
readLine
())
!=
null
){
sb
.
append
(
text
);
}
lic
=
sb
.
toString
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
finally
{
if
(
bufferedReader
!=
null
)
{
try
{
bufferedReader
.
close
();
}
catch
(
Exception
ex
)
{
ex
.
printStackTrace
();
}
}
if
(
inputStreamReader
!=
null
)
{
try
{
inputStreamReader
.
close
();
}
catch
(
Exception
ex
)
{
ex
.
printStackTrace
();
}
}
if
(
fileInputStream
!=
null
)
{
try
{
fileInputStream
.
close
();
}
catch
(
Exception
ex
)
{
ex
.
printStackTrace
();
}
}
}
}
if
(
lic
!=
null
&&
lic
.
length
()
>
0
)
{
KeyFactory
keyFactory
=
KeyFactory
.
getInstance
(
"RSA"
);
byte
[]
decodedKey
=
Base64
.
getDecoder
().
decode
(
publicKeyStr
);
X509EncodedKeySpec
keySpec
=
new
X509EncodedKeySpec
(
decodedKey
);
PublicKey
publicKey
=
keyFactory
.
generatePublic
(
keySpec
);
Cipher
cipher
=
Cipher
.
getInstance
(
"RSA"
);
cipher
.
init
(
Cipher
.
DECRYPT_MODE
,
publicKey
);
ByteArrayOutputStream
out
=
new
ByteArrayOutputStream
();
byte
[]
dataBytes
=
Base64
.
getDecoder
().
decode
(
lic
);
int
offset
=
0
,
i
=
0
,
inputLen
=
dataBytes
.
length
;
byte
[]
cache
;
// 对数据分段解密
while
(
inputLen
-
offset
>
0
)
{
if
(
inputLen
-
offset
>
MAX_DECRYPT_BLOCK
)
{
cache
=
cipher
.
doFinal
(
dataBytes
,
offset
,
MAX_DECRYPT_BLOCK
);
}
else
{
cache
=
cipher
.
doFinal
(
dataBytes
,
offset
,
inputLen
-
offset
);
}
out
.
write
(
cache
,
0
,
cache
.
length
);
i
++;
offset
=
i
*
MAX_DECRYPT_BLOCK
;
}
byte
[]
decryptedData
=
out
.
toByteArray
();
out
.
close
();
// 反序列化数据
ByteArrayInputStream
bis
=
null
;
ObjectInputStream
ois
=
null
;
try
{
bis
=
new
ByteArrayInputStream
(
decryptedData
);
ois
=
new
ObjectInputStream
(
bis
);
authItems
=
(
HashMap
)
ois
.
readObject
();
}
catch
(
Exception
ex
)
{
ex
.
printStackTrace
();
}
finally
{
if
(
ois
!=
null
)
{
try
{
ois
.
close
();
}
catch
(
Exception
ex
)
{
ex
.
printStackTrace
();
}
}
if
(
bis
!=
null
)
{
try
{
bis
.
close
();
}
catch
(
Exception
ex
)
{
ex
.
printStackTrace
();
}
}
}
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
public
static
boolean
isAuthValid
()
{
// return true;
try
{
if
(
authItems
!=
null
)
{
if
(
authItems
.
containsKey
(
"period"
))
{
String
period
=
(
String
)
authItems
.
get
(
"period"
);
if
(
period
.
equalsIgnoreCase
(
"infinite"
))
return
true
;
else
{
if
(!
period
.
contains
(
":"
))
period
=
period
+
" 23:59:59"
;
DateTimeFormatter
formatter
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
);
LocalDateTime
deadline
=
LocalDateTime
.
parse
(
period
,
formatter
);
Duration
duration
=
Duration
.
between
(
LocalDateTime
.
now
(),
deadline
);
if
(
duration
.
toMinutes
()
>
0
)
return
true
;
}
}
}
}
catch
(
Exception
ex
)
{
}
return
false
;
}
}
sample/src/main/java/com/dji/sample/manage/controller/DeviceController.java
View file @
b80788ce
This diff is collapsed.
Click to expand it.
sample/src/main/java/com/dji/sample/manage/controller/LoginController.java
View file @
b80788ce
package
com
.
dji
.
sample
.
manage
.
controller
;
import
com.dji.sample.common.error.CommonErrorEnum
;
import
com.dji.sample.common.util.CommonUtil
;
import
com.dji.sample.manage.model.dto.UserDTO
;
import
com.dji.sample.manage.model.dto.UserLoginDTO
;
import
com.dji.sample.manage.service.IUserService
;
...
...
@@ -25,6 +26,10 @@ public class LoginController {
@PostMapping
(
"/login"
)
public
HttpResultResponse
login
(
@RequestBody
UserLoginDTO
loginDTO
)
{
if
(!
CommonUtil
.
isAuthValid
()){
return
HttpResultResponse
.
error
(
"环境配置错误"
);
}
String
username
=
loginDTO
.
getUsername
();
String
password
=
loginDTO
.
getPassword
();
// return userService.userLogin(username, password, loginDTO.getFlag());
...
...
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