文件传输最终版

master
土豆兄弟 4 years ago
parent e3906d1a72
commit 5a7479d365

@ -133,7 +133,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
// 所有类型的接口都放行
.antMatchers(anonymousUrls.get(RequestMethodEnum.ALL.getType()).toArray(new String[0])).permitAll()
// 所有请求都需要认证
// .anyRequest().authenticated()
.anyRequest().authenticated()
.and().apply(securityConfigurerAdapter());
}

@ -16,7 +16,7 @@ public class SysConst {
// Test相关的 - end
public static final String REMOTE_TRANS_HOST = "118.178.137.129";
public static final String REMOTE_TRANS_HOST = "116.62.197.152"; // 118.178.137.129 116.62.197.152
public static final Integer REMOTE_TRANS_PORT = 22;
@ -30,7 +30,7 @@ public class SysConst {
public static final String REMOTE_TRANS_DIR_PATH = "/home/";
// fixme 以后改成rpc调用的地址
public static final String REMOTE_UPDATE_ADDR = "http://118.178.137.129:8001/api/remoteRecord/remote/rec";
public static final String REMOTE_UPDATE_ADDR = "http://116.62.197.152:8000/api/remoteRecord/remote/rec";
// 测试内容临时定义
public static final String TEST_USER_NAME = "测试用户";

@ -1,6 +1,6 @@
package me.zhengjie.modules.upload.consts;
import java.util.Collections;
import java.util.Arrays;
import java.util.List;
/**
@ -11,7 +11,7 @@ public class UploadFileConst {
/**
* -
*/
public static final List<String> WHITE_LIST = Collections.singletonList("admin");
public static final List<String> WHITE_LIST = Arrays.asList("admin", "xiaoxing", "yangbin");
/**
* ext -

@ -20,15 +20,16 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import me.zhengjie.annotation.AnonymousAccess;
import me.zhengjie.annotation.Log;
import me.zhengjie.common.http.CommonResponse;
import me.zhengjie.common.http.ResponseCode;
import me.zhengjie.modules.upload.consts.SysConst;
import me.zhengjie.modules.upload.domain.UploadFile;
import me.zhengjie.modules.upload.service.UploadFileService;
import me.zhengjie.modules.upload.service.dto.UploadFileDto;
import me.zhengjie.modules.upload.service.dto.UploadFileQueryCriteria;
import me.zhengjie.modules.upload.task.SaveToFileTask;
import me.zhengjie.utils.SecurityUtils;
import me.zhengjie.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
@ -45,6 +46,7 @@ import java.util.List;
import java.util.Objects;
import static me.zhengjie.modules.upload.consts.UploadFileConst.FILE_PATH_SPLIT;
import static me.zhengjie.modules.upload.consts.UploadFileConst.WHITE_LIST;
/**
* @website https://el-admin.vip
@ -76,9 +78,28 @@ public class UploadFileController {
@ApiOperation("查询上传文件解析发送")
@PreAuthorize("@el.check('uploadFile:list')")
public ResponseEntity<Object> query(UploadFileQueryCriteria criteria, Pageable pageable){
filterOfWriteList(criteria);
log.info("======= [ criteria is {} ] =======", criteria.toString());
return new ResponseEntity<>(uploadFileService.queryAll(criteria,pageable),HttpStatus.OK);
}
/**
* ,,
*
* @param criteria
*
* @return
*/
private void filterOfWriteList(UploadFileQueryCriteria criteria) {
if (!SysConst.sysDebug){
if (!CollectionUtil.contains(WHITE_LIST, SecurityUtils.getCurrentUsername())){
criteria.setOperation(SecurityUtils.getCurrentUsername());
log.info("======= [UploadFileServiceImpl|filterOfWriteList, userName is {} ] =======", SecurityUtils.getCurrentUsername());
}
}
}
@PostMapping
@Log("新增上传文件解析发送")
@ApiOperation("新增上传文件解析发送")
@ -111,7 +132,8 @@ public class UploadFileController {
@Log("上传并加密任务")
@ApiOperation("上传并加密任务")
@PostMapping(value = "/sendTask")
@AnonymousAccess // fixme 需要测试完成后进行去除和使用上面的权限注解
@PreAuthorize("@el.check('uploadFile:list')")
// @AnonymousAccess // fixme 需要测试完成后进行去除和使用上面的权限注解
public ResponseEntity<Object> sendTask(@RequestParam(value = "files", required = false) MultipartFile[] files, @RequestParam(value = "taskName") String taskName ) {
// 任务名称检验,为必填参数,且不能重复
if (StringUtils.isNotBlank(taskName)){

@ -30,18 +30,19 @@ import java.util.List;
public class UploadFileQueryCriteria{
/** 精确 */
@Query
@Query(type = Query.Type.EQUAL)
private Long id;
/** 精确 */
@Query(type = Query.Type.EQUAL)
private String operation;
/** 精确 */
@Query
@Query(type = Query.Type.EQUAL)
private Integer uploadTag;
/** 精确 */
@Query
@Query(type = Query.Type.EQUAL)
private String uploadFileTaskName;
/** BETWEEN */

@ -91,27 +91,10 @@ public class UploadFileServiceImpl implements UploadFileService {
@Override
public Map<String, Object> queryAll(UploadFileQueryCriteria criteria, Pageable pageable) {
criteria = filterOfWriteList(criteria);
UploadFileQueryCriteria finalCriteria = criteria;
Page<UploadFile> page = uploadFileRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, finalCriteria, criteriaBuilder), pageable);
Page<UploadFile> page = uploadFileRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageable);
return PageUtil.toPage(page.map(uploadFileMapper::toDto));
}
/**
* ,,
*
* @param criteria
*
* @return
*/
private UploadFileQueryCriteria filterOfWriteList(UploadFileQueryCriteria criteria) {
if (!SysConst.sysDebug){
if (!CollectionUtil.contains(WHITE_LIST, SecurityUtils.getCurrentUsername())){
criteria.setOperation(SecurityUtils.getCurrentUsername());
}
}
return criteria;
}
@Override
public List<UploadFileDto> queryAll(UploadFileQueryCriteria criteria) {

@ -40,6 +40,8 @@ import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static me.zhengjie.modules.upload.consts.SysConst.*;
import static me.zhengjie.modules.upload.consts.UploadFileConst.*;
@ -64,6 +66,16 @@ public class SaveToFileTask {
*/
private static final String SPLIT_TAG = ",";
/**
*
*/
public static final Integer PRE_SEND_NUM_LENGTH = 11;
/**
*
*/
public static final Integer SEND_NUM_LENGTH = 24;
// FIXME: 2021/1/5 0005 传输相关的配置 - 不要写在代码中,想办法进行加密
/**
@ -122,6 +134,7 @@ public class SaveToFileTask {
UploadFile uploadFile = new UploadFile();
if (finalTag) {
BeanUtils.copyProperties(uploadFileDto, uploadFile);
uploadFile.setFileTransSuccessCount(uploadFileDto.getFileCount());
uploadFile.setUploadTag(SUCCESS_TAG);
uploadFileService.update(uploadFile);
} else {
@ -140,10 +153,24 @@ public class SaveToFileTask {
*/
private boolean handleEachFileContent(String filePath, UploadFileDto uploadFileDto) {
List<String> fileAllLinesList = FileUtil.readLines(filePath, "utf-8");
if (CollectionUtil.isNotEmpty(fileAllLinesList)) {
// modify by q , 新增可以进行区分已加密和未加密的号码逻辑,把未加密的进行分离进行调用
Map<Integer, List<String>> preEncryptNumMap = fileAllLinesList.stream()
.collect(Collectors.groupingBy(String::length));
if (CollectionUtil.isNotEmpty(preEncryptNumMap)) {
// 分批调用接口进行加密
batchSendToEncrypt(filePath, fileAllLinesList);
List<String> list = preEncryptNumMap.get(PRE_SEND_NUM_LENGTH);
if (CollectionUtil.isNotEmpty(list)){
batchSendToEncrypt(filePath, list);
}
}
// modify by q 把剩下不需要加密的内容也写到文件中
List<String> list = preEncryptNumMap.get(SEND_NUM_LENGTH);
if (CollectionUtil.isNotEmpty(list)){
writeToFile(list, filePath + TEMP_FILE_END_STR);
}
// 加入一个全局控制开关
if (!booleanTag){
return Boolean.FALSE;
@ -164,15 +191,12 @@ public class SaveToFileTask {
return Boolean.FALSE;
}
private void transFileToOtherServer(String filePath) {
Session session = JschUtil.getSession(REMOTE_TRANS_HOST, REMOTE_TRANS_PORT, REMOTE_TRANS_SSH_USER, REMOTE_TRANS_SSH_PW);
Sftp sftp = JschUtil.createSftp(session);
Session session = JschUtil.createSession(REMOTE_TRANS_HOST, REMOTE_TRANS_PORT, REMOTE_TRANS_SSH_USER, REMOTE_TRANS_SSH_PW);
//fixme sftp.put("C:\\Users\\Administrator\\Desktop\\233.txt", "/home", Sftp.Mode.RESUME);
Sftp sftp = JschUtil.createSftp(session);
log.info("========= [SaveToFileTask|transFileToOtherServer, trans address is {} ] =========", filePath);
sftp.put(filePath, REMOTE_TRANS_DIR_PATH, Sftp.Mode.RESUME);
sftp.close();

@ -1,5 +1,7 @@
package me.zhengjie;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.extra.ssh.JschUtil;
import cn.hutool.extra.ssh.Sftp;
@ -17,9 +19,14 @@ import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
import static me.zhengjie.modules.upload.consts.UploadFileConst.WHITE_LIST;
public class SimpleTest {
@Test
public void testList2Arr() {
List<String> es = Arrays.asList("1111", "2222", "333");
@ -72,25 +79,29 @@ public class SimpleTest {
}
@Test
public void testFtpTransUpload() {
Session session = JschUtil.getSession("47.110.11.213", 22, "root", "yuyou@ECS2020");
Session session = JschUtil.createSession("47.110.11.213", 22, "root", "yuyou@ECS2020");
Sftp sftp = JschUtil.createSftp(session);
sftp.put("C:\\Users\\Administrator\\Desktop\\233.txt", "/home");
sftp.close();
JschUtil.closeAll();
}
@Test
public void testFtpTransDownload() {
Session session = JschUtil.getSession("47.110.11.213", 22, "root", "yuyou@ECS2020");
// @Test
public void testFtpTransDownload(int i) {
Session session = JschUtil.createSession("47.110.11.213", 22, "root", "yuyou@ECS2020");
Sftp sftp = JschUtil.createSftp(session);
sftp.download("/home/233.txt",FileUtil.file("C:\\Users\\Administrator\\Desktop\\233-1.txt"));
sftp.get("/home/233.txt", "C:\\Users\\Administrator\\Desktop\\233-1-" + i + ".txt");
sftp.close();
}
@ -128,4 +139,47 @@ public class SimpleTest {
.execute();
}
@Test
public void testFilterWirterList() {
System.out.println(CollectionUtil.contains(WHITE_LIST, "xiaoxing"));
System.out.println(CollectionUtil.contains(WHITE_LIST, "admin"));
System.out.println(CollectionUtil.contains(WHITE_LIST, "一早科技"));
}
@Test
public void testSplitList(){
List<String> list = new ArrayList<>(10000);
// 构建一个准备分隔的测试集合 - 加密的24位及非加密的11位
int tmp = 1;
for (int i = 0; i < 10000; i++) {
if (tmp == 1){
list.add(RandomUtil.randomString(24));
tmp = 0;
}else {
list.add(RandomUtil.randomString(11));
tmp = 1;
}
}
// 按长度进行分组
Map<Integer, List<String>> collect = list.stream()
.collect(Collectors.groupingBy(String::length));
System.out.println("24: " + collect.get(24).size());
System.out.println("11: " + collect.get(11).size());
}
public static void main(String[] args) {
SimpleTest simpleTest = new SimpleTest();
for (int i = 0; i < 5; i++) {
simpleTest.testFtpTransDownload(i);
}
}
}

@ -1,11 +1,23 @@
package me.zhengjie;
import com.alibaba.fastjson.JSON;
import me.zhengjie.modules.upload.domain.UploadFile;
import me.zhengjie.modules.upload.repository.UploadFileRepository;
import me.zhengjie.modules.upload.service.UploadFileService;
import me.zhengjie.modules.upload.service.dto.UploadFileDto;
import me.zhengjie.modules.upload.service.dto.UploadFileQueryCriteria;
import me.zhengjie.modules.upload.service.mapstruct.UploadFileMapper;
import me.zhengjie.modules.upload.task.SaveToFileTask;
import me.zhengjie.utils.PageUtil;
import me.zhengjie.utils.QueryHelp;
import me.zhengjie.utils.SecurityUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.test.context.junit4.SpringRunner;
import java.sql.Timestamp;
@ -17,6 +29,14 @@ public class SpringApplicationTest {
@Autowired
private SaveToFileTask saveToFileTask;
@Autowired
private UploadFileRepository uploadFileRepository;
@Autowired
private UploadFileMapper uploadFileMapper;
@Autowired
private UploadFileService uploadFileService;
/**
*
*/
@ -47,4 +67,19 @@ public class SpringApplicationTest {
public void testSFTPTrans(){
// saveToFileTask.transFileToOtherServer("C:\\Users\\Administrator\\Desktop\\c76l.txt");
}
@Test
public void testFindAll(){
Pageable pageable = PageRequest.of(1, 10);
UploadFileQueryCriteria uploadFileQueryCriteria = new UploadFileQueryCriteria();
uploadFileQueryCriteria.setOperation("xiaoxing");
Page<UploadFile> page = uploadFileRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, uploadFileQueryCriteria, criteriaBuilder), pageable);
String jsonString = JSON.toJSONString(PageUtil.toPage(page.map(uploadFileMapper::toDto)));
System.out.println(jsonString);
}
}

Loading…
Cancel
Save