From 5a7479d3655c1584e434bbdaee43ce601b9e94b9 Mon Sep 17 00:00:00 2001 From: qyx <565485304@qq.com> Date: Mon, 1 Mar 2021 14:32:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=BC=A0=E8=BE=93=E6=9C=80?= =?UTF-8?q?=E7=BB=88=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../security/config/SecurityConfig.java | 2 +- .../modules/upload/consts/SysConst.java | 4 +- .../upload/consts/UploadFileConst.java | 4 +- .../upload/rest/UploadFileController.java | 26 ++++++- .../service/dto/UploadFileQueryCriteria.java | 7 +- .../service/impl/UploadFileServiceImpl.java | 19 +---- .../modules/upload/task/SaveToFileTask.java | 38 ++++++++-- .../src/test/java/me/zhengjie/SimpleTest.java | 74 ++++++++++++++++--- .../me/zhengjie/SpringApplicationTest.java | 35 +++++++++ 9 files changed, 164 insertions(+), 45 deletions(-) diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/config/SecurityConfig.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/config/SecurityConfig.java index 1c9da31..07dc272 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/security/config/SecurityConfig.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/config/SecurityConfig.java @@ -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()); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/upload/consts/SysConst.java b/eladmin-system/src/main/java/me/zhengjie/modules/upload/consts/SysConst.java index 23d53e3..58e1cfc 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/upload/consts/SysConst.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/upload/consts/SysConst.java @@ -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 = "测试用户"; diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/upload/consts/UploadFileConst.java b/eladmin-system/src/main/java/me/zhengjie/modules/upload/consts/UploadFileConst.java index 3844f76..d01e0e9 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/upload/consts/UploadFileConst.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/upload/consts/UploadFileConst.java @@ -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 WHITE_LIST = Collections.singletonList("admin"); + public static final List WHITE_LIST = Arrays.asList("admin", "xiaoxing", "yangbin"); /** * ext 文件类型分隔符 - 通配 diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/upload/rest/UploadFileController.java b/eladmin-system/src/main/java/me/zhengjie/modules/upload/rest/UploadFileController.java index 51fb125..35fec04 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/upload/rest/UploadFileController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/upload/rest/UploadFileController.java @@ -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 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 sendTask(@RequestParam(value = "files", required = false) MultipartFile[] files, @RequestParam(value = "taskName") String taskName ) { // 任务名称检验,为必填参数,且不能重复 if (StringUtils.isNotBlank(taskName)){ diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/upload/service/dto/UploadFileQueryCriteria.java b/eladmin-system/src/main/java/me/zhengjie/modules/upload/service/dto/UploadFileQueryCriteria.java index e27de6e..a0eb2b8 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/upload/service/dto/UploadFileQueryCriteria.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/upload/service/dto/UploadFileQueryCriteria.java @@ -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 */ diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/upload/service/impl/UploadFileServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/upload/service/impl/UploadFileServiceImpl.java index a5c4ffe..8fc39a9 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/upload/service/impl/UploadFileServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/upload/service/impl/UploadFileServiceImpl.java @@ -91,27 +91,10 @@ public class UploadFileServiceImpl implements UploadFileService { @Override public Map queryAll(UploadFileQueryCriteria criteria, Pageable pageable) { - criteria = filterOfWriteList(criteria); - UploadFileQueryCriteria finalCriteria = criteria; - Page page = uploadFileRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, finalCriteria, criteriaBuilder), pageable); + Page 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 queryAll(UploadFileQueryCriteria criteria) { diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/upload/task/SaveToFileTask.java b/eladmin-system/src/main/java/me/zhengjie/modules/upload/task/SaveToFileTask.java index f82bcf0..39fd70e 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/upload/task/SaveToFileTask.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/upload/task/SaveToFileTask.java @@ -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 fileAllLinesList = FileUtil.readLines(filePath, "utf-8"); - if (CollectionUtil.isNotEmpty(fileAllLinesList)) { + // modify by q , 新增可以进行区分已加密和未加密的号码逻辑,把未加密的进行分离进行调用 + Map> preEncryptNumMap = fileAllLinesList.stream() + .collect(Collectors.groupingBy(String::length)); + + if (CollectionUtil.isNotEmpty(preEncryptNumMap)) { // 分批调用接口进行加密 - batchSendToEncrypt(filePath, fileAllLinesList); + List list = preEncryptNumMap.get(PRE_SEND_NUM_LENGTH); + if (CollectionUtil.isNotEmpty(list)){ + batchSendToEncrypt(filePath, list); + } + } + + // modify by q 把剩下不需要加密的内容也写到文件中 + List 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(); diff --git a/eladmin-system/src/test/java/me/zhengjie/SimpleTest.java b/eladmin-system/src/test/java/me/zhengjie/SimpleTest.java index 2035cd2..24c5ca1 100644 --- a/eladmin-system/src/test/java/me/zhengjie/SimpleTest.java +++ b/eladmin-system/src/test/java/me/zhengjie/SimpleTest.java @@ -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 es = Arrays.asList("1111", "2222", "333"); @@ -72,31 +79,35 @@ 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(); } @Test - public void testHandleFileName(){ + public void testHandleFileName() { File file = FileUtil.file("C:\\Users\\Administrator\\Desktop\\233-1.txt"); @@ -115,17 +126,60 @@ public class SimpleTest { // // Files.createFile(Paths.get(path + "1.txt")); - FileUtil.file(new File("1.txt"),"aa", "bb"); + FileUtil.file(new File("1.txt"), "aa", "bb"); } @Test - public void testPOSTBug(){ + public void testPOSTBug() { Map map = new HashMap<>(); - map.put("taskName","1"); + map.put("taskName", "1"); HttpResponse httpResponse = HttpRequest .post("localhost:8000/api/uploadFile/sendTask") .form(map) .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 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> 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); + } + + } + + + } diff --git a/eladmin-system/src/test/java/me/zhengjie/SpringApplicationTest.java b/eladmin-system/src/test/java/me/zhengjie/SpringApplicationTest.java index eaf5466..55d5e70 100644 --- a/eladmin-system/src/test/java/me/zhengjie/SpringApplicationTest.java +++ b/eladmin-system/src/test/java/me/zhengjie/SpringApplicationTest.java @@ -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 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); + } + }