Commit 182e1c5f by 陶光胜

取数平台调整

parent afdb14e0
......@@ -60,7 +60,7 @@ public class DecryptUtils {
}
for(FlatQueryCondition condition : allFields){
if(condition.getFieldMark().equals(columnName)){
if(FreeQueryServiceImpl.FILETERS_USER_NAME.contains(condition.getFieldName())){
if(FilterFieldUtils.FILETERS_USER_NAME.contains(condition.getFieldName())){
return true;
}
}
......
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);
}
}
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(FreeQueryServiceImpl.FILTERS_PHONE_ONLY.contains(condition.getFieldName())){
if(FilterFieldUtils.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 && FreeQueryServiceImpl.FILETERS_USER_NAME.contains(columnName)){
if(allFields == null && FilterFieldUtils.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 && FreeQueryServiceImpl.FILETERS_USER_NAME.contains(columnName)){
if(allFields == null && FilterFieldUtils.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 && FreeQueryServiceImpl.FILETERS_USER_NAME.contains(columnName)) {
} else if(allFields == null && FilterFieldUtils.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(FreeQueryServiceImpl.FILETERS_USER_NAME.contains(condition.getFieldName())){
if(FilterFieldUtils.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(FreeQueryServiceImpl.FILTERS_PHONE_ONLY.contains(condition.getFieldName())){
if(FilterFieldUtils.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);
}
}
......@@ -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();
......
......@@ -277,19 +277,19 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService {
if(queryDataType == QueryDataType.FULL){
String preResult = rs.getString(fieldColumnIndex);
if(dataPermission == 1 && FreeQueryServiceImpl.FILTERS_PHONE_ONLY.contains(fieldName)){
if(dataPermission == 1 && FilterFieldUtils.FILTERS_PHONE_ONLY.contains(fieldName)){
fieldResult = DecryptUtils.decrypt(preResult);
} else if(dataPermission == 2 && FreeQueryServiceImpl.FILTERS_PHONE_AND_CARD.contains(fieldName)){
} else if(dataPermission == 2 && FilterFieldUtils.FILTERS_PHONE_AND_CARD.contains(fieldName)){
fieldResult = DecryptUtils.decrypt(preResult);
} else if (FreeQueryServiceImpl.FILETERS_USER_NAME.contains(fieldName)){
} else if (FilterFieldUtils.FILETERS_USER_NAME.contains(fieldName)){
fieldResult = DecryptUtils.decrypt(preResult);
} else fieldResult = rs.getObject(fieldColumnIndex);
} else {
if(dataPermission == 1 && FreeQueryServiceImpl.FILTERS_PHONE_ONLY.contains(fieldName)){
if(dataPermission == 1 && FilterFieldUtils.FILTERS_PHONE_ONLY.contains(fieldName)){
fieldResult = "******";
} else if(dataPermission == 2 && FreeQueryServiceImpl.FILTERS_PHONE_AND_CARD.contains(fieldName)){
} else if(dataPermission == 2 && FilterFieldUtils.FILTERS_PHONE_AND_CARD.contains(fieldName)){
fieldResult = "******";
} else if(FreeQueryServiceImpl.FILETERS_USER_NAME.contains(fieldName)){
} else if(FilterFieldUtils.FILETERS_USER_NAME.contains(fieldName)){
fieldResult = DecryptUtils.dataSecurityProcessUserName(DecryptUtils.decrypt(rs.getObject(fieldColumnIndex)+""));
} else fieldResult = rs.getObject(fieldColumnIndex);
}
......
......@@ -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 FilterFieldUtils.FILTERS_PHONE_ONLY;
} else return FilterFieldUtils.FILTERS_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 && FilterFieldUtils.FILETERS_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) || FreeQueryServiceImpl.FILETERS_USER_NAME.contains(cName))) {
if(FreeQueryServiceImpl.FILETERS_USER_NAME.contains(cName)){
&& (FreeQueryServiceImpl.isFilterFields(condition.getDesensiType(), cName) || FilterFieldUtils.FILETERS_USER_NAME.contains(cName))) {
if(FilterFieldUtils.FILETERS_USER_NAME.contains(cName)){
row.createCell(j).setCellValue(DecryptUtils.dataSecurityProcessUserName(rs.getString(j+1)));
} else {
row.createCell(j).setCellValue("******");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment