Compare commits

...

9 Commits

Author SHA1 Message Date
chenxudong bb5bc7468d 更新代码 2025-10-22 09:00:13 +08:00
chenxudong 19f5a9324c 优化代码。 2025-10-17 17:13:51 +08:00
chenxudong e7cf898cbe 解决许可证的问题。 2025-10-17 14:52:56 +08:00
chenxudong 16f2cdd576 优化代码 2025-10-16 10:23:29 +08:00
chenxudong 1864799d3b 秘钥信息写入到命令行 2025-10-16 10:02:29 +08:00
chenxudong b7a8f2464f 优化代码。 2025-10-16 09:27:08 +08:00
chenxudong 1198ea8d02 解决开源漏洞问题。 2025-10-15 17:55:54 +08:00
chenxudong 6dd0c2939a 更新文件状态 2025-10-14 13:55:04 +08:00
chenxudong 8df5201079 解决开源的漏洞。 2025-10-14 11:40:42 +08:00
48 changed files with 234 additions and 370 deletions

View File

@ -15,39 +15,36 @@
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<lombok.version>1.18.36</lombok.version>
<hutool.version>5.8.22</hutool.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.22</version>
<version>${hutool.version}</version>
</dependency>
<dependency>
<groupId>com.electromagnetic.data</groupId>
<artifactId>electromagnetic-common</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<!-- 可选:添加 JAXB 实现库(如 jaxb-impl -->
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.3</version>
</dependency>
</dependencies>
<build>

View File

@ -16,6 +16,11 @@
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<mapstruct.version>1.4.1.Final</mapstruct.version>
<mybatis-plus.version>3.5.7</mybatis-plus.version>
<mariaddb-client.version>3.5.1</mariaddb-client.version>
<pagehelper.version>5.3.1</pagehelper.version>
<druid.version>1.2.6</druid.version>
<aspectjweaver.version>1.9.7</aspectjweaver.version>
</properties>
<dependencies>
@ -30,44 +35,40 @@
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-ollama</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-vector-store-mariadb</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.7</version>
<version>${mybatis-plus.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>mysql</groupId>-->
<!-- <artifactId>mysql-connector-java</artifactId>-->
<!-- <version>8.0.31</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>3.5.1</version>
<version>${mariaddb-client.version}</version>
</dependency>
<dependency>
<groupId>com.electromagnetic.data</groupId>
<artifactId>electromagnetic-common</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
@ -77,13 +78,14 @@
<artifactId>jsqlparser</artifactId>
</exclusion>
</exclusions>
<version>5.1.2</version>
<version>${pagehelper.version}</version>
</dependency>
<!--引入druid数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.6</version>
<version>${druid.version}</version>
</dependency>
<dependency>
@ -91,15 +93,17 @@
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.7</version>
<version>${aspectjweaver.version}</version>
</dependency>
</dependencies>

View File

@ -96,6 +96,10 @@ public class ElePropertyConfig {
@Value("${file.enc.passwd}")
private String fileEncPasswd;
@Getter
@Value("${login.enc.passwd}")
private String loginEncPasswd;
public String getAiFileUploadStoreDir() {
if (EleCommonUtil.isWinOs()) {
return FileUtil.normalize(winPrefix + File.separator + aiFileUploadStoreDir);

View File

@ -12,7 +12,7 @@ import com.electromagnetic.industry.software.common.enums.AdminTypeEnum;
import com.electromagnetic.industry.software.common.pojo.AccessSuccessInfo;
import com.electromagnetic.industry.software.common.pojo.UserLoginInfo;
import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
import com.electromagnetic.industry.software.common.util.IdWorker;
import com.electromagnetic.industry.software.common.util.EleIdCreator;
import com.electromagnetic.industry.software.common.util.TokenUtil;
import com.electromagnetic.industry.software.common.util.UserThreadLocal;
import com.electromagnetic.industry.software.manage.mapper.TokenMapper;
@ -145,7 +145,7 @@ public class LoginInterceptor implements HandlerInterceptor {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
return false;
} else {
Claims claims = TokenUtil.getLoginInfo(token);
Claims claims = TokenUtil.getLoginInfo(token, elePropertyConfig.getLoginEncPasswd());
if (claims == null) {
log.error("User info is missing, uri is --->{}", uri);
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
@ -183,7 +183,7 @@ public class LoginInterceptor implements HandlerInterceptor {
if (CollUtil.isEmpty(successInfoList)) {
ElectromagneticResult res = user.getResult();
UserAccessLog userAccessLog = new UserAccessLog()
.setId(IdWorker.getSnowFlakeIdString())
.setId(EleIdCreator.createSnowflakeId())
.setUserId(user.getUserId())
.setAccessStartTime(DateUtil.date(accessStartTime))
.setAccessEndTime(DateUtil.date(accessEndTime))
@ -209,7 +209,7 @@ public class LoginInterceptor implements HandlerInterceptor {
} else {
for (AccessSuccessInfo accessSuccessInfo : successInfoList) {
UserAccessLog userAccessLog = new UserAccessLog()
.setId(IdWorker.getSnowFlakeIdString())
.setId(EleIdCreator.createSnowflakeId())
.setUserId(user.getUserId())
.setAccessStartTime(DateUtil.date(accessStartTime))
.setAccessEndTime(DateUtil.date(accessEndTime))

View File

@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.electromagnetic.industry.software.manage.pojo.models.ImportTableData;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ImportTableDataMapper extends BaseMapper<ImportTableData> {
}

View File

@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.electromagnetic.industry.software.manage.pojo.models.UserRole;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserRoleMapper extends BaseMapper<UserRole> {
}

View File

@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.electromagnetic.industry.software.common.util.IdWorker;
import com.electromagnetic.industry.software.common.util.EleIdCreator;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -23,6 +23,6 @@ public class EdFileFavorite extends BaseModel {
private String fileId;
public void newInit() {
this.setId(IdWorker.getSnowFlakeIdString());
this.setId(EleIdCreator.createSnowflakeId());
}
}

View File

@ -3,7 +3,7 @@ package com.electromagnetic.industry.software.manage.pojo.models;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.electromagnetic.industry.software.common.util.EleCommonUtil;
import com.electromagnetic.industry.software.common.util.IdWorker;
import com.electromagnetic.industry.software.common.util.EleIdCreator;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@ -127,7 +127,7 @@ public class EdFileInfo extends BaseModel {
private String templateCode;
public void newInit() {
String newFileDbId = IdWorker.getSnowFlakeIdString();
String newFileDbId = EleIdCreator.createSnowflakeId();
String fileTime = EleCommonUtil.getNowTimeStr();
this.setId(newFileDbId);
this.setFileTime(fileTime);

View File

@ -2,7 +2,7 @@ package com.electromagnetic.industry.software.manage.pojo.models;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.electromagnetic.industry.software.common.util.IdWorker;
import com.electromagnetic.industry.software.common.util.EleIdCreator;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -31,6 +31,6 @@ public class EdFileRelation extends BaseModel {
private String relationship;
public void newInit() {
this.setId(IdWorker.getSnowFlakeIdString());
this.setId(EleIdCreator.createSnowflakeId());
}
}

View File

@ -3,7 +3,7 @@ package com.electromagnetic.industry.software.manage.pojo.models;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.electromagnetic.industry.software.common.enums.PublishEnum;
import com.electromagnetic.industry.software.common.util.IdWorker;
import com.electromagnetic.industry.software.common.util.EleIdCreator;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -21,7 +21,7 @@ public class EdTagLibrary extends BaseModel {
private Integer isPublished; // 是否已发布0: 未发布, 1: 已发布
public void newInit() {
this.setTagId(IdWorker.getSnowFlakeIdString());
this.setTagId(EleIdCreator.createSnowflakeId());
this.setIsPublished(PublishEnum.UNPUBLISHED.getCode()); //默认未发布
}
}

View File

@ -1,7 +1,7 @@
package com.electromagnetic.industry.software.manage.pojo.models;
import com.baomidou.mybatisplus.annotation.TableName;
import com.electromagnetic.industry.software.common.util.IdWorker;
import com.electromagnetic.industry.software.common.util.EleIdCreator;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -15,6 +15,6 @@ public class FileTagRelation extends BaseModel {
private String tagId;
public void newInit() {
this.setId(IdWorker.getSnowFlakeIdString());
this.setId(EleIdCreator.createSnowflakeId());
}
}

View File

@ -2,7 +2,7 @@ package com.electromagnetic.industry.software.manage.pojo.models;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.electromagnetic.industry.software.common.util.IdWorker;
import com.electromagnetic.industry.software.common.util.EleIdCreator;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -26,7 +26,7 @@ public class Role extends BaseModel {
private String roleDesc;
public void newInit() {
this.setId(IdWorker.getSnowFlakeIdString());
this.setId(EleIdCreator.createSnowflakeId());
}
}

View File

@ -2,7 +2,7 @@ package com.electromagnetic.industry.software.manage.pojo.models;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.electromagnetic.industry.software.common.util.IdWorker;
import com.electromagnetic.industry.software.common.util.EleIdCreator;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -35,6 +35,6 @@ public class RolePermission extends BaseModel {
private String permissionCode;
public void newInit() {
this.setId(IdWorker.getSnowFlakeIdString());
this.setId(EleIdCreator.createSnowflakeId());
}
}

View File

@ -4,8 +4,8 @@ import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.annotation.TableName;
import com.electromagnetic.industry.software.common.cons.UserConstants;
import com.electromagnetic.industry.software.common.enums.AdminTypeEnum;
import com.electromagnetic.industry.software.common.util.IdWorker;
import com.electromagnetic.industry.software.common.util.SignUtils;
import com.electromagnetic.industry.software.common.util.EleCommonUtil;
import com.electromagnetic.industry.software.common.util.EleIdCreator;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -92,9 +92,9 @@ public class User extends BaseModel {
private String salt;
public void newInit() {
this.setId(IdWorker.getSnowFlakeIdString());
this.setId(EleIdCreator.createSnowflakeId());
this.setSalt(RandomUtil.randomString(16));
this.setUserPwd(SignUtils.MD5(UserConstants.DEFAULT_PASSWORD + this.getSalt()));
this.setUserPwd(EleCommonUtil.getStrMd5(UserConstants.DEFAULT_PASSWORD + this.getSalt()));
this.setIsPublished(UserConstants.DEFAULT_PUBLISH_STATUS);
this.setIsActivated(UserConstants.DEFAULT_ACTIVE_STATUS);
this.setAdminType(AdminTypeEnum.NORMAL.getValue());

View File

@ -2,7 +2,7 @@ package com.electromagnetic.industry.software.manage.pojo.models;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.electromagnetic.industry.software.common.util.IdWorker;
import com.electromagnetic.industry.software.common.util.EleIdCreator;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -29,6 +29,6 @@ public class UserRole extends BaseModel {
private String roleId;
public void newInit() {
this.setId(IdWorker.getSnowFlakeIdString());
this.setId(EleIdCreator.createSnowflakeId());
}
}

View File

@ -2,10 +2,13 @@ package com.electromagnetic.industry.software.manage.pojo.other;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
@Data
public class PublishParam {
public class PublishParam implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**

View File

@ -4,12 +4,15 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@Data
public class SingleUserResponse {
public class SingleUserResponse implements Serializable {
@Serial
private static final long serialVersionUID = -7475233976453471059L;
/**

View File

@ -1,4 +1,4 @@
package com.electromagnetic.industry.software.common.pojo;
package com.electromagnetic.industry.software.manage.pojo.other;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Builder;

View File

@ -1,25 +1,9 @@
package com.electromagnetic.industry.software.manage.pojo.req;
import lombok.Data;
@Data
public class ChangePasswordRequest {
private String userId;
private String newPassword;
// Getters and Setters
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getNewPassword() {
return newPassword;
}
public void setNewPassword(String newPassword) {
this.newPassword = newPassword;
}
}

View File

@ -1,11 +1,13 @@
package com.electromagnetic.industry.software.manage.pojo.req;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.web.multipart.MultipartFile;
import java.io.Serializable;
import java.util.Date;
@EqualsAndHashCode(callSuper = true)
@Data
public class EDDataRequest extends BaseRequest implements Serializable {

View File

@ -1,9 +1,11 @@
package com.electromagnetic.industry.software.manage.pojo.req;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
@EqualsAndHashCode(callSuper = true)
@Data
public class GetSingleUserRequest extends BaseRequest implements Serializable {
private static final long serialVersionUID = 1L;

View File

@ -1,9 +1,11 @@
package com.electromagnetic.industry.software.manage.pojo.req;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
@EqualsAndHashCode(callSuper = true)
@Data
public class SearchUserRequest extends BaseRequest implements Serializable {

View File

@ -1,9 +1,11 @@
package com.electromagnetic.industry.software.manage.pojo.req;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
@EqualsAndHashCode(callSuper = true)
@Data
public class UserDeleteRequest extends BaseRequest implements Serializable {

View File

@ -1,9 +1,11 @@
package com.electromagnetic.industry.software.manage.pojo.req;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
@EqualsAndHashCode(callSuper = true)
@Data
public class UserLoginRequest extends BaseRequest implements Serializable {

View File

@ -3,10 +3,12 @@ package com.electromagnetic.industry.software.manage.pojo.req;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
@EqualsAndHashCode(callSuper = true)
@Data
public class UserModiRequest extends BaseRequest implements Serializable {

View File

@ -2,10 +2,12 @@ package com.electromagnetic.industry.software.manage.pojo.req;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.List;
@EqualsAndHashCode(callSuper = true)
@Data
public class UserPublishRequest extends BaseRequest implements Serializable {

View File

@ -2,10 +2,12 @@ package com.electromagnetic.industry.software.manage.pojo.req;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
@EqualsAndHashCode(callSuper = true)
@Data
public class UserRequest extends BaseRequest implements Serializable {

View File

@ -1,9 +1,11 @@
package com.electromagnetic.industry.software.manage.pojo.req;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
@EqualsAndHashCode(callSuper = true)
@Data
public class UserWorkNumRequest extends BaseRequest implements Serializable {

View File

@ -1,23 +1,9 @@
package com.electromagnetic.industry.software.manage.pojo.req;
import lombok.Data;
@Data
public class ValidateOldPasswordRequest {
private String userId;
private String oldPassword;
// Getters and Setters
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getOldPassword() {
return oldPassword;
}
public void setOldPassword(String oldPassword) {
this.oldPassword = oldPassword;
}
}

View File

@ -1,7 +1,7 @@
package com.electromagnetic.industry.software.manage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.electromagnetic.industry.software.common.pojo.TreeNode;
import com.electromagnetic.industry.software.manage.pojo.other.TreeNode;
import com.electromagnetic.industry.software.manage.pojo.models.EdTagLibrary;
import com.electromagnetic.industry.software.manage.pojo.resp.FileTagInfo;
import com.electromagnetic.industry.software.manage.pojo.resp.TagListVO;

View File

@ -10,7 +10,7 @@ import com.electromagnetic.industry.software.common.pojo.PageFile;
import com.electromagnetic.industry.software.common.pojo.UserLoginInfo;
import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
import com.electromagnetic.industry.software.common.util.ElectromagneticResultUtil;
import com.electromagnetic.industry.software.common.util.IdWorker;
import com.electromagnetic.industry.software.common.util.EleIdCreator;
import com.electromagnetic.industry.software.common.util.OfficeFileUtil;
import com.electromagnetic.industry.software.common.util.UserThreadLocal;
import com.electromagnetic.industry.software.manage.config.ElePropertyConfig;
@ -149,7 +149,7 @@ public class ChatService {
StringBuilder stringBuilder = new StringBuilder();
for (Document document : documents) {
Map<String, Object> metadata = Map.of("fileName", file.getOriginalFilename(), "fileMd5", fileMd5);
newDocuments.add(new Document(IdWorker.getSnowFlakeIdString(), Objects.requireNonNull(document.getText()), metadata));
newDocuments.add(new Document(EleIdCreator.createSnowflakeId(), Objects.requireNonNull(document.getText()), metadata));
stringBuilder.append(document.getText());
}
FileUtil.writeString(stringBuilder.toString(), elePropertyConfig.getAiFileUploadStoreDir() + File.separator + fileMd5, Charset.defaultCharset());
@ -158,7 +158,7 @@ public class ChatService {
vectorStore.write(newDocuments);
for (Document document : newDocuments) {
aiFileUploadRecordMapper.insert(new AiFileUploadRecord()
.setId(IdWorker.getSnowFlakeIdString())
.setId(EleIdCreator.createSnowflakeId())
.setVectorId(document.getId())
.setFileSize(file.getSize())
.setFileMd5(fileMd5)
@ -170,7 +170,7 @@ public class ChatService {
public Flux<String> chatStreamStr(QueryDTO queryDTO) {
AiQuestionRecord record = new AiQuestionRecord()
.setQuestion(queryDTO.getMsg())
.setId(IdWorker.getSnowFlakeIdString());
.setId(EleIdCreator.createSnowflakeId());
UserLoginInfo userLoginInfo = new UserLoginInfo();
userLoginInfo.setUserId(queryDTO.getUserId());
UserThreadLocal.set(userLoginInfo);
@ -202,7 +202,7 @@ public class ChatService {
}
public Flux<ChatResponse> chatStreamResponse(QueryDTO queryDTO) {
AiQuestionRecord record = new AiQuestionRecord().setQuestion(queryDTO.getMsg()).setId(IdWorker.getSnowFlakeIdString());
AiQuestionRecord record = new AiQuestionRecord().setQuestion(queryDTO.getMsg()).setId(EleIdCreator.createSnowflakeId());
UserLoginInfo userLoginInfo = new UserLoginInfo();
userLoginInfo.setUserId(queryDTO.getUserId());
UserThreadLocal.set(userLoginInfo);

View File

@ -198,7 +198,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
@Override
public ElectromagneticResult<?> createFolder(CreateFolderDTO createFolderDTO, int dataOwnCode) {
Assert.isTrue(EleCommonUtil.isFileNameValid(createFolderDTO.getNewFolderName()), NAME_VALID_MSG);
String folderId = IdWorker.getSnowFlakeIdString();
String folderId = EleIdCreator.createSnowflakeId();
if (DataOwnEnum.isSysCode(dataOwnCode) || DataOwnEnum.isRepoCode(dataOwnCode)) {
List<String> accessibleTree = permissionService.getAccessibleTree();
@ -1034,7 +1034,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
.eq(EdFileInfo::getFileName, srcFileInfo.getFileName())
.eq(EdFileInfo::getFileType, srcFileInfo.getFileType()));
Integer maxFileVersion = Collections.max(sameFileInfos, Comparator.comparing(EdFileInfo::getFileVersion)).getFileVersion();
String newFileDbId = IdWorker.getSnowFlakeIdString();
String newFileDbId = EleIdCreator.createSnowflakeId();
String fileTime = EleCommonUtil.getNowTimeStr();
String codePathByDbPath = commonService.getCodePathByDbPath(destFolderInfo.getFilePath());
String fileCode = commonService.createFileCode(codePathByDbPath, srcFileInfo.getFileType(), maxFileVersion + 1, fileTime);
@ -1218,7 +1218,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
.eq(EdFileInfo::getFileType, srcFileInfo.getFileType());
List<EdFileInfo> sameFileInfos = this.baseMapper.selectList(queryWrapper);
Integer maxFileVersion = Collections.max(sameFileInfos, Comparator.comparing(EdFileInfo::getFileVersion)).getFileVersion();
String newFileDbId = IdWorker.getSnowFlakeIdString();
String newFileDbId = EleIdCreator.createSnowflakeId();
String fileTime = EleCommonUtil.getNowTimeStr();
String codePathByDbPath = commonService.getCodePathByDbPath(destFolderInfo.getFilePath());
String fileCode = commonService.createFileCode(codePathByDbPath, srcFileInfo.getFileType(), maxFileVersion + 1, fileTime);

View File

@ -11,7 +11,7 @@ import com.electromagnetic.industry.software.common.enums.EffectFlagEnum;
import com.electromagnetic.industry.software.common.enums.PublishEnum;
import com.electromagnetic.industry.software.common.enums.TagTypeEnum;
import com.electromagnetic.industry.software.common.exception.BizException;
import com.electromagnetic.industry.software.common.pojo.TreeNode;
import com.electromagnetic.industry.software.manage.pojo.other.TreeNode;
import com.electromagnetic.industry.software.common.util.UserThreadLocal;
import com.electromagnetic.industry.software.manage.mapper.EdTagLibraryMapper;
import com.electromagnetic.industry.software.manage.pojo.models.EdTagLibrary;

View File

@ -6,7 +6,7 @@ import cn.hutool.core.text.StrFormatter;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.electromagnetic.industry.software.common.enums.EffectFlagEnum;
import com.electromagnetic.industry.software.common.util.IdWorker;
import com.electromagnetic.industry.software.common.util.EleIdCreator;
import com.electromagnetic.industry.software.common.util.UserThreadLocal;
import com.electromagnetic.industry.software.manage.mapper.FileFormatMapper;
import com.electromagnetic.industry.software.manage.pojo.models.FileFormat;
@ -39,7 +39,7 @@ public class FileFormatServiceImpl extends ServiceImpl<FileFormatMapper, FileFor
FileFormat fileFormat = new FileFormat();
fileFormat.setSuffixName(suffixName);
fileFormat.setEffectFlag(EffectFlagEnum.EFFECT.code);
fileFormat.setId(IdWorker.getSnowFlakeIdString());
fileFormat.setId(EleIdCreator.createSnowflakeId());
fileFormat.setSuffixNo(createFileFormatNo(fileFormats.size()));
fileFormat.setCreatedBy(UserThreadLocal.getUserId());
this.baseMapper.insert(fileFormat);

View File

@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.lang.tree.TreeNodeConfig;
@ -21,7 +22,7 @@ import com.electromagnetic.industry.software.common.enums.EleDataTypeEnum;
import com.electromagnetic.industry.software.common.exception.BizException;
import com.electromagnetic.industry.software.common.pojo.RespPageVO;
import com.electromagnetic.industry.software.common.util.EleCommonUtil;
import com.electromagnetic.industry.software.common.util.IdWorker;
import com.electromagnetic.industry.software.common.util.EleIdCreator;
import com.electromagnetic.industry.software.common.util.UserThreadLocal;
import com.electromagnetic.industry.software.manage.config.ElePropertyConfig;
import com.electromagnetic.industry.software.manage.mapper.ImportPrjInfoMapper;
@ -33,7 +34,6 @@ import com.electromagnetic.industry.software.manage.service.ImportPrjService;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.mockito.internal.util.io.IOUtil;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpHeaders;
@ -91,7 +91,7 @@ public class ImportPrjServiceImpl extends ServiceImpl<ImportPrjInfoMapper, Impor
// 如果是目录且不是最后一个元素
boolean isDirectory = i < pathParts.length - 1 || entry.isDirectory();
if (!pathIdMap.containsKey(currentPath)) {
String newId = IdWorker.getSnowFlakeIdString();
String newId = EleIdCreator.createSnowflakeId();
pathIdMap.put(currentPath, newId);
String findIdPath = findIdPath(parentId, itemIdMap);
String filePath = StrUtil.isEmpty(findIdPath) ? newId : findIdPath + ElectromagneticConstants.MYSQL_FILE_PATH_SPLIT + newId;
@ -137,7 +137,7 @@ public class ImportPrjServiceImpl extends ServiceImpl<ImportPrjInfoMapper, Impor
} catch (Exception e) {
throw new BizException("导入工程失败,原因 " + e.getMessage(), e);
} finally {
IOUtil.close(zipFile);
IoUtil.close(zipFile);
FileUtil.del(zipTmpPath);
}
return true;

View File

@ -12,7 +12,7 @@ import com.electromagnetic.industry.software.common.pojo.RespPageVO;
import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
import com.electromagnetic.industry.software.common.util.EleCommonUtil;
import com.electromagnetic.industry.software.common.util.ElectromagneticResultUtil;
import com.electromagnetic.industry.software.common.util.IdWorker;
import com.electromagnetic.industry.software.common.util.EleIdCreator;
import com.electromagnetic.industry.software.manage.mapper.ImportTableDataMapper;
import com.electromagnetic.industry.software.manage.mapper.ImportTableInfoMapper;
import com.electromagnetic.industry.software.manage.pojo.models.ImportTableData;
@ -45,7 +45,7 @@ public class ImportTableServiceImpl implements ImportTableService {
@Override
public String addTableInfo(String relatedId, Map<Integer, Object> tableHeader) {
String id = IdWorker.getSnowFlakeIdString();
String id = EleIdCreator.createSnowflakeId();
ImportTableInfo importTableInfo = new ImportTableInfo()
.setId(id)
.setTableHeader(JSONUtil.toJsonStr(tableHeader))
@ -107,7 +107,7 @@ public class ImportTableServiceImpl implements ImportTableService {
@Override
public String addTableData(String tableInfoId, String tableData) {
String id = IdWorker.getSnowFlakeIdString();
String id = EleIdCreator.createSnowflakeId();
ImportTableData importTableData = new ImportTableData().setId(id).setTableInfoId(tableInfoId).setData(tableData);
importTableDataMapper.insert(importTableData);
return id;

View File

@ -16,6 +16,7 @@ import com.electromagnetic.industry.software.common.exception.BizException;
import com.electromagnetic.industry.software.common.pojo.UserLoginInfo;
import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
import com.electromagnetic.industry.software.common.util.*;
import com.electromagnetic.industry.software.manage.config.ElePropertyConfig;
import com.electromagnetic.industry.software.manage.mapper.RoleMapper;
import com.electromagnetic.industry.software.manage.mapper.TokenMapper;
import com.electromagnetic.industry.software.manage.mapper.UserMapper;
@ -34,12 +35,14 @@ import com.electromagnetic.industry.software.manage.service.EdFileFavoriteServic
import com.electromagnetic.industry.software.manage.service.UserRoleService;
import com.electromagnetic.industry.software.manage.service.UserService;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import jakarta.annotation.Resource;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.crypto.SecretKey;
import java.nio.charset.Charset;
import java.util.*;
import java.util.stream.Collectors;
@ -58,6 +61,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
private RoleMapper roleMapper;
@Resource
private EdFileFavoriteService edFileFavoriteService;
@Resource
private ElePropertyConfig elePropertyConfig;
/**
* 用户登录
@ -68,7 +73,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
@Override
public ElectromagneticResult<?> login(UserLoginRequest loginRequest) {
UserLoginInfo info = UserMappers.INSTANCE.getUserLoginRequestToModel(loginRequest);
String decodePwd = AESUtils.decrypt(info.getUserPwd(), UserConstants.SECRET_KEY);
String decodePwd = AESUtils.decrypt(info.getUserPwd(), elePropertyConfig.getLoginEncPasswd());
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getWorkNumber, info.getWorkNumber())
.eq(User::getEffectFlag, EffectFlagEnum.EFFECT.code);
@ -116,17 +121,19 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
claims.put(UserConstants.LOGIN_USER_NAME, loginInfo.getUsername());
claims.put(UserConstants.LOGIN_WORK_NUMBER, loginInfo.getWorkNumber());
claims.put(UserConstants.LOGIN_ADMIN_TYPE, loginInfo.getAdminType());
byte[] keyBytes = elePropertyConfig.getLoginEncPasswd().getBytes(Charset.defaultCharset());
SecretKey key = Keys.hmacShaKeyFor(keyBytes);
return Jwts.builder()
.addClaims(claims)
.setId(UUID.randomUUID().toString())
.setIssuedAt(DateTime.now())
.signWith(SignatureAlgorithm.HS512, UserConstants.SECRET_KEY)
.claims(claims) // 自定义 claims
.id(UUID.randomUUID().toString()) // JWT ID
.issuedAt(new Date()) // 签发时间使用 java.util.Date
.signWith(key) // 签名
.compact();
}
public Boolean matchPassword(User user, String password) {
String salt = user.getSalt();
String encodePwd = SignUtils.MD5(password + salt);
String encodePwd = EleCommonUtil.getStrMd5(password + salt);
return user.getUserPwd().equals(encodePwd);
}
@ -247,7 +254,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
singleUserResponse.setRoleList(roleList);
// 检查密码是否和初始密码相同
if (user.getUserPwd().equals(SignUtils.MD5(UserConstants.DEFAULT_PASSWORD + user.getSalt()))) {
if (user.getUserPwd().equals(EleCommonUtil.getStrMd5(UserConstants.DEFAULT_PASSWORD + user.getSalt()))) {
singleUserResponse.setIsDefaultPwd(1);
} else {
singleUserResponse.setIsDefaultPwd(0);
@ -323,11 +330,11 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
public ElectromagneticResult<?> changePassword(String userId, String newPassword) {
User user = this.getById(userId);
Assert.notNull(user, StrFormatter.format("用户ID {} 无效", userId));
String decodeNewPwd = AESUtils.decrypt(newPassword, UserConstants.SECRET_KEY);
String decodeNewPwd = AESUtils.decrypt(newPassword, elePropertyConfig.getLoginEncPasswd());
Assert.isTrue(!decodeNewPwd.contains(user.getUserAccount()), "密码最小长度为8必须至少包含一个大写字母、一个小写字母、一个特殊字符、数字、不可包含账号");
Assert.isTrue(EleCommonUtil.isPwdValid(decodeNewPwd), "密码最小长度为8必须至少包含一个大写字母、一个小写字母、一个特殊字符、数字、不可包含账号");
user.setUserPwd(SignUtils.MD5(decodeNewPwd + user.getSalt()));
user.setUserPwd(EleCommonUtil.getStrMd5(decodeNewPwd + user.getSalt()));
boolean success = this.updateById(user);
UserThreadLocal.setSuccessInfo("", userId, StrFormatter.format("修改了用户密码"));
return ElectromagneticResultUtil.success(success);
@ -344,7 +351,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
User user = this.getById(userId);
Assert.notNull(user, StrFormatter.format("用户ID {} 无效", userId));
user.setUserPwd(SignUtils.MD5(UserConstants.DEFAULT_PASSWORD + user.getSalt()));
user.setUserPwd(EleCommonUtil.getStrMd5(UserConstants.DEFAULT_PASSWORD + user.getSalt()));
boolean success = this.updateById(user);
if (success) {
@ -418,7 +425,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
Assert.notNull(user, StrFormatter.format("用户不存在ID为 {}", userId));
// 解密并验证密码
String decodeOldPwd = AESUtils.decrypt(oldInputPassword, UserConstants.SECRET_KEY);
String decodeOldPwd = AESUtils.decrypt(oldInputPassword, elePropertyConfig.getLoginEncPasswd());
Boolean isValid = matchPassword(user, decodeOldPwd);
UserThreadLocal.setSuccessInfo("", "", "校验原始密码,当前密码与原始密码匹配结果 {}", isValid ? "通过" : "不通过");
return ElectromagneticResultUtil.success(isValid);

View File

@ -18,7 +18,7 @@ import com.electromagnetic.industry.software.common.enums.UserOperationModuleEnu
import com.electromagnetic.industry.software.common.pojo.BackupFileResLog;
import com.electromagnetic.industry.software.common.pojo.UserLoginInfo;
import com.electromagnetic.industry.software.common.util.EleCommonUtil;
import com.electromagnetic.industry.software.common.util.IdWorker;
import com.electromagnetic.industry.software.common.util.EleIdCreator;
import com.electromagnetic.industry.software.common.util.UserThreadLocal;
import com.electromagnetic.industry.software.manage.config.ElePropertyConfig;
import com.electromagnetic.industry.software.manage.mapper.EdFileInfoMapper;
@ -109,7 +109,7 @@ public class BackupTask {
BackupFileResLog resLog = backupHandler.backupFiles(fileSysPath);
long endTime = System.currentTimeMillis();
FileBackupLog backupLog = new FileBackupLog()
.setId(IdWorker.getSnowFlakeIdString())
.setId(EleIdCreator.createSnowflakeId())
.setFileId(edFileInfo.getId())
.setFileCode(edFileInfo.getFileCode())
.setBackupSuccess(resLog.getBackupSuccess())
@ -154,7 +154,7 @@ public class BackupTask {
for (File file : files) {
fileSystemService.deleteFile(file.getAbsolutePath());
UserAccessLog userAccessLog = new UserAccessLog()
.setId(IdWorker.getSnowFlakeIdString())
.setId(EleIdCreator.createSnowflakeId())
.setUserId("")
.setAccessStartTime(new Date())
.setAccessEndTime(new Date())
@ -212,7 +212,7 @@ public class BackupTask {
List<FileBackupLog> failBacks = fileBackupLogs.stream().filter(FileBackupLog::isBackupSuccess).toList();
if (CollUtil.isEmpty(failBacks)) {
FileBackupLog backupLog = new FileBackupLog()
.setId(IdWorker.getSnowFlakeIdString())
.setId(EleIdCreator.createSnowflakeId())
.setFileId(Base64.encode(fileName))
.setFileCode(Base64.encode(fileName))
.setBackupSuccess(resLog.getBackupSuccess())
@ -277,7 +277,7 @@ public class BackupTask {
}
// 2 分钟执行一次
@Scheduled(cron = "0 */2 * * * ?")
@Scheduled(cron = "0 0 4 * * ?")
public void updateFileStatus() {
DateTime twoMinutesAgo = DateUtil.offsetMinute(DateUtil.date(), -2);
edFileInfoMapper.update(Wrappers.<EdFileInfo>lambdaUpdate().set(EdFileInfo::getDataStatus, EleDataStatusEnum.PUBLISHED.code).le(EdFileInfo::getUpdatedTime, twoMinutesAgo));

View File

@ -64,3 +64,4 @@ backup.mysql.path=/workspace/mysqlbak/test
backup.mysql.script.path=/workspace/mysqlbak/back_dev.sh
file.enc.passwd=123456
login.enc.passwd=123456

View File

@ -15,97 +15,128 @@
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jwt.version>0.9.0</jwt.version>
<jwt.version>0.13.0</jwt.version>
<lombok.version>1.18.36</lombok.version>
<hutool.version>5.8.22</hutool.version>
<logback.version>1.5.16</logback.version>
<rapidocr.version>0.0.7</rapidocr.version>
<rapidocr-onnx.version>1.2.2</rapidocr-onnx.version>
<documents4j.version>1.0.3</documents4j.version>
<bcprov.version>1.78</bcprov.version>
<fr.opensagres.xdocreport.version>2.0.1</fr.opensagres.xdocreport.version>
<poi-ooxml.version>4.1.2</poi-ooxml.version>
<poi-scratchpad.version>4.1.2</poi-scratchpad.version>
<poi-ooxml-schemas.version>4.1.0</poi-ooxml-schemas.version>
<commons-compress.version>1.26.0</commons-compress.version>
<pdfbox.version>3.0.3</pdfbox.version>
<jaxb-impl.version>2.3.3</jaxb-impl.version>
<jbig2-imageio.version>3.0.2</jbig2-imageio.version>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.36</version>
<version>${lombok.version}</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>${jwt.version}</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk18on</artifactId>
<version>1.77</version>
<version>${bcprov.version}</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.22</version>
<version>${hutool.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.5.16</version>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.5.16</version>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.poi.xwpf.converter.pdf-gae</artifactId>
<version>2.0.1</version>
<version>${fr.opensagres.xdocreport.version}</version>
</dependency>
<dependency>
<groupId>com.documents4j</groupId>
<artifactId>documents4j-local</artifactId>
<version>1.0.3</version>
<version>${documents4j.version}</version>
</dependency>
<dependency>
<groupId>com.documents4j</groupId>
<artifactId>documents4j-transformer-msoffice-word</artifactId>
<version>1.0.3</version>
<version>${documents4j.version}</version>
</dependency>
<!--处理word文档需要的额外的jar包-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
<exclusions>
<exclusion>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
</exclusion>
</exclusions>
<version>${poi-ooxml.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>${commons-compress.version}</version>
</dependency>
<!--处理word文档需要的额外的jar包-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.0</version>
<version>${poi-ooxml-schemas.version}</version>
</dependency>
<!-- POI-word文件处理需要 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>4.1.2</version>
<version>${poi-scratchpad.version}</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
<version>${pdfbox.version}</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.3</version>
<version>${jaxb-impl.version}</version>
</dependency>
<dependency>
<groupId>io.github.mymonstercat</groupId>
<artifactId>rapidocr</artifactId>
<version>0.0.7</version>
<version>${rapidocr.version}</version>
</dependency>
<!-- 一般只需要引入一个CPU端建议使用onnx移动端建议使用ncnn -->
@ -113,17 +144,19 @@
<dependency>
<groupId>io.github.mymonstercat</groupId>
<artifactId>rapidocr-onnx-platform</artifactId>
<version>0.0.7</version>
<version>${rapidocr.version}</version>
</dependency>
<dependency>
<groupId>io.github.mymonstercat</groupId>
<artifactId>rapidocr-onnx-linux-x86_64</artifactId>
<version>1.2.2</version>
<version>${rapidocr-onnx.version}</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>jbig2-imageio</artifactId>
<version>3.0.2</version>
<version>${jbig2-imageio.version}</version>
</dependency>
</dependencies>

View File

@ -22,11 +22,6 @@ public interface UserConstants {
*/
long DEFAULT_EXPIRE_TIME = 7 * 24 * 60 * 60 * 1000;
/**
* 令牌密钥
*/
String SECRET_KEY = "5JKRGV0QO4WK1WCWVK55YEU0A1NPOXOP";
/**
* 令牌前缀
*/

View File

@ -12,7 +12,7 @@ public enum EffectFlagEnum {
*/
EFFECT(1, "有效"),
/**
* 无效PermisionService
* 无效
*/
NOT_EFFECTIVE(0, "无效");

View File

@ -1,17 +1,10 @@
package com.electromagnetic.industry.software.common.util;
import cn.hutool.core.codec.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
/**
* <p>Description: [AES对称加密和解密]</p>
@ -31,13 +24,16 @@ public class AESUtils {
*/
public static String decrypt(String enc, String key) {
try {
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "AES");
Security.addProvider(new BouncyCastleProvider());
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
return new String(cipher.doFinal(Base64.decode(enc)));
} catch (NoSuchPaddingException | IllegalBlockSizeException | NoSuchAlgorithmException | BadPaddingException |
InvalidKeyException e) {
// 1. 还原密钥
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES");
// 2. 创建 Cipher
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
// 3. 初始化解密
cipher.init(Cipher.DECRYPT_MODE, keySpec);
// 4. 解密
byte[] plainBytes = cipher.doFinal(Base64.getDecoder().decode(enc));
return new String(plainBytes, StandardCharsets.UTF_8);
} catch (Exception e) {
throw new RuntimeException(e);
}
}

View File

@ -2,7 +2,9 @@ package com.electromagnetic.industry.software.common.util;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.HexUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil;
import cn.hutool.crypto.symmetric.AES;
import com.electromagnetic.industry.software.common.exception.BizException;
import com.electromagnetic.industry.software.common.parse.*;
@ -184,4 +186,9 @@ public final class EleCommonUtil {
return startValid && endValid && orderValid;
}
public static String getStrMd5(String str) {
byte[] md5Bytes = DigestUtil.md5(str);
return HexUtil.encodeHexStr(md5Bytes);
}
}

View File

@ -0,0 +1,15 @@
package com.electromagnetic.industry.software.common.util;
import cn.hutool.core.util.IdUtil;
public class EleIdCreator {
public static String createSnowflakeId() {
return createSnowflakeIdNum() + "";
}
public static long createSnowflakeIdNum() {
return IdUtil.getSnowflake(1, 1).nextId();
}
}

View File

@ -1,152 +0,0 @@
package com.electromagnetic.industry.software.common.util;
import java.lang.management.ManagementFactory;
import java.net.InetAddress;
import java.net.NetworkInterface;
public class IdWorker {
// 时间起始标记点作为基准一般取系统的最近时间一旦确定不能变动
private final static long twepoch = 1288834974657L;
// 机器标识位数
private final static long workerIdBits = 5L;
// 数据中心标识位数
private final static long datacenterIdBits = 5L;
// 机器ID最大值
private final static long maxWorkerId = -1L ^ (-1L << workerIdBits);
// 数据中心ID最大值
private final static long maxDatacenterId = -1L ^ (-1L << datacenterIdBits);
// 毫秒内自增位
private final static long sequenceBits = 12L;
// 机器ID偏左移12位
private final static long workerIdShift = sequenceBits;
// 数据中心ID左移17位
private final static long datacenterIdShift = sequenceBits + workerIdBits;
// 时间毫秒左移22位
private final static long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits;
private final static long sequenceMask = -1L ^ (-1L << sequenceBits);
private static final IdWorker idWorker = new IdWorker();
/* 上次生产id时间戳 */
private static long lastTimestamp = -1L;
private final long workerId;
// 数据标识id部分
private final long datacenterId;
// 0并发控制
private long sequence = 0L;
public IdWorker() {
this.datacenterId = getDatacenterId(maxDatacenterId);
this.workerId = getMaxWorkerId(datacenterId, maxWorkerId);
}
/**
* @param workerId 工作机器ID
* @param datacenterId 序列号
*/
public IdWorker(long workerId, long datacenterId) {
if (workerId > maxWorkerId || workerId < 0) {
throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", maxWorkerId));
}
if (datacenterId > maxDatacenterId || datacenterId < 0) {
throw new IllegalArgumentException(String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId));
}
this.workerId = workerId;
this.datacenterId = datacenterId;
}
/**
* <p>
* 获取 maxWorkerId
* </p>
*/
protected static long getMaxWorkerId(long datacenterId, long maxWorkerId) {
StringBuffer mpid = new StringBuffer();
mpid.append(datacenterId);
String name = ManagementFactory.getRuntimeMXBean().getName();
if (!name.isEmpty()) {
/*
* GET jvmPid
*/
mpid.append(name.split("@")[0]);
}
/*
* MAC + PID hashcode 获取16个低位
*/
return (mpid.toString().hashCode() & 0xffff) % (maxWorkerId + 1);
}
/**
* <p>
* 数据标识id部分
* </p>
*/
protected static long getDatacenterId(long maxDatacenterId) {
long id = 0L;
try {
InetAddress ip = InetAddress.getLocalHost();
NetworkInterface network = NetworkInterface.getByInetAddress(ip);
if (network == null) {
id = 1L;
} else {
byte[] mac = network.getHardwareAddress();
id = ((0x000000FF & (long) mac[mac.length - 1])
| (0x0000FF00 & (((long) mac[mac.length - 2]) << 8))) >> 6;
id = id % (maxDatacenterId + 1);
}
} catch (Exception e) {
System.out.println(" getDatacenterId: " + e.getMessage());
}
return id;
}
public static long getSnowFlakeId() {
return idWorker.nextId();
}
public static String getSnowFlakeIdString() {
return String.valueOf(getSnowFlakeId());
}
/**
* 获取下一个ID
*
* @return
*/
public synchronized long nextId() {
long timestamp = timeGen();
if (timestamp < lastTimestamp) {
throw new RuntimeException(String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp));
}
if (lastTimestamp == timestamp) {
// 当前毫秒内+1
sequence = (sequence + 1) & sequenceMask;
if (sequence == 0) {
// 当前毫秒内计数满了则等待下一秒
timestamp = tilNextMillis(lastTimestamp);
}
} else {
sequence = 0L;
}
lastTimestamp = timestamp;
// ID偏移组合生成最终的ID并返回ID
long nextId = ((timestamp - twepoch) << timestampLeftShift)
| (datacenterId << datacenterIdShift)
| (workerId << workerIdShift) | sequence;
return nextId;
}
private long tilNextMillis(final long lastTimestamp) {
long timestamp = this.timeGen();
while (timestamp <= lastTimestamp) {
timestamp = this.timeGen();
}
return timestamp;
}
private long timeGen() {
return System.currentTimeMillis();
}
}

View File

@ -1,38 +0,0 @@
package com.electromagnetic.industry.software.common.util;
import lombok.extern.slf4j.Slf4j;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
@Slf4j
public class SignUtils {
/**
* 获取MD5加密后的字符串
*
* @param str 加密前的字符串
* @return
*/
public static String MD5(String str) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.reset();
md.update(str.getBytes(StandardCharsets.UTF_8));
byte[] byteArray = md.digest();
StringBuffer md5StrBuff = new StringBuffer();
for (int i = 0; i < byteArray.length; i++) {
if (Integer.toHexString(0xFF & byteArray[i]).length() == 1) {
md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));
} else {
md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
}
}
return md5StrBuff.toString();
} catch (Exception e) {
log.error(e.getMessage(), e);
return null;
}
}
}

View File

@ -1,8 +1,10 @@
package com.electromagnetic.industry.software.common.util;
import com.electromagnetic.industry.software.common.cons.UserConstants;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import java.nio.charset.StandardCharsets;
public class TokenUtil {
@ -12,11 +14,12 @@ public class TokenUtil {
* @param token
* @return
*/
public static Claims getLoginInfo(String token) {
return Jwts.parser()
.setSigningKey(UserConstants.SECRET_KEY)
.parseClaimsJws(token)
.getBody();
public static Claims getLoginInfo(String token, String loginEncode) {
return Jwts.parser() // 返回 JwtParserBuilder
.verifyWith(Keys.hmacShaKeyFor(loginEncode.getBytes(StandardCharsets.UTF_8)))
.build()
.parseSignedClaims(token) // 对应原来的 parseClaimsJws
.getPayload(); // 对应原来的 getBody()
}
}