Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gic-cloud
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
data-hook
gic-cloud
Commits
182e1c5f
Commit
182e1c5f
authored
Oct 28, 2021
by
陶光胜
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
取数平台调整
parent
afdb14e0
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
104 additions
and
37 deletions
+104
-37
DecryptUtils.java
...in/java/com/gic/cloud/data/hook/service/DecryptUtils.java
+1
-1
FilterFieldUtils.java
...ava/com/gic/cloud/data/hook/service/FilterFieldUtils.java
+64
-0
CsvResultSetHelper.java
...ic/cloud/data/hook/service/entity/CsvResultSetHelper.java
+27
-17
DecryptKeyServiceImpl.java
...c/cloud/data/hook/service/impl/DecryptKeyServiceImpl.java
+1
-0
FlatQueryResultServiceImpl.java
...ud/data/hook/service/impl/FlatQueryResultServiceImpl.java
+6
-6
FreeQueryServiceImpl.java
...ic/cloud/data/hook/service/impl/FreeQueryServiceImpl.java
+5
-13
No files found.
gic-cloud-data-hook-service/src/main/java/com/gic/cloud/data/hook/service/DecryptUtils.java
View file @
182e1c5f
...
...
@@ -60,7 +60,7 @@ public class DecryptUtils {
}
for
(
FlatQueryCondition
condition
:
allFields
){
if
(
condition
.
getFieldMark
().
equals
(
columnName
)){
if
(
F
reeQueryServiceImpl
.
FILETERS_USER_NAME
.
contains
(
condition
.
getFieldName
())){
if
(
F
ilterFieldUtils
.
FILETERS_USER_NAME
.
contains
(
condition
.
getFieldName
())){
return
true
;
}
}
...
...
gic-cloud-data-hook-service/src/main/java/com/gic/cloud/data/hook/service/FilterFieldUtils.java
0 → 100644
View file @
182e1c5f
package
com
.
gic
.
cloud
.
data
.
hook
.
service
;
import
com.ctrip.framework.apollo.Config
;
import
com.ctrip.framework.apollo.ConfigService
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.concurrent.BasicThreadFactory
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.PostConstruct
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.concurrent.ScheduledExecutorService
;
import
java.util.concurrent.ScheduledThreadPoolExecutor
;
import
java.util.concurrent.TimeUnit
;
@Component
public
class
FilterFieldUtils
{
/** 脱敏字段 */
public
static
List
<
String
>
FILTERS_PHONE_ONLY
=
Arrays
.
asList
(
"mobile"
,
"phone"
,
"enterprise_name"
,
"phone_number"
,
"receive_phone_number"
,
"use_phone_number"
,
"friend_phone_num"
,
"from_phone_num"
);
/** 脱敏字段 */
public
static
List
<
String
>
FILTERS_PHONE_AND_CARD
=
Arrays
.
asList
(
"card_num"
,
"mobile"
,
"phone"
,
"enterprise_name"
,
"phone_number"
,
"receive_phone_number"
,
"receive_card_num"
,
"use_phone_number"
,
"use_card_num"
,
"friend_card_num"
,
"from_card_num"
,
"friend_phone_num"
,
"from_phone_num"
);
public
static
List
<
String
>
FILETERS_USER_NAME
=
Arrays
.
asList
(
"member_name"
,
"children_name"
,
"mbr_name"
,
"receive_member_name"
,
"use_member_name"
,
"name"
,
"bb_name"
,
"friend_mbr_name"
,
"from_mbr_name"
);
ScheduledExecutorService
timer
=
new
ScheduledThreadPoolExecutor
(
1
,
new
BasicThreadFactory
.
Builder
().
namingPattern
(
"loadFilterFieldTimer-%d"
).
daemon
(
true
).
build
());
@PostConstruct
public
void
init
(){
System
.
out
.
println
(
"初始化加密字段"
);
Config
config
=
ConfigService
.
getConfig
(
"application"
);
String
phoneNumberField
=
config
.
getProperty
(
"phoneNumberField"
,
""
);
String
cardNumField
=
config
.
getProperty
(
"cardNumField"
,
""
);
String
userNameField
=
config
.
getProperty
(
"userNameField"
,
""
);
if
(
StringUtils
.
isNotBlank
(
phoneNumberField
)){
FILTERS_PHONE_ONLY
=
Arrays
.
asList
(
phoneNumberField
.
split
(
","
));
FILTERS_PHONE_AND_CARD
=
new
ArrayList
<>();
for
(
String
s
:
phoneNumberField
.
split
(
","
)){
FILTERS_PHONE_AND_CARD
.
add
(
s
);
}
}
if
(
StringUtils
.
isNotBlank
(
cardNumField
)){
for
(
String
s
:
cardNumField
.
split
(
","
)){
FILTERS_PHONE_AND_CARD
.
add
(
s
);
}
}
if
(
StringUtils
.
isNotBlank
(
userNameField
)){
FILETERS_USER_NAME
=
Arrays
.
asList
(
userNameField
.
split
(
","
));
}
initTimer
();
}
private
void
initTimer
(){
timer
.
scheduleAtFixedRate
(
new
Runnable
()
{
@Override
public
void
run
()
{
System
.
out
.
println
(
"更新定时器"
);
init
();
}
},
5
,
5
,
TimeUnit
.
MINUTES
);
}
}
gic-cloud-data-hook-service/src/main/java/com/gic/cloud/data/hook/service/entity/CsvResultSetHelper.java
View file @
182e1c5f
package
com
.
gic
.
cloud
.
data
.
hook
.
service
.
entity
;
import
cn.hutool.core.codec.Base64
;
import
cn.hutool.core.util.CharsetUtil
;
import
cn.hutool.core.util.StrUtil
;
import
cn.hutool.crypto.SecureUtil
;
import
cn.hutool.crypto.asymmetric.KeyType
;
import
cn.hutool.crypto.asymmetric.RSA
;
import
com.alibaba.dubbo.common.utils.StringUtils
;
...
...
@@ -10,11 +14,13 @@ import com.gic.cloud.data.hook.api.dto.DhDecryptKey;
import
com.gic.cloud.data.hook.api.entity.FlatQueryCondition
;
import
com.gic.cloud.data.hook.api.service.DecryptKeyService
;
import
com.gic.cloud.data.hook.service.DecryptUtils
;
import
com.gic.cloud.data.hook.service.
impl.FreeQueryServiceImpl
;
import
com.gic.cloud.data.hook.service.
FilterFieldUtils
;
import
com.opencsv.ResultSetHelper
;
import
org.apache.commons.collections.CollectionUtils
;
import
java.io.IOException
;
import
java.io.UnsupportedEncodingException
;
import
java.security.KeyPair
;
import
java.sql.ResultSet
;
import
java.sql.ResultSetMetaData
;
import
java.sql.SQLException
;
...
...
@@ -41,6 +47,7 @@ public class CsvResultSetHelper implements ResultSetHelper {
private
String
publicKey
;
private
RSA
rsa
;
public
CsvResultSetHelper
(
String
filterMode
,
List
<
String
>
filters
,
List
<
FlatQueryCondition
>
allFields
,
String
enterpriseId
,
DecryptKeyService
decryptKeyService
)
{
this
.
filterMode
=
filterMode
;
...
...
@@ -62,6 +69,7 @@ public class CsvResultSetHelper implements ResultSetHelper {
publicKey
=
rsa
.
getPublicKeyBase64
();
}
else
{
publicKey
=
key
.
getPublicKey
();
rsa
=
new
RSA
(
key
.
getPrivateKey
(),
key
.
getPublicKey
());
}
}
}
...
...
@@ -79,7 +87,7 @@ public class CsvResultSetHelper implements ResultSetHelper {
}
if
(
needDecryptByEnt
){
//补齐加密字段
for
(
FlatQueryCondition
condition
:
allFields
){
if
(
F
reeQueryServiceImpl
.
FILTERS_PHONE_ONLY
.
contains
(
condition
.
getFieldName
())){
if
(
F
ilterFieldUtils
.
FILTERS_PHONE_ONLY
.
contains
(
condition
.
getFieldName
())){
list
.
add
(
condition
.
getFieldMark
());
}
}
...
...
@@ -125,7 +133,7 @@ public class CsvResultSetHelper implements ResultSetHelper {
if
(
allFields
!=
null
&&
isName
(
columnName
)){
doDesensi
=
true
;
}
if
(
allFields
==
null
&&
F
reeQueryServiceImpl
.
FILETERS_USER_NAME
.
contains
(
columnName
)){
if
(
allFields
==
null
&&
F
ilterFieldUtils
.
FILETERS_USER_NAME
.
contains
(
columnName
)){
doDesensi
=
true
;
}
}
else
if
(
this
.
filterMode
.
equals
(
CsvDataFilterMode
.
DECRYPT
))
{
// 如果需要解密
...
...
@@ -137,7 +145,7 @@ public class CsvResultSetHelper implements ResultSetHelper {
if
(
allFields
!=
null
&&
isName
(
columnName
)){
doDecrypt
=
true
;
}
if
(
allFields
==
null
&&
F
reeQueryServiceImpl
.
FILETERS_USER_NAME
.
contains
(
columnName
)){
if
(
allFields
==
null
&&
F
ilterFieldUtils
.
FILETERS_USER_NAME
.
contains
(
columnName
)){
doDecrypt
=
true
;
}
}
...
...
@@ -145,7 +153,7 @@ public class CsvResultSetHelper implements ResultSetHelper {
if
(
doDesensi
)
{
// 如果需要脱敏处理
if
(
allFields
!=
null
&&
isName
(
columnName
)){
result
.
add
(
DecryptUtils
.
dataSecurityProcessUserName
(
DecryptUtils
.
decrypt
(
resultSet
.
getString
(
columnName
))));
}
else
if
(
allFields
==
null
&&
F
reeQueryServiceImpl
.
FILETERS_USER_NAME
.
contains
(
columnName
))
{
}
else
if
(
allFields
==
null
&&
F
ilterFieldUtils
.
FILETERS_USER_NAME
.
contains
(
columnName
))
{
result
.
add
(
DecryptUtils
.
dataSecurityProcessUserName
(
resultSet
.
getString
(
columnName
)));
}
else
{
result
.
add
(
"******"
);
...
...
@@ -153,7 +161,9 @@ public class CsvResultSetHelper implements ResultSetHelper {
//导出数据中需要增加加密列,先解密再加密
String
value
=
DecryptUtils
.
getInstance
().
decrypt
(
resultSet
.
getString
(
columnName
));
if
(
org
.
apache
.
commons
.
lang3
.
StringUtils
.
isNotBlank
(
value
)){
decyptValue
.
add
(
new
String
(
rsa
.
encrypt
(
value
.
getBytes
(
"UTF-8"
),
KeyType
.
PublicKey
)));
byte
[]
bytes
=
rsa
.
encrypt
(
StrUtil
.
bytes
(
value
,
CharsetUtil
.
UTF_8
),
KeyType
.
PublicKey
);
String
encode
=
Base64
.
encode
(
bytes
);
decyptValue
.
add
(
encode
);
}
else
{
decyptValue
.
add
(
""
);
}
...
...
@@ -199,7 +209,7 @@ public class CsvResultSetHelper implements ResultSetHelper {
}
for
(
FlatQueryCondition
condition
:
allFields
){
if
(
condition
.
getFieldMark
().
equals
(
columnName
)){
if
(
F
reeQueryServiceImpl
.
FILETERS_USER_NAME
.
contains
(
condition
.
getFieldName
())){
if
(
F
ilterFieldUtils
.
FILETERS_USER_NAME
.
contains
(
condition
.
getFieldName
())){
return
true
;
}
}
...
...
@@ -213,7 +223,7 @@ public class CsvResultSetHelper implements ResultSetHelper {
}
for
(
FlatQueryCondition
condition
:
allFields
){
if
(
condition
.
getFieldMark
().
equals
(
columnName
)){
if
(
F
reeQueryServiceImpl
.
FILTERS_PHONE_ONLY
.
contains
(
condition
.
getFieldName
())){
if
(
F
ilterFieldUtils
.
FILTERS_PHONE_ONLY
.
contains
(
condition
.
getFieldName
())){
return
true
;
}
}
...
...
@@ -221,14 +231,14 @@ public class CsvResultSetHelper implements ResultSetHelper {
return
false
;
}
public
static
void
main
(
String
[]
args
){
String
[]
test
=
new
String
[
0
]
;
for
(
int
i
=
0
;
i
<
10
;
i
++){
test
[
i
]
=
i
+
""
;
}
/*for(int j=0; j<3; j++){
test[test.length] = j+""
;
}*/
System
.
out
.
println
(
"
test = "
+
test
);
public
static
void
main
(
String
[]
args
)
throws
UnsupportedEncodingException
{
RSA
rsa
=
new
RSA
()
;
String
value
=
"18989474184"
;
byte
[]
s
=
rsa
.
encrypt
(
StrUtil
.
bytes
(
value
,
CharsetUtil
.
UTF_8
),
KeyType
.
PublicKey
)
;
String
encode
=
Base64
.
encode
(
s
);
System
.
out
.
println
(
"encode = "
+
encode
);
byte
[]
decode
=
Base64
.
decode
(
encode
.
getBytes
())
;
String
s1
=
new
String
(
rsa
.
decrypt
(
decode
,
KeyType
.
PrivateKey
));
System
.
out
.
println
(
"
s1 = "
+
s1
);
}
}
gic-cloud-data-hook-service/src/main/java/com/gic/cloud/data/hook/service/impl/DecryptKeyServiceImpl.java
View file @
182e1c5f
...
...
@@ -21,6 +21,7 @@ public class DecryptKeyServiceImpl implements DecryptKeyService {
key
.
setPublicKey
(
publicKey
);
key
.
setPrivateKey
(
privateKey
);
key
.
setCreateTime
(
new
Date
());
key
.
setUpdateTime
(
new
Date
());
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
Calendar
.
DAY_OF_MONTH
,
calendar
.
getActualMaximum
(
Calendar
.
DAY_OF_MONTH
));
Date
time
=
calendar
.
getTime
();
...
...
gic-cloud-data-hook-service/src/main/java/com/gic/cloud/data/hook/service/impl/FlatQueryResultServiceImpl.java
View file @
182e1c5f
...
...
@@ -277,19 +277,19 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService {
if
(
queryDataType
==
QueryDataType
.
FULL
){
String
preResult
=
rs
.
getString
(
fieldColumnIndex
);
if
(
dataPermission
==
1
&&
F
reeQueryServiceImpl
.
FILTERS_PHONE_ONLY
.
contains
(
fieldName
)){
if
(
dataPermission
==
1
&&
F
ilterFieldUtils
.
FILTERS_PHONE_ONLY
.
contains
(
fieldName
)){
fieldResult
=
DecryptUtils
.
decrypt
(
preResult
);
}
else
if
(
dataPermission
==
2
&&
F
reeQueryServiceImpl
.
FILTERS_PHONE_AND_CARD
.
contains
(
fieldName
)){
}
else
if
(
dataPermission
==
2
&&
F
ilterFieldUtils
.
FILTERS_PHONE_AND_CARD
.
contains
(
fieldName
)){
fieldResult
=
DecryptUtils
.
decrypt
(
preResult
);
}
else
if
(
F
reeQueryServiceImpl
.
FILETERS_USER_NAME
.
contains
(
fieldName
)){
}
else
if
(
F
ilterFieldUtils
.
FILETERS_USER_NAME
.
contains
(
fieldName
)){
fieldResult
=
DecryptUtils
.
decrypt
(
preResult
);
}
else
fieldResult
=
rs
.
getObject
(
fieldColumnIndex
);
}
else
{
if
(
dataPermission
==
1
&&
F
reeQueryServiceImpl
.
FILTERS_PHONE_ONLY
.
contains
(
fieldName
)){
if
(
dataPermission
==
1
&&
F
ilterFieldUtils
.
FILTERS_PHONE_ONLY
.
contains
(
fieldName
)){
fieldResult
=
"******"
;
}
else
if
(
dataPermission
==
2
&&
F
reeQueryServiceImpl
.
FILTERS_PHONE_AND_CARD
.
contains
(
fieldName
)){
}
else
if
(
dataPermission
==
2
&&
F
ilterFieldUtils
.
FILTERS_PHONE_AND_CARD
.
contains
(
fieldName
)){
fieldResult
=
"******"
;
}
else
if
(
F
reeQueryServiceImpl
.
FILETERS_USER_NAME
.
contains
(
fieldName
)){
}
else
if
(
F
ilterFieldUtils
.
FILETERS_USER_NAME
.
contains
(
fieldName
)){
fieldResult
=
DecryptUtils
.
dataSecurityProcessUserName
(
DecryptUtils
.
decrypt
(
rs
.
getObject
(
fieldColumnIndex
)+
""
));
}
else
fieldResult
=
rs
.
getObject
(
fieldColumnIndex
);
}
...
...
gic-cloud-data-hook-service/src/main/java/com/gic/cloud/data/hook/service/impl/FreeQueryServiceImpl.java
View file @
182e1c5f
...
...
@@ -52,14 +52,6 @@ public class FreeQueryServiceImpl implements IFreeQueryService {
/** csv / xls 下载目录 */
public
static
final
String
SAVE_FOLDER
=
"/usr/local/data-hook-file"
;
/** 脱敏字段 */
public
static
final
List
<
String
>
FILTERS_PHONE_ONLY
=
Arrays
.
asList
(
"mobile"
,
"phone"
,
"enterprise_name"
,
"phone_number"
,
"receive_phone_number"
,
"use_phone_number"
,
"friend_phone_num"
,
"from_phone_num"
);
/** 脱敏字段 */
public
static
final
List
<
String
>
FILTERS_PHONE_AND_CARD
=
Arrays
.
asList
(
"card_num"
,
"mobile"
,
"phone"
,
"enterprise_name"
,
"phone_number"
,
"receive_phone_number"
,
"receive_card_num"
,
"use_phone_number"
,
"use_card_num"
,
"friend_card_num"
,
"from_card_num"
,
"friend_phone_num"
,
"from_phone_num"
);
public
static
final
List
<
String
>
FILETERS_USER_NAME
=
Arrays
.
asList
(
"member_name"
,
"children_name"
,
"mbr_name"
,
"receive_member_name"
,
"use_member_name"
,
"name"
,
"bb_name"
,
"friend_mbr_name"
,
"from_mbr_name"
);
@Autowired
IDownloadTaskService
downloadTaskService
;
...
...
@@ -70,8 +62,8 @@ public class FreeQueryServiceImpl implements IFreeQueryService {
*/
public
static
List
<
String
>
getFieldsFilters
(
Integer
desensiType
)
{
if
(
desensiType
==
DataDesensiType
.
PHONE_ONLY
)
{
return
FILTERS_PHONE_ONLY
;
}
else
return
FILTERS_PHONE_AND_CARD
;
return
F
ilterFieldUtils
.
F
ILTERS_PHONE_ONLY
;
}
else
return
F
ilterFieldUtils
.
F
ILTERS_PHONE_AND_CARD
;
}
/** 是否为脱敏字段 */
...
...
@@ -236,7 +228,7 @@ public class FreeQueryServiceImpl implements IFreeQueryService {
Object
filedValue
;
if
(
queryDataType
==
QueryDataType
.
SAFE
&&
FreeQueryServiceImpl
.
isFilterFields
(
desensiType
,
fieldName
))
{
//手机号和卡号
filedValue
=
"******"
;
}
else
if
(
queryDataType
==
QueryDataType
.
SAFE
&&
FILETERS_USER_NAME
.
contains
(
fieldName
)){
//用户名
}
else
if
(
queryDataType
==
QueryDataType
.
SAFE
&&
F
ilterFieldUtils
.
F
ILETERS_USER_NAME
.
contains
(
fieldName
)){
//用户名
filedValue
=
DecryptUtils
.
dataSecurityProcessUserName
(
rs
.
getString
(
fieldName
));
}
else
{
switch
(
metaData
.
getColumnType
(
i
+
1
))
{
...
...
@@ -442,8 +434,8 @@ public class FreeQueryServiceImpl implements IFreeQueryService {
//row.createCell(j).setCellValue(c);
String
cName
=
rs
.
getMetaData
().
getColumnName
(
j
+
1
);
if
(
task
.
getQueryDataType
()
==
QueryDataType
.
SAFE
&&
(
FreeQueryServiceImpl
.
isFilterFields
(
condition
.
getDesensiType
(),
cName
)
||
F
reeQueryServiceImpl
.
FILETERS_USER_NAME
.
contains
(
cName
)))
{
if
(
F
reeQueryServiceImpl
.
FILETERS_USER_NAME
.
contains
(
cName
)){
&&
(
FreeQueryServiceImpl
.
isFilterFields
(
condition
.
getDesensiType
(),
cName
)
||
F
ilterFieldUtils
.
FILETERS_USER_NAME
.
contains
(
cName
)))
{
if
(
F
ilterFieldUtils
.
FILETERS_USER_NAME
.
contains
(
cName
)){
row
.
createCell
(
j
).
setCellValue
(
DecryptUtils
.
dataSecurityProcessUserName
(
rs
.
getString
(
j
+
1
)));
}
else
{
row
.
createCell
(
j
).
setCellValue
(
"******"
);
...
...
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