From 0bdc8c88f948f0d025f937c2f7b7b25bb53d98ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B3=BD=E7=92=8B?= <2833784085@qq.com@user.noreply.gitee.com> Date: Wed, 26 Jun 2024 20:43:13 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BB=E5=BD=95=E9=9B=86=E6=88=90shiro?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/compiler.xml | 7 +- .idea/encodings.xml | 10 + .idea/misc.xml | 4 + .idea/workspace.xml | 267 +++++++++-------- etl-auth/etl-auth-common/pom.xml | 55 ++++ .../auth/common/entity/PathPermission.java | 33 +++ .../auth/common/entity/RolesPermission.java | 24 ++ .../com/auth/common/entity/UserAccount.java | 26 ++ .../common/enums/PermissionConstants.java | 13 + etl-auth/etl-auth-server/pom.xml | 154 ++++++++++ .../auth/server/EtlAuthServerApplication.java | 25 ++ .../java/com/auth/server/config/MD5s.java | 44 +++ .../com/auth/server/config/MvcConfig.java | 18 ++ .../com/auth/server/config/ShiroConfig.java | 69 +++++ .../server/controller/LoginControler.java | 84 ++++++ .../controller/PermissionController.java | 52 ++++ .../server/interceptor/UserInterceptor.java | 31 ++ .../com/auth/server/mapper/PathMapper.java | 8 + .../auth/server/mapper/PermissionMapper.java | 8 + .../auth/server/mapper/UserMangeMapper.java | 12 + .../com/auth/server/service/PathService.java | 9 + .../server/service/PermissionService.java | 11 + .../server/service/UserManageService.java | 15 + .../server/service/impl/PathServiceImpl.java | 16 ++ .../service/impl/PermissionServiceImpl.java | 61 ++++ .../service/impl/UserManageServiceImpl.java | 168 +++++++++++ .../com/auth/server/util/SecurityUtils.java | 37 +++ .../java/com/auth/server/util/UserRealm.java | 65 +++++ .../src/main/resources/bootstrap.yml | 51 ++++ .../src/main/resources/mapper/PathMapper.xml | 6 + .../resources/mapper/PermissionMapper.xml | 6 + .../main/resources/mapper/UserMangeMapper.xml | 6 + .../src/main/resources/static/index.html | 6 + .../server/EtlAuthServerApplicationTests.java | 31 ++ .../target/classes/bootstrap.yml | 51 ++++ .../server/EtlAuthServerApplication.class | Bin 0 -> 1363 bytes .../classes/com/auth/server/config/MD5s.class | Bin 0 -> 2016 bytes .../com/auth/server/config/ShiroConfig.class | Bin 0 -> 2813 bytes .../server/controller/LoginControler.class | Bin 0 -> 2142 bytes .../controller/PermissionController.class | Bin 0 -> 3600 bytes .../com/auth/server/mapper/PathMapper.class | Bin 0 -> 310 bytes .../auth/server/mapper/PermissionMapper.class | Bin 0 -> 323 bytes .../auth/server/mapper/UserMangeMapper.class | Bin 0 -> 398 bytes .../com/auth/server/service/PathService.class | Bin 0 -> 321 bytes .../server/service/PermissionService.class | Bin 0 -> 466 bytes .../server/service/UserManageService.class | Bin 0 -> 707 bytes .../server/service/impl/PathServiceImpl.class | Bin 0 -> 888 bytes .../service/impl/PermissionServiceImpl.class | Bin 0 -> 3757 bytes .../service/impl/UserManageServiceImpl.class | Bin 0 -> 8494 bytes .../com/auth/server/util/SecurityUtils.class | Bin 0 -> 1126 bytes .../com/auth/server/util/UserRealm.class | Bin 0 -> 3559 bytes .../target/classes/mapper/PathMapper.xml | 6 + .../classes/mapper/PermissionMapper.xml | 6 + .../target/classes/mapper/UserMangeMapper.xml | 6 + .../target/classes/static/index.html | 6 + .../auth/common/entity/PathPermission.class | Bin 0 -> 4351 bytes .../auth/common/entity/RolesPermission.class | Bin 0 -> 2923 bytes .../com/auth/common/entity/UserAccount.class | Bin 0 -> 3149 bytes .../common/enums/PermissionConstants.class | Bin 0 -> 703 bytes .../EtlAuthServerApplicationTests.class | Bin 0 -> 1674 bytes etl-auth/pom.xml | 24 ++ .../etl/common/constants/TokenConstants.java | 8 + .../etl/common/enums/ResponseCodeEnum.java | 29 ++ .../com/etl/common/result/CommonResult.java | 22 ++ .../etl/common/constants/TokenConstants.class | Bin 524 -> 614 bytes .../etl/common/enums/ResponseCodeEnum.class | Bin 0 -> 2176 bytes .../com/etl/common/result/CommonResult.class | Bin 0 -> 3845 bytes .../data/source/common/pojo/DataSource.java | 5 +- .../source/common/pojo/DatabaseConfig.java | 3 +- .../com/etl/data/source/common/pojo/Task.java | 4 +- .../data/source/common/pojo/DataSource.class | Bin 8432 -> 7858 bytes .../source/common/pojo/DatabaseConfig.class | Bin 4630 -> 5283 bytes .../etl/data/source/common/pojo/Task.class | Bin 0 -> 6841 bytes .../controller/DataSheetController.java | 3 + .../server/controller/DatabaseController.java | 13 + .../server/controller/RuleController.java | 57 ++++ .../server/controller/TaskController.java | 2 +- .../source/server/mapper/CodeBaseMapper.java | 13 + .../source/server/mapper/RuleBaseMapper.java | 13 + .../server/service/DatabaseService.java | 1 + .../source/server/service/RuleService.java | 27 ++ .../service/impl/DatabaseServiceImpl.java | 114 +++++++- .../server/service/impl/RuleServiceImpl.java | 95 +++++++ .../controller/DataSheetController.class | Bin 0 -> 676 bytes .../controller/DataSourceController.class | Bin 2647 -> 2653 bytes .../controller/DatabaseController.class | Bin 4130 -> 4742 bytes .../server/controller/RuleController.class | Bin 0 -> 2753 bytes .../server/controller/TaskController.class | Bin 0 -> 2856 bytes .../source/server/mapper/CodeBaseMapper.class | Bin 0 -> 312 bytes .../server/mapper/DataSheetMapper.class | Bin 0 -> 145 bytes .../source/server/mapper/RuleBaseMapper.class | Bin 0 -> 312 bytes .../source/server/mapper/TaskMapper.class | Bin 0 -> 304 bytes .../server/service/DataSheetService.class | Bin 0 -> 148 bytes .../server/service/DatabaseService.class | Bin 862 -> 1032 bytes .../source/server/service/RuleService.class | Bin 0 -> 816 bytes .../source/server/service/TaskService.class | Bin 0 -> 501 bytes .../service/impl/DataSheetServiceImpl.class | Bin 0 -> 658 bytes .../service/impl/DatabaseServiceImpl.class | Bin 10537 -> 14229 bytes .../server/service/impl/RuleServiceImpl.class | Bin 0 -> 8103 bytes .../server/service/impl/TaskServiceImpl.class | Bin 0 -> 2697 bytes etl-gateway/pom.xml | 56 +++- .../etl/gateway/EtlGatewayApplication.java | 2 + .../gateway/config/WhiteListProperties.java | 14 + .../com/etl/gateway/filters/AuthFilter.java | 184 ++++++------ .../gateway/filters/JwtAuthCheckFilter.java | 134 +++++++++ .../com/etl/gateway/filters/LogFilter.java | 6 +- etl-gateway/src/main/resources/bootstrap.yml | 40 +-- etl-groovy/pom.xml | 63 ++++ .../groovy/SpringBootGroovyApplication.java | 20 ++ .../controller/GrooyTestController.java | 43 +++ .../java/com/etl/groovy/entity/Address.java | 15 + .../com/etl/groovy/mapper/AddressMapper.java | 12 + .../etl/groovy/service/GroovyTestService.java | 18 ++ .../etl/groovy/util/SpringContextUtil.java | 57 ++++ etl-groovy/src/main/resources/bootstrap.yml | 23 ++ .../etl/groovy/EtlGroovyApplicationTests.java | 13 + etl-groovy/target/classes/bootstrap.yml | 23 ++ .../groovy/SpringBootGroovyApplication.class | Bin 0 -> 1632 bytes .../com/etl/groovy/entity/Address.class | Bin 0 -> 1923 bytes .../com/etl/groovy/mapper/AddressMapper.class | Bin 0 -> 579 bytes .../groovy/service/GroovyTestService.class | Bin 0 -> 697 bytes .../etl/groovy/util/SpringContextUtil.class | Bin 0 -> 1633 bytes etl-jwt-manage/pom.xml | 136 +++++++++ .../com/etl/jwt/config/AuthJwtProperties.java | 41 +++ .../java/com/etl/jwt/util/JwtTokenUtil.java | 269 ++++++++++++++++++ .../spring-configuration-metadata.json | 54 ++++ .../etl/jwt/config/AuthJwtProperties.class | Bin 0 -> 5180 bytes .../com/etl/jwt/util/JwtTokenUtil.class | Bin 0 -> 8412 bytes .../target/etl-jwt-manage-1.0-SNAPSHOT.jar | Bin 0 -> 8961 bytes .../target/maven-archiver/pom.properties | 5 + .../compile/default-compile/createdFiles.lst | 3 + .../compile/default-compile/inputFiles.lst | 2 + .../default-testCompile/createdFiles.lst | 0 .../default-testCompile/inputFiles.lst | 0 pom.xml | 5 + 135 files changed, 2913 insertions(+), 265 deletions(-) create mode 100644 etl-auth/etl-auth-common/pom.xml create mode 100644 etl-auth/etl-auth-common/src/main/java/com/auth/common/entity/PathPermission.java create mode 100644 etl-auth/etl-auth-common/src/main/java/com/auth/common/entity/RolesPermission.java create mode 100644 etl-auth/etl-auth-common/src/main/java/com/auth/common/entity/UserAccount.java create mode 100644 etl-auth/etl-auth-common/src/main/java/com/auth/common/enums/PermissionConstants.java create mode 100644 etl-auth/etl-auth-server/pom.xml create mode 100644 etl-auth/etl-auth-server/src/main/java/com/auth/server/EtlAuthServerApplication.java create mode 100644 etl-auth/etl-auth-server/src/main/java/com/auth/server/config/MD5s.java create mode 100644 etl-auth/etl-auth-server/src/main/java/com/auth/server/config/MvcConfig.java create mode 100644 etl-auth/etl-auth-server/src/main/java/com/auth/server/config/ShiroConfig.java create mode 100644 etl-auth/etl-auth-server/src/main/java/com/auth/server/controller/LoginControler.java create mode 100644 etl-auth/etl-auth-server/src/main/java/com/auth/server/controller/PermissionController.java create mode 100644 etl-auth/etl-auth-server/src/main/java/com/auth/server/interceptor/UserInterceptor.java create mode 100644 etl-auth/etl-auth-server/src/main/java/com/auth/server/mapper/PathMapper.java create mode 100644 etl-auth/etl-auth-server/src/main/java/com/auth/server/mapper/PermissionMapper.java create mode 100644 etl-auth/etl-auth-server/src/main/java/com/auth/server/mapper/UserMangeMapper.java create mode 100644 etl-auth/etl-auth-server/src/main/java/com/auth/server/service/PathService.java create mode 100644 etl-auth/etl-auth-server/src/main/java/com/auth/server/service/PermissionService.java create mode 100644 etl-auth/etl-auth-server/src/main/java/com/auth/server/service/UserManageService.java create mode 100644 etl-auth/etl-auth-server/src/main/java/com/auth/server/service/impl/PathServiceImpl.java create mode 100644 etl-auth/etl-auth-server/src/main/java/com/auth/server/service/impl/PermissionServiceImpl.java create mode 100644 etl-auth/etl-auth-server/src/main/java/com/auth/server/service/impl/UserManageServiceImpl.java create mode 100644 etl-auth/etl-auth-server/src/main/java/com/auth/server/util/SecurityUtils.java create mode 100644 etl-auth/etl-auth-server/src/main/java/com/auth/server/util/UserRealm.java create mode 100644 etl-auth/etl-auth-server/src/main/resources/bootstrap.yml create mode 100644 etl-auth/etl-auth-server/src/main/resources/mapper/PathMapper.xml create mode 100644 etl-auth/etl-auth-server/src/main/resources/mapper/PermissionMapper.xml create mode 100644 etl-auth/etl-auth-server/src/main/resources/mapper/UserMangeMapper.xml create mode 100644 etl-auth/etl-auth-server/src/main/resources/static/index.html create mode 100644 etl-auth/etl-auth-server/src/test/java/com/auth/server/EtlAuthServerApplicationTests.java create mode 100644 etl-auth/etl-auth-server/target/classes/bootstrap.yml create mode 100644 etl-auth/etl-auth-server/target/classes/com/auth/server/EtlAuthServerApplication.class create mode 100644 etl-auth/etl-auth-server/target/classes/com/auth/server/config/MD5s.class create mode 100644 etl-auth/etl-auth-server/target/classes/com/auth/server/config/ShiroConfig.class create mode 100644 etl-auth/etl-auth-server/target/classes/com/auth/server/controller/LoginControler.class create mode 100644 etl-auth/etl-auth-server/target/classes/com/auth/server/controller/PermissionController.class create mode 100644 etl-auth/etl-auth-server/target/classes/com/auth/server/mapper/PathMapper.class create mode 100644 etl-auth/etl-auth-server/target/classes/com/auth/server/mapper/PermissionMapper.class create mode 100644 etl-auth/etl-auth-server/target/classes/com/auth/server/mapper/UserMangeMapper.class create mode 100644 etl-auth/etl-auth-server/target/classes/com/auth/server/service/PathService.class create mode 100644 etl-auth/etl-auth-server/target/classes/com/auth/server/service/PermissionService.class create mode 100644 etl-auth/etl-auth-server/target/classes/com/auth/server/service/UserManageService.class create mode 100644 etl-auth/etl-auth-server/target/classes/com/auth/server/service/impl/PathServiceImpl.class create mode 100644 etl-auth/etl-auth-server/target/classes/com/auth/server/service/impl/PermissionServiceImpl.class create mode 100644 etl-auth/etl-auth-server/target/classes/com/auth/server/service/impl/UserManageServiceImpl.class create mode 100644 etl-auth/etl-auth-server/target/classes/com/auth/server/util/SecurityUtils.class create mode 100644 etl-auth/etl-auth-server/target/classes/com/auth/server/util/UserRealm.class create mode 100644 etl-auth/etl-auth-server/target/classes/mapper/PathMapper.xml create mode 100644 etl-auth/etl-auth-server/target/classes/mapper/PermissionMapper.xml create mode 100644 etl-auth/etl-auth-server/target/classes/mapper/UserMangeMapper.xml create mode 100644 etl-auth/etl-auth-server/target/classes/static/index.html create mode 100644 etl-auth/etl-auth-server/target/production/etl-auth-common/com/auth/common/entity/PathPermission.class create mode 100644 etl-auth/etl-auth-server/target/production/etl-auth-common/com/auth/common/entity/RolesPermission.class create mode 100644 etl-auth/etl-auth-server/target/production/etl-auth-common/com/auth/common/entity/UserAccount.class create mode 100644 etl-auth/etl-auth-server/target/production/etl-auth-common/com/auth/common/enums/PermissionConstants.class create mode 100644 etl-auth/etl-auth-server/target/test-classes/com/auth/server/EtlAuthServerApplicationTests.class create mode 100644 etl-auth/pom.xml create mode 100644 etl-common/src/main/java/com/etl/common/enums/ResponseCodeEnum.java create mode 100644 etl-common/src/main/java/com/etl/common/result/CommonResult.java create mode 100644 etl-common/target/classes/com/etl/common/enums/ResponseCodeEnum.class create mode 100644 etl-common/target/classes/com/etl/common/result/CommonResult.class create mode 100644 etl-data-source/el-data-source-common/target/classes/com/etl/data/source/common/pojo/Task.class create mode 100644 etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/controller/RuleController.java create mode 100644 etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/mapper/CodeBaseMapper.java create mode 100644 etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/mapper/RuleBaseMapper.java create mode 100644 etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/service/RuleService.java create mode 100644 etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/service/impl/RuleServiceImpl.java create mode 100644 etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/controller/DataSheetController.class create mode 100644 etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/controller/RuleController.class create mode 100644 etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/controller/TaskController.class create mode 100644 etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/mapper/CodeBaseMapper.class create mode 100644 etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/mapper/DataSheetMapper.class create mode 100644 etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/mapper/RuleBaseMapper.class create mode 100644 etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/mapper/TaskMapper.class create mode 100644 etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/service/DataSheetService.class create mode 100644 etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/service/RuleService.class create mode 100644 etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/service/TaskService.class create mode 100644 etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/service/impl/DataSheetServiceImpl.class create mode 100644 etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/service/impl/RuleServiceImpl.class create mode 100644 etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/service/impl/TaskServiceImpl.class create mode 100644 etl-gateway/src/main/java/com/etl/gateway/config/WhiteListProperties.java create mode 100644 etl-gateway/src/main/java/com/etl/gateway/filters/JwtAuthCheckFilter.java create mode 100644 etl-groovy/pom.xml create mode 100644 etl-groovy/src/main/java/com/etl/groovy/SpringBootGroovyApplication.java create mode 100644 etl-groovy/src/main/java/com/etl/groovy/controller/GrooyTestController.java create mode 100644 etl-groovy/src/main/java/com/etl/groovy/entity/Address.java create mode 100644 etl-groovy/src/main/java/com/etl/groovy/mapper/AddressMapper.java create mode 100644 etl-groovy/src/main/java/com/etl/groovy/service/GroovyTestService.java create mode 100644 etl-groovy/src/main/java/com/etl/groovy/util/SpringContextUtil.java create mode 100644 etl-groovy/src/main/resources/bootstrap.yml create mode 100644 etl-groovy/src/test/java/com/etl/groovy/EtlGroovyApplicationTests.java create mode 100644 etl-groovy/target/classes/bootstrap.yml create mode 100644 etl-groovy/target/classes/com/etl/groovy/SpringBootGroovyApplication.class create mode 100644 etl-groovy/target/classes/com/etl/groovy/entity/Address.class create mode 100644 etl-groovy/target/classes/com/etl/groovy/mapper/AddressMapper.class create mode 100644 etl-groovy/target/classes/com/etl/groovy/service/GroovyTestService.class create mode 100644 etl-groovy/target/classes/com/etl/groovy/util/SpringContextUtil.class create mode 100644 etl-jwt-manage/pom.xml create mode 100644 etl-jwt-manage/src/main/java/com/etl/jwt/config/AuthJwtProperties.java create mode 100644 etl-jwt-manage/src/main/java/com/etl/jwt/util/JwtTokenUtil.java create mode 100644 etl-jwt-manage/target/classes/META-INF/spring-configuration-metadata.json create mode 100644 etl-jwt-manage/target/classes/com/etl/jwt/config/AuthJwtProperties.class create mode 100644 etl-jwt-manage/target/classes/com/etl/jwt/util/JwtTokenUtil.class create mode 100644 etl-jwt-manage/target/etl-jwt-manage-1.0-SNAPSHOT.jar create mode 100644 etl-jwt-manage/target/maven-archiver/pom.properties create mode 100644 etl-jwt-manage/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 etl-jwt-manage/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 etl-jwt-manage/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst create mode 100644 etl-jwt-manage/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst diff --git a/.idea/compiler.xml b/.idea/compiler.xml index a33e3a2..e82e326 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -7,11 +7,14 @@ - + + + + - + diff --git a/.idea/encodings.xml b/.idea/encodings.xml index 79bdcc6..4f3820a 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -1,6 +1,12 @@ + + + + + + @@ -11,8 +17,12 @@ + + + + diff --git a/.idea/misc.xml b/.idea/misc.xml index 131a039..7750dd9 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -9,6 +9,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + - - - + + - + + + + + + + - - - @@ -340,7 +358,8 @@ - diff --git a/etl-auth/etl-auth-common/pom.xml b/etl-auth/etl-auth-common/pom.xml new file mode 100644 index 0000000..f1a8fab --- /dev/null +++ b/etl-auth/etl-auth-common/pom.xml @@ -0,0 +1,55 @@ + + + 4.0.0 + + com.bwie + etl-auth + 1.0-SNAPSHOT + + pom + etl-auth-common + + 1.8 + UTF-8 + UTF-8 + 2.6.13 + + + + com.bwie + etl-common + 1.0-SNAPSHOT + + + com.baomidou + mybatis-plus-boot-starter + + + org.springframework.boot + spring-boot-starter-jdbc + + + + com.mysql + mysql-connector-j + runtime + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + io.swagger + swagger-annotations + 1.6.6 + compile + + + diff --git a/etl-auth/etl-auth-common/src/main/java/com/auth/common/entity/PathPermission.java b/etl-auth/etl-auth-common/src/main/java/com/auth/common/entity/PathPermission.java new file mode 100644 index 0000000..43726c2 --- /dev/null +++ b/etl-auth/etl-auth-common/src/main/java/com/auth/common/entity/PathPermission.java @@ -0,0 +1,33 @@ +package com.auth.common.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@TableName("t_data_source") +public class PathPermission { + @TableId(value = "id",type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "权限代号") + private String permissionCode; + + @ApiModelProperty(value = "路由层次") + private String hierarchy; + + @ApiModelProperty(value = "路由") + private String path; + + @ApiModelProperty(value = "功能描述") + private String description; + + @ApiModelProperty(value = "状态 0-废弃 1-正在使用") + private boolean status; +} diff --git a/etl-auth/etl-auth-common/src/main/java/com/auth/common/entity/RolesPermission.java b/etl-auth/etl-auth-common/src/main/java/com/auth/common/entity/RolesPermission.java new file mode 100644 index 0000000..7860c7d --- /dev/null +++ b/etl-auth/etl-auth-common/src/main/java/com/auth/common/entity/RolesPermission.java @@ -0,0 +1,24 @@ +package com.auth.common.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@TableName("t_role_source") +@AllArgsConstructor +@NoArgsConstructor +public class RolesPermission { + @TableId(value = "id",type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "权限代号") + private String permissionCode; + + @ApiModelProperty(value = "角色") + private String role; +} diff --git a/etl-auth/etl-auth-common/src/main/java/com/auth/common/entity/UserAccount.java b/etl-auth/etl-auth-common/src/main/java/com/auth/common/entity/UserAccount.java new file mode 100644 index 0000000..db1f24e --- /dev/null +++ b/etl-auth/etl-auth-common/src/main/java/com/auth/common/entity/UserAccount.java @@ -0,0 +1,26 @@ +package com.auth.common.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@TableName("t_user") +public class UserAccount { + @TableId(value = "id",type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("角色") + private String roles; + + @ApiModelProperty("名称") + private String username; + + @ApiModelProperty("密码/") + private String password; + +// @ApiModelProperty("uuid") +// private String UUID; +} diff --git a/etl-auth/etl-auth-common/src/main/java/com/auth/common/enums/PermissionConstants.java b/etl-auth/etl-auth-common/src/main/java/com/auth/common/enums/PermissionConstants.java new file mode 100644 index 0000000..25a97d9 --- /dev/null +++ b/etl-auth/etl-auth-common/src/main/java/com/auth/common/enums/PermissionConstants.java @@ -0,0 +1,13 @@ +package com.auth.common.enums; + +public class PermissionConstants { + public static final String ROLES = "roles"; + public static final String CODE_LIST = "codeList"; + public static final String ROLE = "role"; + public static final String PERMISSION_CODE = "permission_code"; + public static final String USER_CACHE_KEY = "user:username:"; + public static final String USER_KEY = "user:key:"; + public static final String USER_NAME = "username"; + + public static final String USER_ID = "userId"; +} diff --git a/etl-auth/etl-auth-server/pom.xml b/etl-auth/etl-auth-server/pom.xml new file mode 100644 index 0000000..9a080dc --- /dev/null +++ b/etl-auth/etl-auth-server/pom.xml @@ -0,0 +1,154 @@ + + + 4.0.0 + + com.bwie + etl-auth + 1.0-SNAPSHOT + + etl-auth-server + + 1.8 + UTF-8 + UTF-8 + 2.6.13 + 2021.0.5.0 + + + + com.bwie + etl-auth-common + 1.0-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + + org.apache.shiro + shiro-spring + 1.4.0 + + + io.springfox + springfox-swagger2 + 3.0.0 + + + com.bwie + etl-jwt-manage + 1.0-SNAPSHOT + + + servlet-api + javax.servlet + + + + + com.bwie + etl-common + 1.0-SNAPSHOT + + + com.mysql + mysql-connector-j + + + com.github.xiaoymin + knife4j-spring-boot-starter + 3.0.3 + + + com.baomidou + mybatis-plus-boot-starter + 3.5.4.1 + + + org.projectlombok + lombok + + + org.springframework.cloud + spring-cloud-starter-bootstrap + 3.1.7 + + + + org.apache.shiro + shiro-spring + 1.4.0 + + + org.springframework.boot + spring-boot-starter-web + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + ${spring-cloud-alibaba.version} + pom + import + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + UTF-8 + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot.version} + + com.auth.server.EtlAuthServerApplication + true + + + + repackage + + repackage + + + + + + + + diff --git a/etl-auth/etl-auth-server/src/main/java/com/auth/server/EtlAuthServerApplication.java b/etl-auth/etl-auth-server/src/main/java/com/auth/server/EtlAuthServerApplication.java new file mode 100644 index 0000000..b03809f --- /dev/null +++ b/etl-auth/etl-auth-server/src/main/java/com/auth/server/EtlAuthServerApplication.java @@ -0,0 +1,25 @@ +package com.auth.server; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; + +@SpringBootApplication +@MapperScan("com.auth.server.mapper") +@ComponentScan(basePackages = {"com.etl.jwt.util", "com.etl.jwt.config", + "com.auth.server.controller","com.auth.server.service","com.auth.server.service.impl","com.auth.server.config"}) +public class EtlAuthServerApplication { + + public static void main(String[] args) { + SpringApplication.run(EtlAuthServerApplication.class, args); + } + + @Bean + public BCryptPasswordEncoder encryptPasswordEncoder(){ + return new BCryptPasswordEncoder(); + } + +} diff --git a/etl-auth/etl-auth-server/src/main/java/com/auth/server/config/MD5s.java b/etl-auth/etl-auth-server/src/main/java/com/auth/server/config/MD5s.java new file mode 100644 index 0000000..cacd61c --- /dev/null +++ b/etl-auth/etl-auth-server/src/main/java/com/auth/server/config/MD5s.java @@ -0,0 +1,44 @@ +package com.auth.server.config; + + +import org.apache.http.util.TextUtils; +import org.apache.shiro.crypto.hash.HashRequest; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +/* + * MD5 算法 + */ + +public class MD5s { + + public static String md5(String string) { + if (TextUtils.isEmpty(string)) { + return ""; + } + MessageDigest md5 = null; + try { + md5 = MessageDigest.getInstance("MD5"); + byte[] bytes = md5.digest(string.getBytes()); + String result = ""; + for (byte b : bytes) { + String temp = Integer.toHexString(b & 0xff); + if (temp.length() == 1) { + temp = "0" + temp; + } + result += temp; + } + return result; + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + HashRequest request = new HashRequest.Builder() + .setAlgorithmName("MD5") // 使用 SHA-256 算法 + .setSource(string.getBytes()) // 要散列的密码(作为字节数组) + .build(); + //passwordService.encryptPassword(request); + return ""; + } + +} diff --git a/etl-auth/etl-auth-server/src/main/java/com/auth/server/config/MvcConfig.java b/etl-auth/etl-auth-server/src/main/java/com/auth/server/config/MvcConfig.java new file mode 100644 index 0000000..d9d7556 --- /dev/null +++ b/etl-auth/etl-auth-server/src/main/java/com/auth/server/config/MvcConfig.java @@ -0,0 +1,18 @@ +//package com.auth.server.config; +//import com.auth.server.interceptor.UserInterceptor; +//import com.auth.server.mapper.UserMangeMapper; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.context.annotation.Configuration; +//import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +//import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +//@Configuration +//public class MvcConfig implements WebMvcConfigurer { +// @Autowired +// private UserMangeMapper userMangeMapper; +// @Override +// public void addInterceptors(InterceptorRegistry registry) { +// //添加拦截器,排除/路径和 /login路径 +// registry.addInterceptor(new UserInterceptor(userMangeMapper)) +// .excludePathPatterns("/","/user/login"); +// } +//} diff --git a/etl-auth/etl-auth-server/src/main/java/com/auth/server/config/ShiroConfig.java b/etl-auth/etl-auth-server/src/main/java/com/auth/server/config/ShiroConfig.java new file mode 100644 index 0000000..0f29627 --- /dev/null +++ b/etl-auth/etl-auth-server/src/main/java/com/auth/server/config/ShiroConfig.java @@ -0,0 +1,69 @@ +package com.auth.server.config; + + +import com.auth.server.util.UserRealm; +import org.apache.shiro.authc.credential.HashedCredentialsMatcher; +import org.apache.shiro.spring.web.ShiroFilterFactoryBean; +import org.apache.shiro.web.mgt.DefaultWebSecurityManager; + +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.LinkedHashMap; +import java.util.Map; + +@Configuration +public class ShiroConfig { + + //此处用于实现授权功能,配置需要拦截的接口 + //此处用于实现授权功能,配置需要拦截的接口 + @Bean + public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("getDefaultWebSecurityManager") DefaultWebSecurityManager defaultWebSecurityManager) { + ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); + shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager); + //拦截页面 + Map filterMap = new LinkedHashMap<>(); + //登录/登出,所有人的权限 + filterMap.put("/user/login", "anon"); + filterMap.put("/user/logout", "anon"); + + shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap); + //未登录页面跳转 + shiroFilterFactoryBean.setLoginUrl("/user/show"); + //未有权限页面跳转 + shiroFilterFactoryBean.setUnauthorizedUrl("/user/unauthorized"); + + return shiroFilterFactoryBean; + } + + //注入对应的userRealm类 + @Bean + public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm) { + DefaultWebSecurityManager SecurityManager = new DefaultWebSecurityManager(); + SecurityManager.setRealm(userRealm); + return SecurityManager; + } + @Bean + public UserRealm userRealm() { + UserRealm userRealm = new UserRealm(); + //注册MD5加密 + userRealm.setCredentialsMatcher(hashedCredentialsMatcher()); + return userRealm; + } + + /** + * 设置shiro加密方式 + * @return HashedCredentialsMatcher + */ + @Bean + public HashedCredentialsMatcher hashedCredentialsMatcher(){ + HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher(); + // 使用md5 算法进行加密 + hashedCredentialsMatcher.setHashAlgorithmName("MD5"); + // 设置散列次数: 意为加密几次 + hashedCredentialsMatcher.setHashIterations(2); + + return hashedCredentialsMatcher; + } +} diff --git a/etl-auth/etl-auth-server/src/main/java/com/auth/server/controller/LoginControler.java b/etl-auth/etl-auth-server/src/main/java/com/auth/server/controller/LoginControler.java new file mode 100644 index 0000000..7aa273d --- /dev/null +++ b/etl-auth/etl-auth-server/src/main/java/com/auth/server/controller/LoginControler.java @@ -0,0 +1,84 @@ +package com.auth.server.controller; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.nacos.api.model.v2.Result; +import com.auth.common.entity.UserAccount; +import com.auth.common.enums.PermissionConstants; +import com.auth.server.service.UserManageService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.etl.common.enums.ResponseCodeEnum; +import com.etl.common.result.CommonResult; +import com.etl.jwt.util.JwtTokenUtil; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.*; +import org.apache.shiro.mgt.DefaultSecurityManager; +import org.apache.shiro.realm.SimpleAccountRealm; +import org.apache.shiro.subject.Subject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +/** + * 登录 controller层 + */ +@RestController +@Slf4j +@Api(tags = "登录-API") +@RequestMapping("/user") +public class LoginControler { + @Autowired + private UserManageService userManageService; + + /** + * 用户登录 (使用用户名) + * + * @param user + * @return + */ + @ApiOperation(value = "用户登录") + @ApiOperationSupport(author = "liz") + @RequestMapping(value = "/login", method = RequestMethod.POST) + public Result userLogin(@RequestBody UserAccount user) { + + return userManageService.userLogin(user); + + } + + + /** + * 刷新JWT令牌,用旧的令牌换新的令牌 + * 参数为需要刷新的令牌 + * header中携带刷新令牌 + */ + + /** + * 当认证服务返回给客户端的 JWT 也就是 access_token 过期后,客户端如果需要再次通过发送登录请求重新拿到 access_token会使得用户体验很不友好。 + * 而JWT 生成后是不能篡改里面的内容,即使是 JWT 的有效期也不行。所以延长 access_token 有效期的做法并不适合,而且如果长期保持一个 access_token 有效, + * 也是不安全的。所以我们时常使用refresh token来进行token的刷新。 + *

+ * 我们一般会把 refresh_token 设置的过期时间稍微长一点,比如两倍于 access_token,当 access_token 过期后,refresh_token 如果还没有过期, + * 就可以利用两者的过期时间差进行重新生成令牌的操作,也就是刷新令牌,同时删除掉redis中缓存的旧令牌。 + * + * @param token + * @return + */ + @RequestMapping(value = "/token/refresh", method = RequestMethod.GET) + @ApiOperation(value = "刷新令牌") + @ApiOperationSupport(author = "liz") + public CommonResult refreshToken(@RequestHeader(value = "${auth.jwt.header}") String token) { + + return userManageService.refreshToken(token); + + } +} diff --git a/etl-auth/etl-auth-server/src/main/java/com/auth/server/controller/PermissionController.java b/etl-auth/etl-auth-server/src/main/java/com/auth/server/controller/PermissionController.java new file mode 100644 index 0000000..1569cd3 --- /dev/null +++ b/etl-auth/etl-auth-server/src/main/java/com/auth/server/controller/PermissionController.java @@ -0,0 +1,52 @@ +package com.auth.server.controller; + +import com.auth.common.entity.PathPermission; +import com.auth.common.entity.RolesPermission; +import com.auth.common.enums.PermissionConstants; +import com.auth.server.service.PathService; +import com.auth.server.service.PermissionService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import io.swagger.annotations.Api; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +/** + * 角色权限 controller层 + */ +@RestController +@Api(tags ="权限-API") +@RequestMapping("/permission") +public class PermissionController { + @Autowired + private PermissionService permissionService; + + @Resource + private PathService pathService; + + @PostMapping("/permission/add") + public boolean permissionAdd(@RequestBody Map map) { + String roles = (String) map.get(PermissionConstants.ROLES); + List codeList = (List) map.get(PermissionConstants.CODE_LIST); + return permissionService.permissionAdd(roles, codeList); + } + + @GetMapping("/get") + public List pathGet(@RequestParam("roles") String roles) { + RolesPermission permission = permissionService.getOne(new QueryWrapper().eq(PermissionConstants.ROLE,roles)); + String codes = StringUtils.strip(permission.getPermissionCode(), "[]"); + List list = Arrays.asList(codes.split(",")); + List pathList = new ArrayList<>(); + for(String code:list){ + String api = pathService.getOne(new QueryWrapper().eq(PermissionConstants.PERMISSION_CODE,code.trim())).getPath(); + pathList.add(api); + } + return pathList; + } +} diff --git a/etl-auth/etl-auth-server/src/main/java/com/auth/server/interceptor/UserInterceptor.java b/etl-auth/etl-auth-server/src/main/java/com/auth/server/interceptor/UserInterceptor.java new file mode 100644 index 0000000..19a535d --- /dev/null +++ b/etl-auth/etl-auth-server/src/main/java/com/auth/server/interceptor/UserInterceptor.java @@ -0,0 +1,31 @@ +//package com.auth.server.interceptor; +//import com.auth.server.mapper.UserMangeMapper; +//import org.springframework.web.servlet.HandlerInterceptor; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import javax.servlet.http.HttpSession; +//public class UserInterceptor implements HandlerInterceptor { +// private UserMangeMapper userMangeMapper; +// public UserInterceptor(UserMangeMapper userMapper){ +// this.userMangeMapper=userMapper; +// } +// @Override +// public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { +// HttpSession session = request.getSession(); +// String username = (String) session.getAttribute("username"); +// //数据库 +// String UUID=userMangeMapper.getUUID(username); +// //session +// String uuid = (String)session.getAttribute("uuid"); +// System.out.println("uuid = " + uuid); +// System.out.println("UUID = " + UUID); +// if(UUID.equals(uuid)){ +// return true; +// }else { +// System.out.println("拦截"+request.getRequestURI()); +// response.sendRedirect("/login"); +// response.setStatus(401); +// return false; +// } +// } +//} diff --git a/etl-auth/etl-auth-server/src/main/java/com/auth/server/mapper/PathMapper.java b/etl-auth/etl-auth-server/src/main/java/com/auth/server/mapper/PathMapper.java new file mode 100644 index 0000000..e243793 --- /dev/null +++ b/etl-auth/etl-auth-server/src/main/java/com/auth/server/mapper/PathMapper.java @@ -0,0 +1,8 @@ +package com.auth.server.mapper; + +import com.auth.common.entity.PathPermission; +import com.auth.common.entity.RolesPermission; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface PathMapper extends BaseMapper { +} diff --git a/etl-auth/etl-auth-server/src/main/java/com/auth/server/mapper/PermissionMapper.java b/etl-auth/etl-auth-server/src/main/java/com/auth/server/mapper/PermissionMapper.java new file mode 100644 index 0000000..42e3bed --- /dev/null +++ b/etl-auth/etl-auth-server/src/main/java/com/auth/server/mapper/PermissionMapper.java @@ -0,0 +1,8 @@ +package com.auth.server.mapper; + + +import com.auth.common.entity.RolesPermission; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface PermissionMapper extends BaseMapper { +} diff --git a/etl-auth/etl-auth-server/src/main/java/com/auth/server/mapper/UserMangeMapper.java b/etl-auth/etl-auth-server/src/main/java/com/auth/server/mapper/UserMangeMapper.java new file mode 100644 index 0000000..9a770ef --- /dev/null +++ b/etl-auth/etl-auth-server/src/main/java/com/auth/server/mapper/UserMangeMapper.java @@ -0,0 +1,12 @@ +package com.auth.server.mapper; + + +import com.auth.common.entity.UserAccount; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface UserMangeMapper extends BaseMapper { + +} diff --git a/etl-auth/etl-auth-server/src/main/java/com/auth/server/service/PathService.java b/etl-auth/etl-auth-server/src/main/java/com/auth/server/service/PathService.java new file mode 100644 index 0000000..b555b70 --- /dev/null +++ b/etl-auth/etl-auth-server/src/main/java/com/auth/server/service/PathService.java @@ -0,0 +1,9 @@ +package com.auth.server.service; + +import com.auth.common.entity.PathPermission; +import com.auth.common.entity.RolesPermission; +import com.auth.common.entity.UserAccount; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface PathService extends IService { +} diff --git a/etl-auth/etl-auth-server/src/main/java/com/auth/server/service/PermissionService.java b/etl-auth/etl-auth-server/src/main/java/com/auth/server/service/PermissionService.java new file mode 100644 index 0000000..d487e57 --- /dev/null +++ b/etl-auth/etl-auth-server/src/main/java/com/auth/server/service/PermissionService.java @@ -0,0 +1,11 @@ +package com.auth.server.service; + +import com.auth.common.entity.RolesPermission; +import com.auth.common.entity.UserAccount; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +public interface PermissionService extends IService { + boolean permissionAdd(String roles, List codeList); +} diff --git a/etl-auth/etl-auth-server/src/main/java/com/auth/server/service/UserManageService.java b/etl-auth/etl-auth-server/src/main/java/com/auth/server/service/UserManageService.java new file mode 100644 index 0000000..949f8b8 --- /dev/null +++ b/etl-auth/etl-auth-server/src/main/java/com/auth/server/service/UserManageService.java @@ -0,0 +1,15 @@ +package com.auth.server.service; + +import com.alibaba.nacos.api.model.v2.Result; +import com.auth.common.entity.UserAccount; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.etl.common.result.CommonResult; + +public interface UserManageService extends IService { + + + Result userLogin(UserAccount user); + + CommonResult refreshToken(String token); +} diff --git a/etl-auth/etl-auth-server/src/main/java/com/auth/server/service/impl/PathServiceImpl.java b/etl-auth/etl-auth-server/src/main/java/com/auth/server/service/impl/PathServiceImpl.java new file mode 100644 index 0000000..8e4475a --- /dev/null +++ b/etl-auth/etl-auth-server/src/main/java/com/auth/server/service/impl/PathServiceImpl.java @@ -0,0 +1,16 @@ +package com.auth.server.service.impl; + +import com.auth.common.entity.PathPermission; +import com.auth.common.entity.RolesPermission; +import com.auth.server.mapper.PathMapper; +import com.auth.server.mapper.PermissionMapper; +import com.auth.server.service.PathService; +import com.auth.server.service.PermissionService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class PathServiceImpl extends ServiceImpl implements PathService { +} diff --git a/etl-auth/etl-auth-server/src/main/java/com/auth/server/service/impl/PermissionServiceImpl.java b/etl-auth/etl-auth-server/src/main/java/com/auth/server/service/impl/PermissionServiceImpl.java new file mode 100644 index 0000000..dc99f92 --- /dev/null +++ b/etl-auth/etl-auth-server/src/main/java/com/auth/server/service/impl/PermissionServiceImpl.java @@ -0,0 +1,61 @@ +package com.auth.server.service.impl; + +import com.auth.common.entity.RolesPermission; +import com.auth.common.enums.PermissionConstants; +import com.auth.server.mapper.PermissionMapper; +import com.auth.server.service.PermissionService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Collections; +import java.util.List; + +@Service +@Slf4j +public class PermissionServiceImpl extends ServiceImpl implements PermissionService { + @Autowired + private PermissionMapper permissionMapper; + + @Override + public boolean permissionAdd(String roles, List codeList) { + RolesPermission rolesPermission = new RolesPermission(); + rolesPermission.setRole(roles); + int result = 0; + RolesPermission role = getRoleByName(roles); + + if (role != null) { + result = updateRolePermission(rolesPermission, role, codeList); + } else { + result = insertRolePermission(rolesPermission, codeList); + } + return result > 0; + } + + private RolesPermission getRoleByName(String roleName) { + return permissionMapper.selectOne(new QueryWrapper().eq(PermissionConstants.ROLE, roleName)); + } + + private int updateRolePermission(RolesPermission rolesPermission, RolesPermission role, List codeList) { + //去掉头尾括号,并转为列表 + List list = new java.util.ArrayList<>(Collections.singletonList( + StringUtils.strip(role.getPermissionCode(), "[]"))); + //将新数据添加至列表 + list.addAll(codeList); + + rolesPermission.setPermissionCode(list.toString()); + rolesPermission.setId(role.getId()); + return permissionMapper.updateById(rolesPermission); + } + + private int insertRolePermission(RolesPermission rolesPermission, List codeList) { + if (codeList != null) { + rolesPermission.setPermissionCode(codeList.toString()); + } + return permissionMapper.insert(rolesPermission); + } + +} diff --git a/etl-auth/etl-auth-server/src/main/java/com/auth/server/service/impl/UserManageServiceImpl.java b/etl-auth/etl-auth-server/src/main/java/com/auth/server/service/impl/UserManageServiceImpl.java new file mode 100644 index 0000000..a594d0a --- /dev/null +++ b/etl-auth/etl-auth-server/src/main/java/com/auth/server/service/impl/UserManageServiceImpl.java @@ -0,0 +1,168 @@ +package com.auth.server.service.impl; + + +import com.alibaba.fastjson2.JSON; +import com.alibaba.nacos.api.model.v2.Result; +import com.auth.common.entity.UserAccount; +import com.auth.common.enums.PermissionConstants; +import com.auth.server.config.MD5s; +import com.auth.server.mapper.UserMangeMapper; +import com.auth.server.service.UserManageService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.etl.common.enums.ResponseCodeEnum; +import com.etl.common.result.CommonResult; +import com.etl.jwt.util.JwtTokenUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.*; +import org.apache.shiro.mgt.DefaultSecurityManager; +import org.apache.shiro.realm.SimpleAccountRealm; +import org.apache.shiro.subject.Subject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +import static java.lang.System.nanoTime; + +@Service +@Slf4j +public class UserManageServiceImpl extends ServiceImpl implements UserManageService { + @Resource + private StringRedisTemplate stringRedisTemplate; + + @Resource + private JwtTokenUtil jwtTokenUtil; + + @Autowired + private UserMangeMapper UserMangeMapper; + + @Override + public Result userLogin(UserAccount user) { + long startTime = nanoTime(); + // 获取用户名 + String username = user.getUsername(); + // 获取密码 + String password = user.getPassword(); + // 参数校验 + Result result = checkUser(username, password); + if (result != null) { + return result; + } + // 创建SimpleAccountRealm并添加账户信息 + SimpleAccountRealm simpleAccountRealm = new SimpleAccountRealm(); + // 确保这里添加的用户名和密码与用户提供的匹配 + simpleAccountRealm.addAccount(username, password); + // 配置SecurityManager并设置Realm + DefaultSecurityManager securityManager = new DefaultSecurityManager(simpleAccountRealm); + securityManager.setRealm(simpleAccountRealm); + SecurityUtils.setSecurityManager(securityManager); + //shiro验证 + Subject subject = SecurityUtils.getSubject(); + //根据用户名密码生成一个令牌 + AuthenticationToken token = new UsernamePasswordToken(username, password); + try { + //执行登录操作 + subject.login(token); + //将用户信息存入redis + saveUserInfoToRedis(username, user); + } catch (UnknownAccountException e) { + log.info("登录用户不存在:{}", e); + return new Result<>(416, "用户不存在", username); + } catch (IncorrectCredentialsException e) { + log.info("登录密码错误:{}", e); + return new Result<>(412, "密码错误,请重新登录", password); + } catch (AuthenticationException e) { + log.warn("用户登录异常:" + e.getMessage()); + return new Result<>(416, "账户异常", username); + } + String userInfo = stringRedisTemplate.opsForValue().get(PermissionConstants.USER_NAME + username); + UserAccount account = null; + if (userInfo != null) { + account = JSON.parseObject(userInfo, UserAccount.class); + } else { + //获取登录用户信息 + account = UserMangeMapper.selectOne(new QueryWrapper().eq(PermissionConstants.USER_NAME, username)); + stringRedisTemplate.opsForValue().set(PermissionConstants.USER_NAME + username, JSON.toJSONString(account)); + } + // 通过 jwtTokenUtil 生成 JWT 令牌和刷新令牌 + Map tokenMap = jwtTokenUtil + .generateTokenAndRefreshToken(String.valueOf(account.getId()), username); + // 用户角色映射表中中查询用户角色 + account.getRoles(); + long endTime = nanoTime(); + // 计算耗时(单位为纳秒) + long elapsedTime = endTime - startTime; + // 将耗时转换为毫秒 + double elapsedTimeInMillis = elapsedTime / 1000000.0; + // 输出结果 + System.out.println("程序运行耗时:" + elapsedTimeInMillis + " 毫秒"); + return Result.success(tokenMap); + } + + + private void saveUserInfoToRedis(String username, UserAccount user) { + stringRedisTemplate.opsForValue().set(PermissionConstants.USER_CACHE_KEY + username, + JSON.toJSONString(user), 30 * 60, TimeUnit.MINUTES); + } + + private Result checkUser(String username, String password) { + // 检查用户名和密码的合法性 + if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) { + return new Result<>(400, "用户名或密码不能为空"); + } + if (username.length() < 3 || username.length() > 20) { + return new Result<>(400, "用户名长度必须在6-20个字符之间"); + } + if (password.length() < 3 || password.length() > 20) { + return new Result<>(400, "密码长度必须在6-20个字符之间"); + } + return null; + } + + @Override + public CommonResult refreshToken(String token) { + token = com.auth.server.util.SecurityUtils.replaceTokenPrefix(token); + + if (StringUtils.isEmpty(token)) { + return new CommonResult<>(ResponseCodeEnum.TOKEN_MISSION.getCode(), + ResponseCodeEnum.TOKEN_MISSION.getMessage()); + } + + // 对Token解签名,并验证Token是否过期 + boolean isJwtNotValid = jwtTokenUtil.isTokenExpired(token); + if (isJwtNotValid) { + return new CommonResult<>(ResponseCodeEnum.TOKEN_INVALID.getCode(), + ResponseCodeEnum.TOKEN_INVALID.getMessage()); + } + + // 验证 token 里面的 userId 是否为空 + String userId = jwtTokenUtil.getUserIdFromToken(token); + String username = jwtTokenUtil.getUserNameFromToken(token); + if (StringUtils.isEmpty(userId)) { + return new CommonResult<>(ResponseCodeEnum.TOKEN_INVALID.getCode(), + ResponseCodeEnum.TOKEN_INVALID.getMessage()); + } + + // 这里为了保证 refreshToken 只能用一次,刷新后,会从 redis 中删除。 + // 如果用的不是 redis 中的 refreshToken 进行刷新令牌,则不能刷新。 + // 如果使用 redis 中已过期的 refreshToken 也不能刷新令牌。 + boolean isRefreshTokenNotExisted = jwtTokenUtil.isRefreshTokenNotExistCache(token); + if (isRefreshTokenNotExisted) { + return new CommonResult<>(ResponseCodeEnum.REFRESH_TOKEN_INVALID.getCode(), + ResponseCodeEnum.REFRESH_TOKEN_INVALID.getMessage()); + } + + //String us = jwtTokenUtil.getUserIdFromToken(token); + Map tokenMap = jwtTokenUtil.refreshTokenAndGenerateToken(userId, username); + + return new CommonResult<>(200, ResponseCodeEnum.SUCCESS.getMessage(), tokenMap); + } + +} diff --git a/etl-auth/etl-auth-server/src/main/java/com/auth/server/util/SecurityUtils.java b/etl-auth/etl-auth-server/src/main/java/com/auth/server/util/SecurityUtils.java new file mode 100644 index 0000000..d689d0d --- /dev/null +++ b/etl-auth/etl-auth-server/src/main/java/com/auth/server/util/SecurityUtils.java @@ -0,0 +1,37 @@ +package com.auth.server.util; + + +import com.etl.common.constants.TokenConstants; + +import javax.servlet.http.HttpServletRequest; + +import static org.apache.logging.log4j.util.Strings.isEmpty; + +/** + * 权限获取工具类 + * + */ +public class SecurityUtils +{ + + /** + * 根据request获取请求token + */ + public static String getToken(HttpServletRequest request) + { + // 从header获取token标识 + String token = request.getHeader(TokenConstants.AUTHENTICATION); + return replaceTokenPrefix(token); + } + + /** + * 裁剪token前缀 + */ + public static String replaceTokenPrefix(String token) { + // 如果前端设置了令牌前缀,则裁剪掉前缀 + if (!isEmpty(token) && token.startsWith(TokenConstants.PREFIX)) { + token = token.replaceFirst(TokenConstants.PREFIX, ""); + } + return token; + } +} diff --git a/etl-auth/etl-auth-server/src/main/java/com/auth/server/util/UserRealm.java b/etl-auth/etl-auth-server/src/main/java/com/auth/server/util/UserRealm.java new file mode 100644 index 0000000..b9218f5 --- /dev/null +++ b/etl-auth/etl-auth-server/src/main/java/com/auth/server/util/UserRealm.java @@ -0,0 +1,65 @@ +package com.auth.server.util; + + +import com.auth.common.entity.UserAccount; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.auth.server.service.UserManageService; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.*; +import org.apache.shiro.authz.AuthorizationInfo; +import org.apache.shiro.authz.SimpleAuthorizationInfo; +import org.apache.shiro.realm.AuthorizingRealm; +import org.apache.shiro.subject.PrincipalCollection; +import org.apache.shiro.subject.Subject; +import org.apache.shiro.util.ByteSource; +import org.springframework.beans.factory.annotation.Autowired; + +@Slf4j +public class UserRealm extends AuthorizingRealm { + @Autowired + private UserManageService userManageService; + + //授权 + @Override + protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { + + /**配置权限 + *此处User实体需配置属性roles,用户权限 + *获取当前用户对象 + * */ + SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); + Subject subject= SecurityUtils.getSubject(); + UserAccount currentUser =(UserAccount) subject.getPrincipal(); + authorizationInfo.addStringPermission(currentUser.getRoles()); + log.info("用户权限为:"+currentUser.getRoles()); + return authorizationInfo; + } + + //认证 + @Override + protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { + + UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken; + //用户名/密码认证 + //从接口处获取得到的用户名 + String username = token.getUsername(); + + //调用mybatis_plus中的方法,查询数据库中用户名对应的数据 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("username",username); + UserAccount user=userManageService.getOne(wrapper); + + //为空,即用户名不存在 + if(user==null){ + return null; + }else { + log.info(user.getUsername()); + } + + //principal:认证的实体信息,可以是username,也可以是数据库表对应的用户的实体对象 + // Object principal = user.getUsername(); + ByteSource salt = ByteSource.Util.bytes(username); + return new SimpleAuthenticationInfo(user.getUsername(), user.getPassword() , salt,getName()); + } +} diff --git a/etl-auth/etl-auth-server/src/main/resources/bootstrap.yml b/etl-auth/etl-auth-server/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..4edeee2 --- /dev/null +++ b/etl-auth/etl-auth-server/src/main/resources/bootstrap.yml @@ -0,0 +1,51 @@ +server: + port: 9092 +spring: + application: + name: engine-auth + redis: + host: 115.159.33.152 + port: 6379 + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://115.159.33.152:3306/etl + username: root + password: lzm@123 + mvc: + pathmatch: + matching-strategy: ant_path_matcher + profiles: + active: dev + cloud: + nacos: + #注册服务 + discovery: + server-addr: 115.159.33.152:8848 + namespace: f9f293d4-55ce-45c1-aa15-124ca461c060 + # 配置 + config: + server-addr: 115.159.33.152:8848 + namespace: f9f293d4-55ce-45c1-aa15-124ca461c060 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} +logging: + level: + com.bwie: DEBUG +auth: + jwt: + enabled: true # 是否开启JWT登录认证功能 + secret: passjava # JWT 私钥,用于校验JWT令牌的合法性 + expiration: 1800000 # JWT 令牌的有效期,用于校验JWT令牌的合法性,半个小时 + header: Authorization # HTTP 请求的 Header 名称,该 Header作为参数传递 JWT 令牌 + userParamName: username # 用户登录认证用户名参数名称 + pwdParamName: password # 用户登录认证密码参数名称 + useDefaultController: true # 是否使用默认的JwtAuthController + skipValidUrl: + - /auth/login + - /auth/logout +mybatis-plus: + mapper-locations: classpath:/mapper/*mapper.xml + typeAliasesPackage: com.auth.common.entity diff --git a/etl-auth/etl-auth-server/src/main/resources/mapper/PathMapper.xml b/etl-auth/etl-auth-server/src/main/resources/mapper/PathMapper.xml new file mode 100644 index 0000000..5829ce3 --- /dev/null +++ b/etl-auth/etl-auth-server/src/main/resources/mapper/PathMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/etl-auth/etl-auth-server/src/main/resources/mapper/PermissionMapper.xml b/etl-auth/etl-auth-server/src/main/resources/mapper/PermissionMapper.xml new file mode 100644 index 0000000..c97efca --- /dev/null +++ b/etl-auth/etl-auth-server/src/main/resources/mapper/PermissionMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/etl-auth/etl-auth-server/src/main/resources/mapper/UserMangeMapper.xml b/etl-auth/etl-auth-server/src/main/resources/mapper/UserMangeMapper.xml new file mode 100644 index 0000000..f74141e --- /dev/null +++ b/etl-auth/etl-auth-server/src/main/resources/mapper/UserMangeMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/etl-auth/etl-auth-server/src/main/resources/static/index.html b/etl-auth/etl-auth-server/src/main/resources/static/index.html new file mode 100644 index 0000000..f67da0a --- /dev/null +++ b/etl-auth/etl-auth-server/src/main/resources/static/index.html @@ -0,0 +1,6 @@ + + +

hello word!!!

+

this is a html page

+ + diff --git a/etl-auth/etl-auth-server/src/test/java/com/auth/server/EtlAuthServerApplicationTests.java b/etl-auth/etl-auth-server/src/test/java/com/auth/server/EtlAuthServerApplicationTests.java new file mode 100644 index 0000000..9a5ad53 --- /dev/null +++ b/etl-auth/etl-auth-server/src/test/java/com/auth/server/EtlAuthServerApplicationTests.java @@ -0,0 +1,31 @@ +package com.auth.server; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; + +@SpringBootTest +class EtlAuthServerApplicationTests { + + @Autowired + private BCryptPasswordEncoder bCryptPasswordEncoder; + @Test + public void enCoder() { + String password="123"; + String encode = bCryptPasswordEncoder.encode(password); + System.out.println("加密后的密码:"+encode); + } + + @Test + public void matchesPassword(){ + String encode="$2a$10$qyOS46MrKAm2wIyJl95.eO70ioBDvsgv8nnCCjhGJUxPIhPC56PTa"; + boolean matches = bCryptPasswordEncoder.matches("123", encode); + if (matches){ + System.out.println("密码正确"); + }else { + System.out.println("密码错误"); + } + } + +} diff --git a/etl-auth/etl-auth-server/target/classes/bootstrap.yml b/etl-auth/etl-auth-server/target/classes/bootstrap.yml new file mode 100644 index 0000000..4edeee2 --- /dev/null +++ b/etl-auth/etl-auth-server/target/classes/bootstrap.yml @@ -0,0 +1,51 @@ +server: + port: 9092 +spring: + application: + name: engine-auth + redis: + host: 115.159.33.152 + port: 6379 + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://115.159.33.152:3306/etl + username: root + password: lzm@123 + mvc: + pathmatch: + matching-strategy: ant_path_matcher + profiles: + active: dev + cloud: + nacos: + #注册服务 + discovery: + server-addr: 115.159.33.152:8848 + namespace: f9f293d4-55ce-45c1-aa15-124ca461c060 + # 配置 + config: + server-addr: 115.159.33.152:8848 + namespace: f9f293d4-55ce-45c1-aa15-124ca461c060 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} +logging: + level: + com.bwie: DEBUG +auth: + jwt: + enabled: true # 是否开启JWT登录认证功能 + secret: passjava # JWT 私钥,用于校验JWT令牌的合法性 + expiration: 1800000 # JWT 令牌的有效期,用于校验JWT令牌的合法性,半个小时 + header: Authorization # HTTP 请求的 Header 名称,该 Header作为参数传递 JWT 令牌 + userParamName: username # 用户登录认证用户名参数名称 + pwdParamName: password # 用户登录认证密码参数名称 + useDefaultController: true # 是否使用默认的JwtAuthController + skipValidUrl: + - /auth/login + - /auth/logout +mybatis-plus: + mapper-locations: classpath:/mapper/*mapper.xml + typeAliasesPackage: com.auth.common.entity diff --git a/etl-auth/etl-auth-server/target/classes/com/auth/server/EtlAuthServerApplication.class b/etl-auth/etl-auth-server/target/classes/com/auth/server/EtlAuthServerApplication.class new file mode 100644 index 0000000000000000000000000000000000000000..839078c1e09176e721462d78dda22df59b871b1d GIT binary patch literal 1363 zcmbtU+fEZf82$!I3$+RsErOupu~g|M#&A@j3XWc2C_b05w95>` z^@RoI9(tLX^8D=fR@*sV2;B6$G`2Dl z8`4Nhb0vxB28BWhUHx6zEb2l zwThx_%U-I5*Ub`KCBfOUHZlj%p-*tlaTx|dz2-?GbT`PLjqLL@z{-H|&t4#D$|#{wf2G$CS3wD*40SU8r=cyOQNd$8VR-SsBSsZD9s0Na zt_UoxPoCGT_5EfKG@8~_r?fqOePDUoA#Fn|XJ7JH;-ri1Kt nPQh^(DZLwXPm^?J6U^WyX6Ze*iK4+RgWCpo4CW2)8r=I0tIC8W literal 0 HcmV?d00001 diff --git a/etl-auth/etl-auth-server/target/classes/com/auth/server/config/MD5s.class b/etl-auth/etl-auth-server/target/classes/com/auth/server/config/MD5s.class new file mode 100644 index 0000000000000000000000000000000000000000..b11995ff36a535e8a051a8340e00806ca96b17d3 GIT binary patch literal 2016 zcmbVNT~ixX7=8{U*|037iBO8QsI}5Sp$j6QP|@-w*pMnvw8gK@a+)kncH{0z2S(cq z$2%|d#tUY=aJ=!t8+wy6cBVhT|D^bA0yMPHVa!a;8qd`^eQjD}eqt@u#GypBW<4N> z7Q!Q=;f98f1!7kn*HIG!jj5g$fyk7%CIwp4jw>_eVpjUgR<=M+GVR$`Va4*D@V>{4 zsJs&hoKM?c(X`4cZwAu8Cwe&2B12%XUia`UA3H>GB23n%Hj?V8&h1)tz&MDh)yXO+ z@igUmSIJ!1zGmgk$&LMV+f(yLE={Z;-JHr-_jsO&R;eUiw!8oMNb44HuV0+mxbpU0 zwWW^q)LP=|s_JMj`&L+uR9%r@xD#w(Al1PxW~?HuXOE2Vq>%eV$IzRIUE8W>Kx@;( zm(BkGjb_6&66j+wPHH}m*Kvj~@9@{a73NCwe3>_sPi{4$y^kOsR>kLd#;VLyc!ji4 zQ^0w2@z#V_@ftZa7Jm|~iM(HXchInfSh8_jq?3^yMAMghD~MH~EhHN=ePfZ%$di$1 z<4CMM)*k&Gna)UiY-mJl*Am!$u!Hzmyfa=wQ{*>vK8Akl5t@@m1uY@7rGisq@jY&T z9W(PoO#HF?uz!1@uY%K$k)T;J8L8lMGRbx?Me8FpfnxlQtRo!MLDl*#*+Ip1dyAK(JM$3^^zH}Mm?@e3|t3q933Eh0|4 zA!=P9HHrzmK~0TFS!#E)R$Y8CUZS*-I1!|1*AP|@z2t>;{+YGC%y_q`(T9FYuaG~3 zsJ=^EO@panK*L~_7!>T=KNuCf?J~qjy%^XfPD70as=P(8A%ZpVJAR!{o#F)M@DZB+ E1L-*U%>V!Z literal 0 HcmV?d00001 diff --git a/etl-auth/etl-auth-server/target/classes/com/auth/server/config/ShiroConfig.class b/etl-auth/etl-auth-server/target/classes/com/auth/server/config/ShiroConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..ea6fe07a3ea1eeea5228d40f97a0320aedd47526 GIT binary patch literal 2813 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 literal 0 HcmV?d00001 diff --git a/etl-auth/etl-auth-server/target/classes/com/auth/server/service/PathService.class b/etl-auth/etl-auth-server/target/classes/com/auth/server/service/PathService.class new file mode 100644 index 0000000000000000000000000000000000000000..88233ecb5a7d6062d1f1de5079f5c2f8219e424d GIT binary patch literal 321 zcmbVIOA5j;5S{p|)s1&>?<{mzaVZFbLQjy^K_g8f`4qjH3lHF-#H5OdOBXZq7VpR0 zAJ-cI%wU*6KY=uX0fRIbd&QkM#Nf0(@|t7C)gCv+kxG}XOD(bBT8f?aC@%$f!k#K` zkLn09y*1k`DE7kbT2p2H$#1^@s6 literal 0 HcmV?d00001 diff --git a/etl-auth/etl-auth-server/target/classes/com/auth/server/service/PermissionService.class b/etl-auth/etl-auth-server/target/classes/com/auth/server/service/PermissionService.class new file mode 100644 index 0000000000000000000000000000000000000000..b26615f70b9a03a3d0996edb770e9759fd52cc42 GIT binary patch literal 466 zcmbVJO-sW-5S^*DvDJ#F{sX~Y+=E^urQk&n0*bkL+ayDrlI+&~DE6;;@CW##q?<(A zLJxw6f%(|?=DpePpU*D*fFm(?&+i*eoNn-FW~&xY*sSGl6jP4;KRjgkFfF@K4xB=)-ZS2BGRf6r#&cVAys> E8~pi_D*ylh literal 0 HcmV?d00001 diff --git a/etl-auth/etl-auth-server/target/classes/com/auth/server/service/UserManageService.class b/etl-auth/etl-auth-server/target/classes/com/auth/server/service/UserManageService.class new file mode 100644 index 0000000000000000000000000000000000000000..41fc9a076bcb1eb1eeeec8759e76a9660197dad4 GIT binary patch literal 707 zcmb_a!Ab)$5S`T8wY6%!_zmsF0reoX2qFl=7QxjI$Zp4N>TXi9NwL4ygCF2WiL-58 ziXy0Z2+SmJX5M>~*SEzB0Gz>L0Q&(P1ke%C^aa__q)H1IcEiNvD7_ma2f5Km+9@~3 z2L@dxiSgR?dn-_;Vi`-+GBE|pslwchD8tza-cjK**XQ1mO0{&}k^uRiy$9h$&Ln11 zr+6DrC~^G@p4YbYXsH0_oY2E)<*3rq5JDcoVIH!B5sx8qtc3w+UUVjGaF!mp7DJ zrnK&JT)HQqS1r37M7Emur9eREv*7|x%kp0;Xb2EcL2cA>pQ?7ai6`r_LF literal 0 HcmV?d00001 diff --git a/etl-auth/etl-auth-server/target/classes/com/auth/server/service/impl/PathServiceImpl.class b/etl-auth/etl-auth-server/target/classes/com/auth/server/service/impl/PathServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..e8c95683b420d437f923e3b6339e14bae761a2f4 GIT binary patch literal 888 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 Pii@b=`qp4kJ_Gy&<}M2R literal 0 HcmV?d00001 diff --git a/etl-auth/etl-auth-server/target/classes/com/auth/server/util/SecurityUtils.class b/etl-auth/etl-auth-server/target/classes/com/auth/server/util/SecurityUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..8bb5d1a030eb6f5f745ab833210dd8ba2187f30b GIT binary patch literal 1126 zcma)5TTc@~6#k~AY`ZK4tAJWB+@VDoFQ_CnCQ2kE)=Mm6;@hx{?Z9@o&Q1yVPxM#l z3!)GH0DqM6>}*XSHj$S(mp$j3Z_ao2*Y6)c0jyxvg@@}7Ci9pY!Zc=F3}M#A9Om;_ zaIuI=9@WGyIk@5ACd1%E6)N+HA-h=FVi;J9b|k|{U4`;Rx4kX(rq~WBQ>sV42)2Y) zN!&{gn3jqeX6t^`=Avs_JeGQ2YTh*};0@__wK9iqD2Qte`KC0R(Vh$$YK!$Y&IXeByuy95ghMY-nF7*Q}Y1s*c zFD<)QTE15Y4D%_+Q+M~JGu$x3-+L}Py{Wj3sH=UsuI$`SO<_5CwTEF8iF-0MX#!5R z9ff4V*oe@?+|pS48!`+(rqM=PeH2DTp@U@)9AyueQFd_4!)@H5p*)d7OFik}u1BkI zkAZgKJ{~Yk|6d)3(S%w0)|cD6(l-oqXOf7aK)P;7u_HD0M7qgENBAwtgQ(dg!4kW& z+gk}MA+3y~;-~G7IbkB{0uHlNt^hsGA)L&lij@qN&38= zqU%b>^pw>;W&bWhA9XQBe~?E%7mx)hfg+tF6mhaNV&tmdz`l}`!6==BHd(|u^1ZYG zC7h?IfD0I-Owzng)fuwIYAO320~yqpj*3k_VcwJf>i JD!Cb4`vYKK7s&ts literal 0 HcmV?d00001 diff --git a/etl-auth/etl-auth-server/target/classes/com/auth/server/util/UserRealm.class b/etl-auth/etl-auth-server/target/classes/com/auth/server/util/UserRealm.class new file mode 100644 index 0000000000000000000000000000000000000000..4d29926afaec96dfd6f6ef5c50da5759da63487e GIT binary patch literal 3559 zcmbtXS#uOs7(E?k(n+V;5+F=K2#At|ga%o}gvAgEAV~FG>5^mGqBJqbZY z6c^l4altB|^%0j!SS*V-tNa}nmQVfz_1x~sWHK{RN~z-B>3hHXedm1Jz4_(OJ3j%~ zi5m(U5tlKjpaO9PCoxomQ+P(ku!2gQ7RzUF^!uOrWZ`y(oPl&Q$uVZ z>-bj69I`Ujh;4Q{j_d2bF|wX#I=)B-37h78%&bYdj>av^p9;L(X&5fEgNN$# zeiqwCfuo1ZI9eb!0?*A!54z{f1>IaMEMh49EEE-~kkDGna$$oKqQ0=gEwLf8bX=d%HCuO*THF`qApAb*>FKm^;=aI%Bf6Wi5^h#YO^wh& znY5kFXol;V9Grv|)RcBUYqDrgi1Ac-oSGuS5~qxA`(>jT4f|<+aopF9bG>>xs91I@89qCnj4b;d+oS~L&;`Rx2c%_8(3^V= zJJ%AFkVUs88o(0a{-B(<3LmT3j3x$4^tyS)D`Is~Tc8SLOscqmDH#`4yoi_R#C#82 zFs)U*j7utB!DSU2u#rh#9OQ#p%T9>M)c$t;oBLO1?tgXV_Z!!Ky>;i0AHP)bDqd4@ z1(#&JuHp?`W@eT}Z3MMcl3^;|#3czG0_cBC9Tjiks)~oPNyghM-od*v-dAxAA4$*_ zz%u8-xxy0Vrs8AajZeg|8P_GO%X^Rk61T|w<}2e<6`$dA37bnSd7?Y#J146ph_8f} z63GP%SHiO5Xe^W!#myt1c;rxGFmAH_vA><c#h5S;1*&LRZ(idwN2ufFOhFCb$TKZe)OAO%F1MTRY_RcRG=*vvpwLc^R)Lw^N?GpB z#n~m2tn3?wylDBj!(P$d^x(~Hw!4H+vB58PE6@giS8{%obA&UyKF4N$ zX`Cg_(UuuV-||NVS~v<}pblF&s-XZ{(Z;U`wg!j9;jgg>QO=!rQ87G&MZLEW>1(@< zsDyi{Y>%|YBGZtkQS}|F??RzSO|3eO#ku9h(^zsFODoWNlS)Fv4Kxj`M-`cfi=v)9 z8rgFXkcR-XGc=e3L(|xX?F3kbC-4|{P>YIPl-fmT^`x>Jj}vkPd$?aA7)xttL8hj& zTkc_5Z|gLc_uWM;vDLLlVv*VvZPQqJs^tf)ibZatz9L`}jYWSZtDEEzi%w&8fV%A# zV(pc8(J&mWiD6BwvSk`;XYi0<6bW3}!aq_#>`^*SA=WzLTuY>_#I~L2b`aT<*pF^< z6bz4q=<*EDq8%M%7{xI5Vjo#37^M6GGOWWfp6#TiR%$&+ZBgo3jV?SzmWQZK1TU28 zrqp4stbz0wjaJGyBIBrxr)3>E`9mjk40I|OTyO0R8 literal 0 HcmV?d00001 diff --git a/etl-auth/etl-auth-server/target/classes/mapper/PathMapper.xml b/etl-auth/etl-auth-server/target/classes/mapper/PathMapper.xml new file mode 100644 index 0000000..5829ce3 --- /dev/null +++ b/etl-auth/etl-auth-server/target/classes/mapper/PathMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/etl-auth/etl-auth-server/target/classes/mapper/PermissionMapper.xml b/etl-auth/etl-auth-server/target/classes/mapper/PermissionMapper.xml new file mode 100644 index 0000000..c97efca --- /dev/null +++ b/etl-auth/etl-auth-server/target/classes/mapper/PermissionMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/etl-auth/etl-auth-server/target/classes/mapper/UserMangeMapper.xml b/etl-auth/etl-auth-server/target/classes/mapper/UserMangeMapper.xml new file mode 100644 index 0000000..f74141e --- /dev/null +++ b/etl-auth/etl-auth-server/target/classes/mapper/UserMangeMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/etl-auth/etl-auth-server/target/classes/static/index.html b/etl-auth/etl-auth-server/target/classes/static/index.html new file mode 100644 index 0000000..f67da0a --- /dev/null +++ b/etl-auth/etl-auth-server/target/classes/static/index.html @@ -0,0 +1,6 @@ + + +

hello word!!!

+

this is a html page

+ + diff --git a/etl-auth/etl-auth-server/target/production/etl-auth-common/com/auth/common/entity/PathPermission.class b/etl-auth/etl-auth-server/target/production/etl-auth-common/com/auth/common/entity/PathPermission.class new file mode 100644 index 0000000000000000000000000000000000000000..47b2a17e358f235eda6b99499c0fbf63b1062470 GIT binary patch literal 4351 zcmbVP>vJ1d6+bKOYFF|~wq-l1nlyF6O>J4K8Yqv-Ng-)dVz6W5q#+HDWGyY$CVEv` zrI=Tnq(Dhq5};q&DP)*3q#x3u8L%_cQVPRN8TbJIMC^qBfwuh4y(?=aFVw?KeD>UX ze&^^s@4fl^2XFn6h#sV$M@gqAnKYO*nYc_^OwQ``R1Dv5FM}- z%xUYal`C7-rQCGYwU_M1ltQV6R@HSX_A#gFESBy4)oRVPT&GrTDwLfm)GE0}t5$J} zwN|dOya-9NUT!sW)&?$j)Pml05w^6mR=H&>q`J#>d@@^7pDrE+8rtgq$B)h_l&IT{ ziqmYug-2>dm`VElKH@f<>Jq>cGfpkne9Brv6h3E~x&3u#7HZ}BMh%ACWnj(qUtIXt z%a?Dy{o2~48wy2Bj@_^th0-!aw{QIR)=SsduAg7O_A9thx7?CK5xJ{SU(s$B8cv<_ z0r1+zE4MGavwrE)?RVbCVm)jr&+EZPl`R}Q~cu*%1*hQoRGHdVLe z;Fs?c8Maz(DThi`YSo;LV!F$@dBiclkw@fU5I^79kiRwD<;q5CO+XKIQlzt{NJ|3T zqyB^#PV+f;Naqxf@!%L@N3cU;6OGl?p~Di; zyPXhVU$^y3oNp&8?TN5ro)xhe5Q47u8MFKN5SeJ$Zt`TyGy^+hnKa_mU0)hO7HIc1y^L)}e(Kc99A<+gMPiS!+|Dtr#b z-IGPjwN5sLZIedn9+Spt!lVq7`54A zy|mAyhnaki$>*7zq*DrQ@0`>!RR>y5xo9^`I!!2QvOCgorwGMMbeYLdF=Uz1?n3Uv zFl9zJN{OWo2>J|MA~WhMCpMy)(WV$`Ve@C`6ol#!Bm*6<RZk7H-7iOqX$+D-Rig-Uwz zK77;ogM1PKRClu=3jr#=S&)MOU9efO2Lg1)X2FBPAyglt&%nJLz6!ot`uC)~2_{6J z1&xT!L3#+hDFKwHDXbK37|>qjP_OcEpfVaQKsns2ygg7E4H}@V_A1{QsEo!AP}X{t z?+R4L%mgS$uJt5rG*I~wdel?SBfTL`Z+dctl6nY2j;=e?Jbb>BoHHR)(+PG2+Mr)@fY9sdmFeY!)k(T`@~ z8E!zYM;^kLXHny#_71Xt6t#`uHH6H;<848wq?ynVj2JL;WngNrx^L&eREeA6Wikfl zu97xjo!Te*fd%LWV_@Dg5p5c_6cWkE{yBnJ106vgwJ5TQMUl9AHdqC`F-M3D^< znnr5%=XD`Mzj#`@5bX@E?t*mP3ouNtl0}OMOruw*04_wk=o}RhG*`ETx^ZUp>R5-u8^8eX)AaTj6?#?PE*`bhops#!PxEHQLrkW zHau6m#akvUI6moB!SPwG364)&erDh?>3P<9i@>wqLpvUDwT94u{9>t!mlnUIYWTxT Gs{SA7(^TdF literal 0 HcmV?d00001 diff --git a/etl-auth/etl-auth-server/target/production/etl-auth-common/com/auth/common/entity/RolesPermission.class b/etl-auth/etl-auth-server/target/production/etl-auth-common/com/auth/common/entity/RolesPermission.class new file mode 100644 index 0000000000000000000000000000000000000000..e0a3e5b8168422942bebc064a6d37acd97c888a7 GIT binary patch literal 2923 zcma)7U2hvj6g^|_+G}T%CT>1zT4+l{NgSu*O4E{-&?F5>8ffX)#$Mtrwl~=8 zmOS&s0|M~|5>H6vr4N8;Dp3i+OOf~;fXaWMlruZ)#CB2Xvoe$`q~ga%QsZ*~@liR3JH5D|=4KUUaI?QqdkSmtD{D9JgE* z7@o?xrOcA$mYlp>%am4^xKmvz)~Xq61D9E_=r@^XEd91stTCPDt*&rN@5p^Jzd$s- zwed>}7X><2>`KY0R!QNkn`f9r1MhjS;*^&O9-MOAO!bbn%u_Uwsble|`P&-(PlKCaF))z+gkBO@%Z?W7m{Z zwr6UkCA;FESQ2w{R&mj)I8uRNQS%B8r5o_iZq>X(h8mXKa>l02-fCu!$*Z#)MnYZi;PM@Yt)`ba1c~tqr|GP5&OfMRV4o==*6X5 zcFr3eydogn<_ih7NXYdHc7?Iz`TJ$P8UBiI?)DdXA59nAtpKgdF(0fhDXt*uqkZ19 zavw}vE56ixA%1NeIjcM&Su#H-R8LfXWz z9M0gZK;LHPP$xZ8bBcMpV&Vd(*;!gnGvMUMOuUa}ITTon=>yGTkFieD2PAP?V$j4} zNDFjsW>ICu3$RvJ>@tgKxbXt&rMpG$fEIOW!q@BfsdyY@U+rNd4kIKbguottB{(O! z@=TSBdu{B)v;3mE!G0U(1N?FSAUCM^){R3jxkzO>9%jr8XTe!d{Rr_LjSybs81Wao zFhE;65P(6XI170h99x}3t2k||vM&50{ zcdtSOyycmclmai|<$y#}oX}3=D9Ht0**;Eqr*YH`30dQck2p@wF`nkrq13m~wYx*V zLi-AO`0mgz(5BO=b?E*ljmS)zLslF94Q)y7A-dLJ4kxvBMC%A6s}o{mBS~FiA`g*R zLwizBMjAk|Y?Po_)<{Mr$Ou5uq)`WHcS$JRP!>wwtBUA`yr1GV9OW^3@DYx&R6?vW z2gkV<=2s3UXlXc)bG*ExET?Il#we`_iY(WYw4$hBFUDvYIK`YpFr&sl=!oL=$LNjX zH2)0o7<-f%Ycv^}JtMf)6P#sr=u$q({%OTgFKSud$Cy{X1$Gz}MjWAEgx;4rM^9>F zzU2ElM++3(=p0%@ba)-{n{wUAYH}l~1v`ek2DKH->i!mQz;`l|y1%t=dr?oRgn_7G z%;618kdBU73O7MQarU_Lq#DK{*58}7G>X-SNm{xu+Z{xna6zMNLQpCQ@r3Zr?~q*R zfnEpHF>|_eH|TA!gcIQbSj$_){*E^ zc1+p{4(r(6+6+{^sWvpS(S|NyD#&$}xiseLPTl8EHiT6A9zv<%d)V?6+x^y%QuvM9 z?G9Q4WBC147Eia|K*P+ze=0$y&2Gs|t*^Xeo1PWI3`2!*(Qn|gLC^BX2L1Mb-r+SF literal 0 HcmV?d00001 diff --git a/etl-auth/etl-auth-server/target/production/etl-auth-common/com/auth/common/entity/UserAccount.class b/etl-auth/etl-auth-server/target/production/etl-auth-common/com/auth/common/entity/UserAccount.class new file mode 100644 index 0000000000000000000000000000000000000000..7e2c105d3205c2e18a0437d2f1d8be83ced4886a GIT binary patch literal 3149 zcma)7TW=dx5dMz6H`|*_(SVyY-)R5d)+D$ zFT7On00Lf+kdSyH5~@V0AeBHu@KPlHN7eoaO8L(2I<}K7ie#UiGxN>t%r|q+{{8Q- zzXNy$wIp`oLIN7zm&*ro`A{wwbzDmFX~|_lqH1%RUqc%1-4HtTi2{i!743g#!H^PXjeuA(lfP^=M?REr|K*e?6FeG z^(@bEOI3m4iJV)^ELd*Q$-A{oabOi8=<#b@_dZ&6pas@3amg}mtZe!Ox2yN@%p9&$>K zcSIoG*FVpMjx(Y_$AnX|r)tFoyW*EBQ*(1xVcx1Zvh+}?cuNk`?)8hdYTi!%wtD4Q8otIClfE+Se=5+2yEfm{Xk>d}Z72djqpKmHp=g`+tlX7JtL*oSN6bGN zM$Rgoki{^OC9Ap=w4D7PXRgyT}*^aK{>~2P9ZNF*wIu-pOdG5 z1y#9_BV%ZfPtRda(a@ecLBXz05qF~B#5@j=l*U_vL1Bqjxonp>9>Y=N*)-KHX_1>2 ze0?Gxizjay?@~ZPOcDu!C%Nn5b2l|lRjGX1#xvN%9XSr|DL$X$pY~oF$opo)3pB77 zn+<(vqmr%TI>?u0_!NAq19u>Pq7cInSIt)@FihDD0N6(`D6?r?Tb+MK?A8Y7wn%68 zIl?)<(YZ6yne!3htZa1N9_h@vif~ppI`>36AH-{+bCwLnBtrv(zaSRPSWkcm8Ix=V z-4%EpZ$!n3Z#7OZ1p?XVILcPz1VbY*5* z6WTXW<2MKYfHpZaum;`VQZS~5xMY>#zmQ5Rcd>01=5ShBL!ypIW>rFxSuL$fjCL1Y zt7uEBX{`yA%IXBAvPN2$AR`3nX`=~bW)lRN*Aa^#DIbM_ zFL|y{QA*%zp8eC5k{D+m2hpJ$|DavRTMyBr<8A&7@esQLG4U9YZ|1!kPMDlDIjO2_ zfh=zG(GCVxT`x{$VzM|PFW?}IxIsUi-sR4bL&{;lZM!>1me@3-b8r><@EY1KNqsV_ zNJCl)Erx7mU`l0G-^4EZPDWa-o6M}{o3wQkdrPm~(d{@L=e0OJuA3TYOC)Ix|ybZqQnQqc{y4ya?4 zR#gbonqUp&Mr{bzTfq%{gn=%sk)NxeCs<~k^41>x4ejUdprfmE4claE*3i|pJ&-xr u+q!lHa!ShGfow{-hszpvZoK@OFZ|Jv;~3ucXXict<0L;m=lJKx=lp+rKTXyE literal 0 HcmV?d00001 diff --git a/etl-auth/etl-auth-server/target/production/etl-auth-common/com/auth/common/enums/PermissionConstants.class b/etl-auth/etl-auth-server/target/production/etl-auth-common/com/auth/common/enums/PermissionConstants.class new file mode 100644 index 0000000000000000000000000000000000000000..da08aaa1a96a5d85de0666f6f98f44d42a558fef GIT binary patch literal 703 zcma)(%Wl&^6o&tkCe1XY7s9RO)|M7%S_yAh6@*l|Mp(E>6}ORCSrd2EPO-?01t&YV^Q#e1)HPu{WEhe|NQv*?K^;%*zI8s>s@Sgu}SDm#(@_S2EnDgl1?Jc zxf7PTHs`Mhi*9C$QkrrqlS&CZAuPD#LoW*a@I+vX(6-M7wh7C}-sH#+Lw`Jq>>Yup zgr(Ean?&w``_7BrdmjXz5k#%k^qlL}G&(rq2RnprjsBs)kTCyR8(qF3%^I57RzKRb8Y#z*e)-0LD&o8EOlg6UO1ejnQ@e<(!x1bd8&&- zXXbjxf*0>>MD6)NAi!N^qYvu(BTQGMoIT5}o>HTH7mnnMq<6a|vA4Ve<)GOW;id3kDV$ z`ifb<=Bd00f*sf2TyiXTQ~C^%K3ll5QXHKw6=1s~Wd-lFN&c<(YOh z78uUH8#>Ca$_+cPixru699IctyH3C`-xi=Kg%j}m!cwkZ0)D2u`NEY1Cx8!YG z>pTCilqWPZhPn2Ac3s64(cqTrDEUb7LiE%bI*-_ycnN2y!&B2&Or&tizzq|Fc+0>| z6KP}^&iqq(CbTP2fBN=6dAh&*(f((j9z6MwHV02X_~WN1CbGC?VhOhm+%fSsmKhd@ zrp3_I z=kn{q#09J{n016-zy9*zi*K6l@1H;ZZFiU9@_%|}hTa#d){13msg|Sq6EocWzaIy~ z_{gEr$(Dp)kPkx|9Jw%h=%P7OhjH$&}hbXl}qz|=)NsHv8ibwC!wDr<| z9KaCM6G-+nd7WhY$j0eMBTC-OwBuwM*<)kRz`mtT3}ajMi!no@K+K={M7wr8YyuqgHdhKSKH + + 4.0.0 + + com.bwie + etl-cloud + 1.0-SNAPSHOT + + etl-auth + pom + + etl-auth-common + etl-auth-server + etl-auth-common + + + 1.8 + UTF-8 + UTF-8 + 2.6.13 + 2021.0.5.0 + + diff --git a/etl-common/src/main/java/com/etl/common/constants/TokenConstants.java b/etl-common/src/main/java/com/etl/common/constants/TokenConstants.java index ad6bbce..57d7030 100644 --- a/etl-common/src/main/java/com/etl/common/constants/TokenConstants.java +++ b/etl-common/src/main/java/com/etl/common/constants/TokenConstants.java @@ -21,4 +21,12 @@ public class TokenConstants { * token标识 */ public static final String TOKEN = "token"; + /** + * 令牌自定义标识 + */ + public static final String AUTHENTICATION = "Authorization"; + /** + * 令牌前缀 + */ + public static final String PREFIX = "Bearer "; } diff --git a/etl-common/src/main/java/com/etl/common/enums/ResponseCodeEnum.java b/etl-common/src/main/java/com/etl/common/enums/ResponseCodeEnum.java new file mode 100644 index 0000000..cd65e20 --- /dev/null +++ b/etl-common/src/main/java/com/etl/common/enums/ResponseCodeEnum.java @@ -0,0 +1,29 @@ +package com.etl.common.enums; + +public enum ResponseCodeEnum { + + SUCCESS(200, "成功"), + FAIL(412, "失败"), + LOGIN_ERROR(202, "用户名或密码错误"), + + UNKNOWN_ERROR(500, "未知错误"), + PARAMETER_ILLEGAL(400, "参数不合法"), + + TOKEN_INVALID(412, "token 已过期或验证不正确!"), + TOKEN_SIGNATURE_INVALID(403, "无效的签名"), + TOKEN_MISSION(403, "token 缺失"), + REFRESH_TOKEN_INVALID(412, "refreshToken 无效"), + LOGOUT_ERROR(444, "用户登出失败"); + private final int code; + private final String message; + ResponseCodeEnum(int code, String message) { + this.code = code; + this.message = message; + } + public int getCode() { + return code; + } + public String getMessage() { + return message; + } +} diff --git a/etl-common/src/main/java/com/etl/common/result/CommonResult.java b/etl-common/src/main/java/com/etl/common/result/CommonResult.java new file mode 100644 index 0000000..b771fdb --- /dev/null +++ b/etl-common/src/main/java/com/etl/common/result/CommonResult.java @@ -0,0 +1,22 @@ +package com.etl.common.result; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class CommonResult{ + private Integer code; + private String message; + private T data; + private int dataSize; + + public CommonResult(Integer code,String message){ + this(code,message,null,0); + } + public CommonResult(Integer code,String message,T data){ + this(code,message,data,0); + } +} diff --git a/etl-common/target/classes/com/etl/common/constants/TokenConstants.class b/etl-common/target/classes/com/etl/common/constants/TokenConstants.class index a4da1a3930fc8689bd81226173b614c199a39810..b845155e61ed5de554f6dab0408c277db9d685c0 100644 GIT binary patch delta 214 zcmeBSdB!4o>ff$?3=9k=460lV%nWku4D##@3KK=MbrcyHSVR21UHv#1lo%QK9797q zT>U~kogG6w{efc2j0|i6L9T9|5gZIE6MLpIi!z8!R$&ZPVPxQSEG@~%FUqV+EXmBz zV`N}=N=++l^7}$Yo85nrLY*q#-25BIVkwFGXGBL;k00HeE5&!@I delta 141 zcmaFH(!(Np>ff$?3=9k=4DwtI%nVZO4ASfjG809!d1M(GSVR21UHv#1wU=#d3~=C(w!q4GQE_vwj&5A(TI}tH1$1`hZtLg^wjEy$ z#>iqIF2Xbz5->_)h&U+V7C_{q;qS2R_~aKq8=rI9$$**cemKwb{Lb_KJm)_7=l&xA z`;fK4gd=vmkFXU7tkCUnAtH_;aWgEAqa1FI5A4K7g?x--2gh;2p5WNY@u6Tp;@HJ8 zBG`{PIyhp29p&(H#07hjV>gE(*fEYyj&Z?GaO~ko2zHWVFUKjtCap*@SoNX4KEJLr zY!AdUDX)=FdWohoX|IuHJ&KZ4~lZKy=E(TM-PYW=t34{i;;D|pQ4uu)& zhJuHKp`-uF&Lh6CZ_pp{hexzPz(3$4i@HeYus=AW1&4hB?I6SYimYn`L0@Dj?0XQDG?~my3;)qy{EqXJX!DEIsbk z^VvjtoNBPPQw~FZs@rvZ)rDKm#FA4+j=|${uinZeTE|cyNTiM6RBF`7Mq;B$LafqV zXpEuD^>U8xRi~u}GVxe)IF?Nazg6d^bSy8H~4d~xPNY5JSu+!y6*XP;iWyf`^@_uU=omb_uM$_|<2n*;{`uTqw>=m+s6e=n!ywK6A=Qw-x6Li@%>MUAamQpWZmX zICqv5OE-TgfB(y056>#_N*ASXua#z}%in!ozWIoPE7&cgRa}%G-lrrLbP8-;))>ng zxrvDMUa?cKM_j3uI6we6@S=L^0v-a5=5(8o|$CH^fb^Q4ehejujc%G)RfBCxg zC1bf<*RmN`pW*W5sQz1;mfKa;H1}|CC;hQp^gFHVZ4q4uh*G~LrM^l^y_A%iCn+^X zQtE`HRK28Bs-#pHc~r%8C8Yrajtyd2NVdR+x6lQKZj!bV6`#ET_A6>0qxKd_3~$qE zk$1JE--CCm`uk8LQM+pLEWrF2CZS*RoPIAMN<|Ak5u5I5t>_dHPoNfNqN-=d#(7vg zo9@BtX))aczb!RIWRXyRiN&6`qyXEFD+UHCG)oXn1c0WBy{Ttt%LF97dpG%zRV1all`qWNTg9BO;#tHQP)ePSt2c5 z_}L(lR*7tMkl96blY}-)=oJUqT~ym7v_(Q&9n$bs3AIaTo5SX057pNswB2F7W|F(--gEBx@tyD9``16e{087SzUqLD z&!QY|%5X~tPllxka-v(7Auq${9T>ohNUJgwWO_S-J00jk(ZQO0OEQ!ltUI{tpdzyk z2UYoQihVJHdj`y0c{y)j@9b^wo;P0fN-N_trD}d9UzsovS<7#1cq`P$1N!-DrBGU- z+FbUkUbF7v((Qb%N?mlmuu}4>n-y*jFD!7y5$pNFms~Jr4A_%}QlUC+AejvKuEh>4 z`Qb(v8Su19cF$~~l)tdKwv?|dcuPfeuR7+N>NL#cj0CascQ?HvTitT|HS(=&z$#Z)^A!?P zSTUkm-=Wt0iK`TK#&>F6eXjRu#{2v9RO#>4_h-*{`u){|^u;QbvfXuYF zo4ruxWC77nPA+7h_c#6g64@|c-mK*E=L&LWdx8h>h+ID|4&jQ60~mDi5?*%k3Wi*~ ziV*|D|9^&ET*7G=Z{viE*YSpnQ!+h@V=nL3H(h*$69)D*t~m|Gsm(%hIbV^`BuYG( zQ&LDW<>EfRkl_LI&kXtCPm%qZA%UM#OiRK^W&R}@H|pXO95c|}2&j=}OTG2=d}-Oh zSP<^oc?jUvlp*=kWM4ZSFR&lv@%T?Q4)Wm`;KO4gB#=`I3F_)g;9<~0)`t0K4=8tY z?GRq$c$l*run^`qno4Jk@M9Q1aS}$7V+XeYJ#Y}mD5W87h!oPCaf=FQC`m$wkfH3- zvFK75<5xl*p+-X8Whhg03^mp&R4+sIsZc3x_<~RpLh1{vp#3VI4i)}viTceUl#z&ptL?q->-ki$-;w-IVkMuQkp{&Y|5dJk=%E)6(E zr{SEyWGm0%c0CLIi~#)_o~JPFBfA*P*=*OdK0}goqaMkbwUd9tjH=;&m(oeaE#X)L zp99;l+KnaWvvn1`1gW8CV~JHn8DT4(`T>^tDE$ZQEm+}4>EB_`Wl}qcs3`>}!~gf9 z<0N{4vuM^F`xCK*`2;-=;f^KD9dy*pV_AzPv8 z5hKSpiX@zxktysl)ddn{!*!i?oef(!1G%00@GZ{rLJ9GF7I2PhVbV5-_bHiJ;K~P- zELpjHlSI z#b{7uT)sgXZ~8argSUkMz5CzBN$?4Fo3rv|$x zR;6XPrc|$F%1$}m>4%7n?VwYw$Fim<5~ioFW-X;+>(nMEVJX#M>uyZz(0(_< zxQ@$;dxG;kr4V{q`2x!b^MoG7$CONVVjmVMS%K1S`gjY<_hCO{b4;Ra7z7rE@r(`{ z^N=j`!KxY5Y|Q2*-^>n}H7s|p(wK*{0diFfayM?l>{Jib@U zF@EB`T6Sf=naJ?%or0srw6Nv;hua0CYYT(ni=8N8~p dyXNE6cxag2?i(uF){7AG@4ipTA9-hQ{0j;kkk0@B literal 0 HcmV?d00001 diff --git a/etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/pojo/DataSource.java b/etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/pojo/DataSource.java index 483e507..718e908 100644 --- a/etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/pojo/DataSource.java +++ b/etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/pojo/DataSource.java @@ -4,6 +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 io.swagger.models.auth.In; import lombok.Data; import javax.validation.constraints.NotEmpty; @@ -19,9 +20,6 @@ public class DataSource{ @TableId(type = IdType.AUTO) private Long id; - @NotNull(message = "数据源id不能为空") - private Long dataSourceId; - @NotEmpty(message = "数据源描述不能为空") private String dataSourceDescribe; @@ -51,4 +49,5 @@ public class DataSource{ private Integer dataSourceType; @TableField(exist = false) private String dataSourceTypeName; + } diff --git a/etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/pojo/DatabaseConfig.java b/etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/pojo/DatabaseConfig.java index 27c41a3..f9b0aab 100644 --- a/etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/pojo/DatabaseConfig.java +++ b/etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/pojo/DatabaseConfig.java @@ -31,6 +31,7 @@ public class DatabaseConfig { private String tableName; @ApiModelProperty(value = "数据库库名") private String warehouseName; - + @ApiModelProperty(value = "数据表输入输出状态 0:输入 1:输出") + private Integer data; } diff --git a/etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/pojo/Task.java b/etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/pojo/Task.java index c9993fc..2a7101e 100644 --- a/etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/pojo/Task.java +++ b/etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/pojo/Task.java @@ -1,8 +1,8 @@ package com.etl.data.source.common.pojo; +import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; -import javax.persistence.*; import lombok.Data; import lombok.NoArgsConstructor; import java.util.Date; @@ -12,10 +12,10 @@ import java.util.Date; */ @Data @NoArgsConstructor +@TableName("task_manager") @ApiModel(value = "Task", description = "任务实体类") public class Task { - @ApiModelProperty(value = "主键ID", example = "1") private Integer id; diff --git a/etl-data-source/el-data-source-common/target/classes/com/etl/data/source/common/pojo/DataSource.class b/etl-data-source/el-data-source-common/target/classes/com/etl/data/source/common/pojo/DataSource.class index d7906899aa59cd446f34afced8a5814ca68a748d..cb783eb867624e2f6360cecb7762640c36a1fb78 100644 GIT binary patch literal 7858 zcmcgwdw3jG6+d^gkJ;VXO|qL!GD)ZnEYLP73xW@(v{?FpU|VWis-Oa!WJ$K&?1p_n ztD;2|5G^eNg0*0kM?sLb0x6V7K?M}wim&1eB`N;p-+qetJ9B4tW;Rp0{^R$xXV0AT zJ7?}auX`u2{O8bfM06JYEkdW$fiT7CJ4_y9@;H+xm`pJ_$mB^TPcb>f!=zf|Z~3cae(uNC@@Lcdk$cMAPpp(6^trqCZ0`XdAX6rw*1^5sVbwXNEey*isI zWQ${&Ri)zCB0<`^TCtj+$ZgD5^23GP(qgex%~tcJVnxuxRU@T|%y70eksmG9G80>e zp{Yz3YL!g3j>~Mw!ft33zWmj#lQ}_yO_>diZUCCCmR`K!B0-7KY&E;SR4b3D7y?g)k-P_zAm0BfNUXz``tLN0=M{j>{=B9(wJGVDrC$p8xHKj5V zWG{1i-wj9iT;~SHvCU#`gm=8QRIUn2I>IwltmejYW$gNtHBV+d91-(+^!MMk*jD}AlG+#Q}t(*?aF+vz?B=wZOK=vEogoc6g($i z%vYBPYMD2GBkFTmX%w$&U6n89*3>43b7jMni?cM6Eo{t|^V|WZ&|e+TW4p2ka@9hH zmz=2>b&WEem_W5omNu0#98+2D{Qj|AbqM)S%$x5>soA0_C~dUe933ujy*=W9W36_* zMj^PkUXJ{2x}_!or?47q}rX z(76KxK|L_w>wy7pZ^sPGESaqEVD73~wtzBo?e(JJO&AV~=3gpEl-#q^RH4vH)$v>z zlab3b&1ZsQNDMY<2<^6)L#9Il8pTlqY_+#4LDr-6G+HllxgFC}qqxiPWJ~Q-c1y2b zsy4&OHJ95Z+9it_FnbusCB_y=fIWdtfGy}XJlMNm?yCDf>F-!-xk}f(G*{`8$yi!5 z(2S+^*ccwWKW2r;R>e?aBb!%eCylX$+lX-qP)4%F60uGoKqb^$0_Woo|gwj@~Thn%SWR{Z-iJeL{?aE6yZKoidwxiwUc$GWS zYT6aDP}+)*^L=&zlxj)#zMzO4vn%rj9^>p)3Qpt8kf2QS#|3vEPix#fYVZ~1tzRx@ zyGk4AVwKLIcdPV%I$NbBOg_NmJSNL&g-RDNH^k(F{J5IAikDqYEBoXN-OGLo4tab#6v}iqcIj;FQlL=Hv$4x&W0wJiqIY0d z%JrV_z}7`R?hS0i$L-;;G52_(!=^6saThtTrn6NJY+dBzW^-UoCuaHH{jPh$*Z593Iq@t~(MrnHA~w9z=@X^d0A!&q%J zKEu-(M}voPtkL*PPvcFr*)-PCZ$9pX1p`lz&$}}^CBp0s?ixA%1Qlq)%TG(Qet1@L zV-~&r_?z{^bCms*y!`~4^}{ok{Y-lM2{!A8=P&!YiprooLtJqVHS33GGyAD{uSaRt z56^A(Q}y-}Zq^UaefCrH-dChqKYS*zpR2vs6K&QHpBL=s8t?U}&HCZ9g#B#sUQeu9 zKk_UReBFaLd?agb?6Z-%%F$~3TqJuD5XaMO6jT=Wsquuz&SvjdJLdWJ+8$V6gNRJE$#qy>8${D z>1|pogW60`tJdZKb?fZ_b?XVOok0l`)UG8QAWcsKr0E@6l0h9ND5-TgKs|a2pdP(b zOEIX^1f{f22dG!?0;pH-*18zfZGyVAZU?AO*8u9%do+zfJtj!gdMuFt5p;J8HQXjd zo6Nd3GsO}5Bz+1skrFS`wYXvUC@rSw(~z~$04lW@sq@8pNxTIJM{0?v(qJ(o}C%BZT z;Vb1beD{=nTZy$ zf_Bs0$Up$?a1S^iMZ^;NI{uJE@ zPN8qX$Nk{K^dcJW0dNs~P><7Ia8ddfK2sh9r;1K|1wI5WCeENPSfRbR%v*Y>`)vsP zD03lD+9br=Scv`XV?l}n7Qn*z-69hfbiiz6qtpb4++Z8;p)gI9SthoXx6U*Sdl}lc z$5fl(nz<_4HkL9O3p6+Snc$0V5~yV>XLqbxQ+ySpVk#K)8(r7gJFmfDtTQGx7k*iD;FmOP;K zSp)&mQVlTkwJZ`ctgmnLEkMWT!Oz(hVDTi2y)2$$@idF?v-kmvAF_Cc#j`A) zWAUQ^{Wyf*=UM!OL;jStpRxEki(jz#C5vCN_%(~)uy}#Ri!5GZ@mm(Z;{d-8(90p} zrNYH$defn z)VO>@>Y`LKo63zQm*;b%3k7Mb%ehi!JiRVc%nW7Ii*vbrDOJkkb45W5mJjF0lS8Te zcxEJDPL6LLf~PoWEYVtGrOC(?oj>Y@#ftOc4`i_czrmLPQ`RZ6YN zmkYxPCg^BmsGE`(rLq}#Frefx230DgGPzPQxiVi`S)Z?5azt}O+xb^O(>Edu9GlXz)Te8-a3K=6^#~gN8 z%f=^4n=!7g>S$)RZ9A}cr*lN%Y$msH@yJL4gBNsU6?07rr8A`dB zF04$AV`Oux@cq}{Gjrvx>1(#uU?)<=;>Gy_@@NfXddKDaZ@1}s7gS1&emSPQuQpL0!XE?nH>$N1GyC5@aAITf{J}`aN zJ4HJ!O3DwX zvg=ZX3~v?F=q-(9FkQJ>(xq&YN0=-c8vvy~K8}i?$ZyCeIj3@8@cT#8CEgzKdGl>6 zW$xt|oEDm4tqzM-+bs@ywYsB#WAs*GhG96nT6g@ks#;l1c*5E`%BR&4*D4^*f#oq; zRl+Y_W-pW=3~S74V12c@YLU=dbJze^dW9-Ml}8!LiZ17EMyfTp*No3v^N!k4TCPTe z44BohqY`5oB*5y@CcrXu84;}6FLi90ZW-@TZaGRv^EF55u*qCj8mgJg%42PMtgSUG zJ(eqiS{&ZEA~j+3INXJdtA{e2$}Qs>Lw$^;ies`(qGt}GgjTH{T(Jx_1|7Y!&6h>l92_OA<_2*>AVK%9(jJ;YeX1 zQOTG6eO5x0QeHL%q0)Lf zN5ysaB$XDjIF%Nww3Nl^EI!QQO!|mQD_C2}ViiBGW^FBNXVYRqeSGn&?@&_dJ9LRk z=Tl0hEvyZ(HbxnhvMh2ehG|5lG>Z#ZjI!9kVk3)j7I_wT(4Dx)S(j9qywl2=>P(2<^;nsgwZh(ScrD5x@{0=&h82e5w=zo|*=F zomB^$X1DQ(DrXsd2yQD77=i=6vPh*a%LO_DTjS+|fz2`EN)f>>=BxAwVGA@`nUPHx znSXO&j(!iCtpDR!tr*;n~<_v$4y7LZ#2fo-rGH z22j`#v$2D-v4cQi-`KF`+?Lz0Rg;Ie7pCmt9cJU06FSSrshT{z5p7sA*hg*Hs>#Fq z)rK{Ltg&IMCJ%3GV=UO&$Z=(D)q9!p50htS4Y|dYjBepVZm1=XA^CPk0)Ah9C;uLzP2J7*1h31?7<$K zX$SlJ?k1mivj1s{-AulQ$^NG(wql@fiW-eaC`~H|Aaw77=P0aspQWblq%P3BQxvZt znspx_&AMOnF~rpMjpr{FoXi*!eLyrN}p*LzV1~reQP7>eO4bW(KvGpk}Sb2I|sV0qWA*v{nYSnV?p!%?9e$+X3p< zJG6ENb(o-bt-}WD(KUd2^iEAe9L^AnznvKm*m> zdqhH(Mx{ZEgY-qZ6ou0&-lWTL7xGX-yh2}st%3T)i*z|OFP$NF(-qKsv_d>cS3>hs zR$ND4h8CcL*h*JHQ|MZeqpv^<(v4z_z6vcwQ(};|LJQO5VhLRhO{G^bj&0B)^tzZs z*FcNnzIKqVg%%Tj`WJl-TBA6MUZ(4yHHm(Dfv$%Z7iZ!#;s$8VVioP6uS07QdBnI8 zTB|5yB;SD6Ca%YK*-g;e#m)F?yBS)Ccog^QZ$i_=UfkSofz~Nr#b?2-(7MDv>Z04A zb0+ zLk}7*^b(U5thh8iWVk|A7dnh&b?RZmh2~QXDNZareS&}~dsq~hw) zqlPP5b)g5zcg@jbh70Y-WW@|ux9i5liW=!R7pXy{M(qMb` zu%VTF6+i{!b(&0=-v+agwN?`xaDpwoi^HTSvnUqJ-DeVmZbXZFNViE39fEE}cqfDz zBz))~R-D6t%uwn(hO(j^9%lxO94??0vo5F^mfNjSSD?ScKcnirMsuzQZ3d6k7u*{8 zyC9gaXsr7c)?3~k2QNZfz@O4&=cbp?8u*VLlaEpF`dxHn{5?}NmmByLCE`a(y_xl+ zrQVL8_%Tw)y<={Cp42tg=Sv+|jk$5e;5fMDB;x&2?_xVH9&E==V{RPB0_&}eIacaD wY)?uZm!CxZIH}KJ`|%J{bVBW?r~Pj-lV%I_(3EkS?W+E@XE)~gXp#2(4~qLk;{X5v diff --git a/etl-data-source/el-data-source-common/target/classes/com/etl/data/source/common/pojo/DatabaseConfig.class b/etl-data-source/el-data-source-common/target/classes/com/etl/data/source/common/pojo/DatabaseConfig.class index 350a6fdceec9833359e8ee62b9b1cb0da9d179cb..18e8ab2dc80f3174fe15d7f12e7c98df53c2b4d4 100644 GIT binary patch literal 5283 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 Xil-0?zu|w3l3@Lb;ThVKqi6pI?Bs6b literal 0 HcmV?d00001 diff --git a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/controller/DataSheetController.java b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/controller/DataSheetController.java index a55991f..12b10ce 100644 --- a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/controller/DataSheetController.java +++ b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/controller/DataSheetController.java @@ -3,6 +3,7 @@ package com.etl.data.source.server.controller; import com.etl.data.source.server.service.DataSheetService; import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; /** @@ -16,4 +17,6 @@ import org.springframework.web.bind.annotation.RestController; public class DataSheetController { @Autowired private DataSheetService dataSheetService; + + } diff --git a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/controller/DatabaseController.java b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/controller/DatabaseController.java index 9e0ab85..4672c1a 100644 --- a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/controller/DatabaseController.java +++ b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/controller/DatabaseController.java @@ -5,6 +5,7 @@ import com.etl.data.source.common.config.Limit; import com.etl.data.source.common.pojo.DatabaseConfig; import com.etl.data.source.common.pojo.DatabaseRedis; import com.etl.data.source.common.pojo.resq.ColumnInfo; +import com.etl.data.source.common.pojo.until.R; import com.etl.data.source.server.service.DatabaseService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -60,4 +61,16 @@ public class DatabaseController { return Result.success(databaseService.findDatabaseTableField(config)); } + @PostMapping("/findDatabaseTableFieldPrice") + @ApiOperation("数据表输入") + public Result> > findDatabaseTableFieldPrice(@Valid @RequestBody DatabaseConfig config){ + return Result.success(databaseService.findDatabaseTableFieldPrice(config)); + } + + @PostMapping("outDatabaseTableFieldPrice") + @ApiOperation("数据表输出") + public Result outDatabaseTableFieldPrice(@Valid @RequestBody DatabaseConfig config){ + return Result.success(databaseService.findDatabaseTableFieldPrice(config)); + } + } diff --git a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/controller/RuleController.java b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/controller/RuleController.java new file mode 100644 index 0000000..befeae9 --- /dev/null +++ b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/controller/RuleController.java @@ -0,0 +1,57 @@ +package com.etl.data.source.server.controller; + +import com.etl.data.source.common.pojo.Code; +import com.etl.data.source.common.pojo.Rule; +import com.etl.data.source.common.pojo.req.RuleReq; +import com.etl.data.source.common.pojo.until.R; +import com.etl.data.source.server.service.RuleService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @ClassName RuleController + * @Description 描述 + * @Author ZeZhang.Liu + * @Date 2024/6/26 9:33 + */ +@RestController +@Api(tags = "规则管理") +public class RuleController { + @Autowired + private RuleService ruleService; + + @GetMapping("findRule") + @ApiOperation(value = "查询规则") + public R findRule(@RequestBody RuleReq ruleReq) { + List ruleList=ruleService.findRule(ruleReq); + return R.ok(ruleList); + } + + @PostMapping("addRule") + @ApiOperation(value = "添加规则") + public R addRule(@RequestBody Rule rule) { + return ruleService.addRule(rule); + } + + @PutMapping("updateRule") + @ApiOperation(value = "修改规则") + public R updateRule(@RequestBody Rule rule) { + return ruleService.updateRule(rule); + } + + @DeleteMapping("deleteRule") + @ApiOperation(value = "删除规则") + public R deleteRule(@RequestParam("id") Long id) { + return ruleService.deleteRule(id); + } + + @PostMapping("/addCode") + @ApiOperation(value = "添加规则") + public R addCode(@RequestBody Code code) { + return ruleService.addCode(code); + } +} diff --git a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/controller/TaskController.java b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/controller/TaskController.java index 607b3d2..d7bef75 100644 --- a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/controller/TaskController.java +++ b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/controller/TaskController.java @@ -17,7 +17,7 @@ import java.util.List; * @Date 2024/6/25 20:59 */ @RestController -@Api("任务模块") +@Api(tags = "任务模块") public class TaskController { @Autowired private TaskService taskService; diff --git a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/mapper/CodeBaseMapper.java b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/mapper/CodeBaseMapper.java new file mode 100644 index 0000000..0f58282 --- /dev/null +++ b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/mapper/CodeBaseMapper.java @@ -0,0 +1,13 @@ +package com.etl.data.source.server.mapper; + +import com.etl.data.source.common.pojo.Code; +import com.github.yulichang.base.MPJBaseMapper; + +/** + * @ClassName CodeBaseMapper + * @Description 描述 + * @Author ZeZhang.Liu + * @Date 2024/6/26 9:36 + */ +public interface CodeBaseMapper extends MPJBaseMapper { +} diff --git a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/mapper/RuleBaseMapper.java b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/mapper/RuleBaseMapper.java new file mode 100644 index 0000000..e82c49e --- /dev/null +++ b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/mapper/RuleBaseMapper.java @@ -0,0 +1,13 @@ +package com.etl.data.source.server.mapper; + +import com.etl.data.source.common.pojo.Rule; +import com.github.yulichang.base.MPJBaseMapper; + +/** + * @ClassName RuleBaseMapper + * @Description 描述 + * @Author ZeZhang.Liu + * @Date 2024/6/26 9:35 + */ +public interface RuleBaseMapper extends MPJBaseMapper { +} diff --git a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/service/DatabaseService.java b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/service/DatabaseService.java index 27e2e86..a5e5f61 100644 --- a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/service/DatabaseService.java +++ b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/service/DatabaseService.java @@ -29,4 +29,5 @@ public interface DatabaseService { Map testDatabaseRedis(DatabaseRedis databaseRedis); + List> findDatabaseTableFieldPrice(DatabaseConfig config); } diff --git a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/service/RuleService.java b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/service/RuleService.java new file mode 100644 index 0000000..4bcd6a5 --- /dev/null +++ b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/service/RuleService.java @@ -0,0 +1,27 @@ +package com.etl.data.source.server.service; + +import com.etl.data.source.common.pojo.Code; +import com.etl.data.source.common.pojo.Rule; +import com.etl.data.source.common.pojo.req.RuleReq; +import com.etl.data.source.common.pojo.until.R; +import com.github.yulichang.base.MPJBaseService; + +import java.util.List; + +/** + * @ClassName RuleService + * @Description 描述 + * @Author ZeZhang.Liu + * @Date 2024/6/26 9:33 + */ +public interface RuleService extends MPJBaseService { + List findRule(RuleReq ruleReq); + + R addRule(Rule rule); + + R addCode(Code code); + + R updateRule(Rule rule); + + R deleteRule(Long id); +} diff --git a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/service/impl/DatabaseServiceImpl.java b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/service/impl/DatabaseServiceImpl.java index 3b22b6f..55df9a9 100644 --- a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/service/impl/DatabaseServiceImpl.java +++ b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/service/impl/DatabaseServiceImpl.java @@ -9,6 +9,7 @@ import com.etl.data.source.server.config.RedisConfig; import com.etl.data.source.server.mapper.DataSourceBaseMapper; import com.etl.data.source.server.mapper.DataSourceTypeBaseMapper; import com.etl.data.source.server.service.DatabaseService; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DriverManagerDataSource; @@ -29,6 +30,7 @@ import java.util.*; * @Date 2024/6/21 20:16 */ @Service +@Slf4j public class DatabaseServiceImpl implements DatabaseService { @Autowired private DataSourceBaseMapper dataSourceBaseMapper; @@ -159,54 +161,140 @@ public class DatabaseServiceImpl implements DatabaseService { return columnInfos; } + @Override + public List> findDatabaseTableFieldPrice(DatabaseConfig config) { + List> results = new ArrayList<>(); + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + try { + connection = getConnection(config); + // 这里我们仅作为示例直接构建SQL查询语句,实际中可能需要更复杂的逻辑来构建SQL + String sql = "SELECT * FROM " + config.getWarehouseName() + "." + config.getTableName(); + preparedStatement = connection.prepareStatement(sql); + resultSet = preparedStatement.executeQuery(); + + ResultSetMetaData metaData = resultSet.getMetaData(); + int columnCount = metaData.getColumnCount(); + + while (resultSet.next()) { + Map rowData = new HashMap<>(); + for (int i = 1; i <= columnCount; i++) { + String columnName = metaData.getColumnName(i); + Object columnValue = resultSet.getObject(i); + rowData.put(columnName, columnValue); + } + results.add(rowData); + } + } catch (SQLException e) { + // 处理异常 + e.printStackTrace(); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } finally { + // 关闭资源 + try { + if (resultSet != null) resultSet.close(); + if (preparedStatement != null) preparedStatement.close(); + if (connection != null) connection.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + if(1 == config.getData()){ + insertDataExcludingId(config, results); + } + return results; + } + + public void insertDataExcludingId(DatabaseConfig config, List> results) { + Connection connection = null; + PreparedStatement preparedStatement = null; + + try { + connection = getConnection(config); + + for (Map rowData : results) { + // 获取列名并构建 SQL 语句 + List columnNames = new ArrayList<>(rowData.keySet()); + columnNames.remove("id"); // 移除 id 列 + StringBuilder sql = new StringBuilder("INSERT INTO "); + sql.append(config.getWarehouseName()).append(".").append(config.getTableName()).append(" ("); + for (int i = 0; i < columnNames.size(); i++) { + if (i > 0) { + sql.append(", "); + } + sql.append(columnNames.get(i)); + } + sql.append(") VALUES ("); + + // 添加占位符 + for (int i = 0; i < columnNames.size(); i++) { + if (i > 0) { + sql.append(", "); + } + sql.append("?"); + } + sql.append(")"); + + preparedStatement = connection.prepareStatement(sql.toString()); + + // 填充数据并执行 INSERT + int index = 1; + for (String columnName : columnNames) { + preparedStatement.setObject(index++, rowData.get(columnName)); + } + + preparedStatement.executeUpdate(); + } + } catch (SQLException | ClassNotFoundException e) { + e.printStackTrace(); + } finally { + // 关闭资源 + try { + if (preparedStatement != null) preparedStatement.close(); + if (connection != null) connection.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } @Override public Map testDatabaseRedis(DatabaseRedis databaseRedis) { // 创建一个空的HashMap来存储Redis中的所有键值对 Map allData = new HashMap<>(); - // 从Redis配置中获取Jedis连接池 JedisPool jedisPool = RedisConfig.getJedisPool(databaseRedis); - // 从连接池中获取一个Jedis资源 Jedis resource = jedisPool.getResource(); - // 创建一个ScanParams对象,设置每次迭代返回的键的数量(这里设置为100) ScanParams scanParams = new ScanParams().count(100); - // 初始化游标为0,表示开始迭代 String cursor = "0"; - // 使用do-while循环来迭代Redis中的所有键 do { // 使用scan方法和ScanParams对象来获取一批键和新的游标 ScanResult scanResult = resource.scan(cursor, scanParams); - // 更新游标以便下一次迭代 cursor = scanResult.getCursor(); - // 获取当前迭代返回的键列表 List keys = scanResult.getResult(); - // 遍历键列表,并获取每个键对应的值 for (String key : keys) { // 假设所有键对应的值都是字符串类型 String value = resource.get(key); - // 如果值不为null,则将其添加到Map中 if (value != null) { // 将键值对添加到Map中 allData.put(key, value); } } - - // 当游标为"0"时,表示迭代完成 + // 当游标为"0"时,表示迭代完成 } while (!cursor.equals("0")); - // 返回包含所有键值对的Map return allData; } - private static Connection getConnection(DatabaseConfig config) throws ClassNotFoundException, SQLException { // 加载MySQL驱动 Class.forName(config.getDriverClassName()); diff --git a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/service/impl/RuleServiceImpl.java b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/service/impl/RuleServiceImpl.java new file mode 100644 index 0000000..bebfbcd --- /dev/null +++ b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/service/impl/RuleServiceImpl.java @@ -0,0 +1,95 @@ +package com.etl.data.source.server.service.impl; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.etl.data.source.common.pojo.Code; +import com.etl.data.source.common.pojo.CodeType; +import com.etl.data.source.common.pojo.Rule; +import com.etl.data.source.common.pojo.RuleType; +import com.etl.data.source.common.pojo.req.RuleReq; +import com.etl.data.source.common.pojo.until.R; +import com.etl.data.source.server.mapper.CodeBaseMapper; +import com.etl.data.source.server.mapper.RuleBaseMapper; +import com.etl.data.source.server.service.RuleService; +import com.github.yulichang.base.MPJBaseServiceImpl; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @ClassName RuleServiceImpl + * @Description 描述 + * @Author ZeZhang.Liu + * @Date 2024/6/26 9:34 + */ +@Service +public class RuleServiceImpl extends MPJBaseServiceImpl implements RuleService { + @Autowired + private RuleBaseMapper ruleBaseMapper; + + @Autowired + private CodeBaseMapper codeBaseMapper; + + @Override + public List findRule(RuleReq ruleReq) { + MPJLambdaWrapper ruleMPJLambdaWrapper = new MPJLambdaWrapper<>(); + ruleMPJLambdaWrapper.select(Rule::getId, Rule::getRuleTypeId, Rule::getRuleName) + .select(RuleType::getRuleTypeName) + .select(CodeType::getCodeTypeName) + .leftJoin(RuleType.class, RuleType::getId, Rule::getRuleTypeId) + .leftJoin(Code.class, Code::getRuleId, Rule::getId) + .leftJoin(CodeType.class, CodeType::getId, Code::getCodeTypeId); + if (ruleReq.getRuleTypeId() != null) { + ruleMPJLambdaWrapper.eq(Rule::getRuleTypeId, ruleReq.getRuleTypeId()); + } + if (ruleReq.getCodeTypeId() != null) { + ruleMPJLambdaWrapper.eq(Code::getCodeTypeId, ruleReq.getCodeTypeId()); + } + Page page = new Page<>(ruleReq.getPageNum(), ruleReq.getPageSize()); + IPage ruleIPage = ruleBaseMapper.selectJoinPage(page, Rule.class, ruleMPJLambdaWrapper); + List records = ruleIPage.getRecords(); + return records; + } + + @Override + public R addRule(Rule rule) { + if (rule != null){ + if (ruleBaseMapper.insert(rule) > 0){ + return R.ok("添加成功"); + } + } + return R.fail("添加失败"); + } + + @Override + public R updateRule(Rule rule) { + if (rule != null){ + if (ruleBaseMapper.updateById(rule) > 0){ + return R.ok("修改成功"); + } + } + return R.fail("修改失败"); + } + + @Override + public R deleteRule(Long id) { + if (id != null){ + if (ruleBaseMapper.deleteById(id) > 0){ + return R.ok("删除成功"); + } + } + return R.fail("删除失败"); + } + + @Override + public R addCode(Code code) { + if (code != null){ + if (codeBaseMapper.insert(code) > 0){ + return R.ok("添加成功"); + } + } + return R.fail("添加失败"); + } +} diff --git a/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/controller/DataSheetController.class b/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/controller/DataSheetController.class new file mode 100644 index 0000000000000000000000000000000000000000..96b8008f77ac83a6c795a052c23a9eafa62a2eb2 GIT binary patch literal 676 zcmaJ<%SuBr5S?gkwbn=L8{D{47iOcNC_<^Yx+t{LjjP<->235jktDUa?NV^%)}L@C z3i<(lhp1m6&b>-~pxw;LnK{YKN%Hu1_W%H^Fq?&bn99I(24)zH*Mt+52BNE=Ih6r2 zSn~qixD8+fthbXyv%(Xr_*sifOx(7(7;WsoZA8Vxz-Nrii@ zrjO=8P&WnzPX{8Z3L|6wnM}Ecr1qP=ECpIQqoau2bzPOZIhr6_Nv>d5#%*T*(5xJZ zQ}Lh4Hu~I`s`lMq8Lj)#V&0RQ+qMWpn&RssEH9o&njqywNH%h>=be|%?epcu)BRNr z24RT7Mvuqp?Tj8jo|{KPg?!&X!oa}-^wIACV1y|cAWRcW6K0Yui<=V5661u7aA5fc q*flNsV3=Yo2FOE>V(vo#BQToO$C5an99kfKo_K*Y6NkVoOuhpUz`|hw literal 0 HcmV?d00001 diff --git a/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/controller/DataSourceController.class b/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/controller/DataSourceController.class index c3216b2bc6d1d3c0dea99476ace27ddb6bfa917c..477510d7c7aff954594abfb5a1cd8b3d0bd08338 100644 GIT binary patch delta 76 zcmcaEa#v)-3N``$XHz#k>s|M3*Mw)2d!Ou`GkFu+cSfs|M3*M!MC*uFDLOy0om#3(;`BB%IdE{-BbRWM7AlW+1O Wjub|1D6fdo5Xh=xG@s1F6$k)acNwez diff --git a/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/controller/DatabaseController.class b/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/controller/DatabaseController.class index 64b147b1c4ff8424091de74178e08a108d61e259..1c78638bdb889030656182c5ebd3485c97d2620f 100644 GIT binary patch delta 1682 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 Vpk0g%OhC&)fRTY2NHQ_7005xuC|dvk literal 0 HcmV?d00001 diff --git a/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/mapper/RuleBaseMapper.class b/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/mapper/RuleBaseMapper.class new file mode 100644 index 0000000000000000000000000000000000000000..21b61295fca93b82de1efa69249f8d851c07c845 GIT binary patch literal 312 zcma)2JC4FI5Pe=g0k%Qn5Zf^nbU_pp6f4l8A>3a#S?iE4}a zXlC9=^LXCw0G9YnFiJ2^FcBCZi@cW3TNY5eQeGr!S?BbVm8@L4Q>LQ4aA%*<)$2l? zyJaR@rv2f26Y5?z4ck>bWT)vQout-ytC#|~GBq`(H1z8=r|VQ;a*WGup@ZbC8^37g uodJPGr}|FTvc0gSD(XeL7fxXMZe8H(pWcT80v{oI;X4RjKjs03u_k{lE?)!y literal 0 HcmV?d00001 diff --git a/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/mapper/TaskMapper.class b/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/mapper/TaskMapper.class new file mode 100644 index 0000000000000000000000000000000000000000..0015194139118a9ad1ddce61b2dfe89eb342504c GIT binary patch literal 304 zcma)2yN<#@44j2K!lQt{ph4$`E{Ng^3KVom@B_}?Di4xuwAn=B*C_Y^KI(LvrK6&- z$MV=SmLGq&JAgH20mcC)0j2_zQaaFx(coGWR=Na~W3%%*Kj*S5%H z+LJLiiVny9x5ES1wK5w&sBA&MY?&I}8mY)Fm%5@_=bFykT*7TAFgff$?3=9k=45I7|!t4wp8wJ{!6r|HK^HN+AOA?b3i&H}qlX6nsGE;L> z0*W$|QyCd5H6|})RGb{Z#4)*(QF3wulQxHcQdVkmiM8G2iA+_DY?FDIJ)~F|8Tc94 T7#JDYfyOg22mo1vV3rU7E*2bA delta 46 zcmeC+xW^`N>ff$?3=9k=48rUTg6s@J8wJ{!CL1u9GO|uy#_Ykxz{tQ4lxAWO001EA B33mVh diff --git a/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/service/RuleService.class b/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/service/RuleService.class new file mode 100644 index 0000000000000000000000000000000000000000..90e8b8c1eb8613c3469d9f665c7e423bdae9deda GIT binary patch literal 816 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 delta 3718 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 diff --git a/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/service/impl/RuleServiceImpl.class b/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/service/impl/RuleServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..1aeda1e8c29c950a7218a57c072f2f903bd1707e GIT binary patch literal 8103 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 Veb~+2#=eHH`^IkVMtPe%_CG=aUw!}p literal 0 HcmV?d00001 diff --git a/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/service/impl/TaskServiceImpl.class b/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/service/impl/TaskServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..ecf968a1dc35f10659079e712c520dfde587605e GIT binary patch literal 2697 zcmb7GT~ixX7=BI?NC+XVDWy`YR;4ur%C=ftN)Qcb6~H-Rx#|H)Ze_ zbb955H{NJ3+VRe@GmK2_jC$?w5Jvxl`zb8S?NSOKq@c>}auU~)xSqrc zL)zi?t!3V9Y8JzkS~VMr=IBa|J6y5NmQ~dhTeEI!meO#Al-0I;kzw>k%Wy`T?+cvFRN=4&_t!(hBV_G{3Z!0LJmSb)UOREuV z|Ew^CGsh6mkFPN#7R;K)a6}b`cCFQ@Xx1txHin#PR=K{$Eg{eTWy0AMM1SQ;zDSn@ zxh5J--Sw#KT`ba>_){Cgs7XhOB0sKf@!MQ!IYL)dVLSAE*bUmslFA#E8eg~k@F^~3 zT{xSqin7zvMRk)Kb!FRot}J&b5YWhf9oT6GPOLv2)NG`)l+1={C{1(Abe$~D5#>Nx z)D7;mEQ;UEA?Ka~D9LMnjArt^(fg6qWl+kFtP8RyA!EsKwl@f>4Pj9B90s`HuJQGDl|GtvZf>3w71C46(i+*RJq88kzw^Mq1>g* z?u581WHSzjp2=fAH0#wupBOL~h~} zQro|C@6WIAw?({TAo3|bW4Ih;W=C+NrV+zrWI(!<2F>suh(ej73U|j_s3~bi*wigm zr=;r)^Wmyq(7A0>w?vxsggNK>(Cd4JA?xuknZl40mtp0w5z#gXg9?k@E}9+mjRXn$ zJ3PaWhas<5w#eV&IE@s4et0eIj}7lI>T3v7)~w*V_(HyRJT1>+Pq5HUFf>biM!ZC? z?qi_tpxRo_qRv;InbL8s^Fq|nM}?JMkoJ)}(xr+guh+Vix}cmj91F{F1Ug8hlQ>7xQzTDXe_@!Fl5UL7ccmQ+Xfu*_sFSupuoM4F zd!Y;MYk0kjx7mR9h@?H*Nqe4XFLa^3h&Oz1FLj~4jA@^Co}wY6m-U1EObovwA=$!( daw(L~Y&))5`n;4(aX)=mFyrbK+x0jL`~y^=+hPC! literal 0 HcmV?d00001 diff --git a/etl-gateway/pom.xml b/etl-gateway/pom.xml index 5c9f651..3d93677 100644 --- a/etl-gateway/pom.xml +++ b/etl-gateway/pom.xml @@ -8,7 +8,6 @@ 1.0-SNAPSHOT etl-gateway - etl-gateway 1.8 UTF-8 @@ -18,6 +17,56 @@ 2021.0.5 + + com.alibaba + fastjson + 2.0.15 + + + com.bwie + etl-jwt-manage + 1.0-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-webflux + + + + com.bwie + etl-jwt-manage + 1.0-SNAPSHOT + compile + + + org.springframework.boot + spring-boot-starter-web + + + com.alibaba + druid-spring-boot-starter + + + servlet-api + javax.servlet + + + + + org.springframework.cloud + spring-cloud-starter-gateway + 3.1.3 + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-webflux + + + com.bwie etl-common @@ -57,11 +106,6 @@ com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery - - org.springframework.cloud - spring-cloud-starter-gateway - 3.1.3 - diff --git a/etl-gateway/src/main/java/com/etl/gateway/EtlGatewayApplication.java b/etl-gateway/src/main/java/com/etl/gateway/EtlGatewayApplication.java index 62b9dd9..a02f238 100644 --- a/etl-gateway/src/main/java/com/etl/gateway/EtlGatewayApplication.java +++ b/etl-gateway/src/main/java/com/etl/gateway/EtlGatewayApplication.java @@ -2,8 +2,10 @@ package com.etl.gateway; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; @SpringBootApplication +@ComponentScan(basePackages = {"com.etl.jwt.util", "com.etl.jwt.config"}) public class EtlGatewayApplication { public static void main(String[] args) { diff --git a/etl-gateway/src/main/java/com/etl/gateway/config/WhiteListProperties.java b/etl-gateway/src/main/java/com/etl/gateway/config/WhiteListProperties.java new file mode 100644 index 0000000..7e607e4 --- /dev/null +++ b/etl-gateway/src/main/java/com/etl/gateway/config/WhiteListProperties.java @@ -0,0 +1,14 @@ +package com.etl.gateway.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Data +@Component +@ConfigurationProperties(prefix = "auth.ignore") +public class WhiteListProperties { + private List whites; +} diff --git a/etl-gateway/src/main/java/com/etl/gateway/filters/AuthFilter.java b/etl-gateway/src/main/java/com/etl/gateway/filters/AuthFilter.java index 52441d0..19df148 100644 --- a/etl-gateway/src/main/java/com/etl/gateway/filters/AuthFilter.java +++ b/etl-gateway/src/main/java/com/etl/gateway/filters/AuthFilter.java @@ -1,95 +1,95 @@ package com.etl.gateway.filters;//package com.health.cloud.gateway.filters; -// -// -//import com.health.cloud.common.constants.TokenConstants; -//import com.health.cloud.common.util.JwtUtils; -//import com.health.cloud.common.util.StringUtils; -//import com.health.cloud.gateway.config.IgnoreWhiteConfig; -//import com.health.cloud.gateway.utils.GatewayUtils; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.cloud.gateway.filter.GatewayFilterChain; -//import org.springframework.cloud.gateway.filter.GlobalFilter; -//import org.springframework.core.Ordered; -//import org.springframework.data.redis.core.RedisTemplate; -//import org.springframework.http.server.reactive.ServerHttpRequest; -//import org.springframework.stereotype.Component; -//import org.springframework.web.server.ServerWebExchange; -//import reactor.core.publisher.Mono; -// -//import java.util.List; -//import java.util.concurrent.TimeUnit; -// -///** -// * @ClassName: -// * @Description: 过滤请求,验证 token -// * @Author: dongyan Ma -// * @Date: 2024/2/28 -// */ -//@Component -//public class AuthFilter implements GlobalFilter, Ordered { -// -// @Autowired -// private IgnoreWhiteConfig ignoreWhitesConfig; -// -// @Autowired -// private RedisTemplate redisTemplate; -// -// /** -// * 过滤请求方法 -// * @param exchange 请求的上下文, 通过这个对象可以获取请求对象以及响应对象 -// * @param chain 过滤器链 使用他进行 过滤 或者 放行 -// * @return -// */ -// @Override -// public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { -// // 判断这次请求是否需要验证 token 白名单【直接放行的请求】 -// // 获取系统白名单 -// List whites = ignoreWhitesConfig.getWhites(); -// // 获取当前请求的 URI -// ServerHttpRequest request = exchange.getRequest(); -// String path = request.getURI().getPath(); -// boolean matches = StringUtils.matches(path, whites); -// if (matches) { -// // 白名单请求 + + +import com.etl.common.constants.TokenConstants; +import com.etl.common.util.JwtUtils; +import com.etl.common.util.StringUtils; +import com.etl.gateway.config.IgnoreWhiteConfig; +import com.etl.gateway.utils.GatewayUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.core.Ordered; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + +import java.util.List; +import java.util.concurrent.TimeUnit; + +/** + * @ClassName: + * @Description: 过滤请求,验证 token + * @Author: dongyan Ma + * @Date: 2024/2/28 + */ +@Component +public class AuthFilter implements GlobalFilter, Ordered { + + @Autowired + private IgnoreWhiteConfig ignoreWhitesConfig; + + @Autowired + private RedisTemplate redisTemplate; + + /** + * 过滤请求方法 + * @param exchange 请求的上下文, 通过这个对象可以获取请求对象以及响应对象 + * @param chain 过滤器链 使用他进行 过滤 或者 放行 + * @return + */ + @Override + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + // 判断这次请求是否需要验证 token 白名单【直接放行的请求】 + // 获取系统白名单 + List whites = ignoreWhitesConfig.getWhites(); + // 获取当前请求的 URI + ServerHttpRequest request = exchange.getRequest(); + String path = request.getURI().getPath(); + boolean matches = StringUtils.matches(path, whites); + if (matches) { + // 白名单请求 + return chain.filter(exchange); + } +// boolean anyMatch = whites.stream().anyMatch(white -> white.equals(path)); +// if (anyMatch) { + // 白名单请求 // return chain.filter(exchange); // } -//// boolean anyMatch = whites.stream().anyMatch(white -> white.equals(path)); -//// if (anyMatch) { -// // 白名单请求 -//// return chain.filter(exchange); -//// } -// // 验证 token -// String token = request.getHeaders().getFirst(TokenConstants.TOKEN); -// // 非空验证 -// if (StringUtils.isBlank(token)) { -// // 空的 -// return GatewayUtils.errorResponse(exchange, "token不能为空!"); -// } -// // 是否合法 -// try { -// JwtUtils.parseToken(token); -// } catch (Exception e) { -// return GatewayUtils.errorResponse(exchange, "token不合法!"); -// } -// // 是否有效 -// String userKey = JwtUtils.getUserKey(token); -// if (!redisTemplate.hasKey(TokenConstants.LOGIN_TOKEN_KEY + userKey)) { -// return GatewayUtils.errorResponse(exchange, "token过期!"); -// } else { -// // 重新设置 redis中的用户有效时间 -// redisTemplate.expire(TokenConstants.LOGIN_TOKEN_KEY + userKey, 30, TimeUnit.MINUTES); -// } -// // 放行 -// return chain.filter(exchange); -// } -// -// /** -// * 规定过滤器执行的顺序 -// * @return 方法的返回值越小 执行顺序越高 -// */ -// @Override -// public int getOrder() { -// return 0; -// } -// -//} + // 验证 token + String token = request.getHeaders().getFirst(TokenConstants.TOKEN); + // 非空验证 + if (StringUtils.isBlank(token)) { + // 空的 + return GatewayUtils.errorResponse(exchange, "token不能为空!"); + } + // 是否合法 + try { + JwtUtils.parseToken(token); + } catch (Exception e) { + return GatewayUtils.errorResponse(exchange, "token不合法!"); + } + // 是否有效 + String userKey = JwtUtils.getUserKey(token); + if (!redisTemplate.hasKey(TokenConstants.LOGIN_TOKEN_KEY + userKey)) { + return GatewayUtils.errorResponse(exchange, "token过期!"); + } else { + // 重新设置 redis中的用户有效时间 + redisTemplate.expire(TokenConstants.LOGIN_TOKEN_KEY + userKey, 30, TimeUnit.MINUTES); + } + // 放行 + return chain.filter(exchange); + } + + /** + * 规定过滤器执行的顺序 + * @return 方法的返回值越小 执行顺序越高 + */ + @Override + public int getOrder() { + return 0; + } + +} diff --git a/etl-gateway/src/main/java/com/etl/gateway/filters/JwtAuthCheckFilter.java b/etl-gateway/src/main/java/com/etl/gateway/filters/JwtAuthCheckFilter.java new file mode 100644 index 0000000..8304c6b --- /dev/null +++ b/etl-gateway/src/main/java/com/etl/gateway/filters/JwtAuthCheckFilter.java @@ -0,0 +1,134 @@ +package com.etl.gateway.filters; + +import com.alibaba.fastjson.JSON; +import com.etl.common.constants.TokenConstants; +import com.etl.common.result.CommonResult; +import com.etl.common.enums.ResponseCodeEnum; +import com.etl.jwt.config.AuthJwtProperties; +import com.etl.jwt.util.JwtTokenUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.Order; +import org.springframework.core.io.buffer.DataBuffer; +import org.springframework.http.HttpStatus; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; +import javax.annotation.Resource; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; + +@Slf4j +@Configuration +public class JwtAuthCheckFilter { + private static final String AUTH_TOKEN_URL = "/auth/login"; + private static final String REFRESH_TOKEN_URL = "/auth/token/refresh"; + public static final String USER_ID = "userId"; + public static final String USER_NAME = "username"; + public static final String FROM_SOURCE = "from-source"; + + @Resource + private AuthJwtProperties authJwtProperties; + @Resource + private JwtTokenUtil jwtTokenUtil; + + + @Bean + @Order(-101) + public GlobalFilter jwtAuthGlobalFilter() { + + return (exchange, chain) -> { + + ServerHttpRequest serverHttpRequest = exchange.getRequest(); + ServerHttpResponse serverHttpResponse = exchange.getResponse(); + ServerHttpRequest.Builder mutate = serverHttpRequest.mutate(); + String requestUrl = serverHttpRequest.getURI().getPath(); + + // 跳过对登录请求的 token 检查。因为登录请求是没有 token 的,是来申请 token 的。 + if(AUTH_TOKEN_URL.equals(requestUrl)) { + log.info("登录url,放行"); + return chain.filter(exchange); + } + + // 从 HTTP 请求头中获取 JWT 令牌 + String token = getToken(serverHttpRequest); + if (StringUtils.isEmpty(token)) { + return unauthorizedResponse(exchange, serverHttpResponse, ResponseCodeEnum.TOKEN_MISSION); + } + + // 对Token解签名,并验证Token是否过期 + boolean isJwtNotValid = jwtTokenUtil.isTokenExpired(token); + if(isJwtNotValid){ + return unauthorizedResponse(exchange, serverHttpResponse, ResponseCodeEnum.TOKEN_INVALID); + } + // 验证 token 里面的 userId 是否为空 + String userId = jwtTokenUtil.getUserIdFromToken(token); + String username = jwtTokenUtil.getUserNameFromToken(token); + if (StringUtils.isEmpty(userId)) { + return unauthorizedResponse(exchange, serverHttpResponse, ResponseCodeEnum.TOKEN_INVALID); + } + + // 设置用户信息到请求 + addHeader(mutate, USER_ID, userId); + addHeader(mutate, USER_NAME, username); + // 内部请求来源参数清除 + removeHeader(mutate, FROM_SOURCE); + return chain.filter(exchange.mutate().request(mutate.build()).build()); + }; + } + + //添加头部信息 + private void addHeader(ServerHttpRequest.Builder mutate, String name, Object value) { + if (value == null) { + return; + } + String valueStr = value.toString(); + String valueEncode = urlEncode(valueStr); + mutate.header(name, valueEncode); + } + //移除头部信息 + private void removeHeader(ServerHttpRequest.Builder mutate, String name) { + mutate.headers(httpHeaders -> httpHeaders.remove(name)).build(); + } + + //内容编码,配置为UTF-8 + static String urlEncode(String str) { + try { + return URLEncoder.encode(str, "UTF-8"); + } + catch (UnsupportedEncodingException e) + { + return StringUtils.EMPTY; + } + } + + //请求token + private String getToken(ServerHttpRequest request) { + String token = request.getHeaders().getFirst(authJwtProperties.getHeader()); + // 如果前端设置了令牌前缀,则裁剪掉前缀 + if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.PREFIX)) + { + token = token.replaceFirst(TokenConstants.PREFIX, StringUtils.EMPTY); + } + return token; + } + + //jwt鉴权失败处理类 + private Mono unauthorizedResponse(ServerWebExchange exchange, ServerHttpResponse serverHttpResponse, ResponseCodeEnum responseCodeEnum) { + log.warn("token异常处理,请求路径:{}", exchange.getRequest().getPath()); + serverHttpResponse.setStatusCode(HttpStatus.UNAUTHORIZED); + serverHttpResponse.getHeaders().add("Content-Type", "application/json;charset=UTF-8"); + CommonResult responseResult = new CommonResult<>(responseCodeEnum.getCode(),responseCodeEnum.getMessage()); + DataBuffer dataBuffer = serverHttpResponse.bufferFactory() + .wrap(JSON.toJSONStringWithDateFormat(responseResult, JSON.DEFFAULT_DATE_FORMAT) + .getBytes(StandardCharsets.UTF_8)); + return serverHttpResponse.writeWith(Flux.just(dataBuffer)); + } + +} diff --git a/etl-gateway/src/main/java/com/etl/gateway/filters/LogFilter.java b/etl-gateway/src/main/java/com/etl/gateway/filters/LogFilter.java index 6fd69cd..97e2c91 100644 --- a/etl-gateway/src/main/java/com/etl/gateway/filters/LogFilter.java +++ b/etl-gateway/src/main/java/com/etl/gateway/filters/LogFilter.java @@ -3,6 +3,7 @@ package com.etl.gateway.filters; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.core.Ordered; +import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; @@ -12,14 +13,15 @@ import reactor.core.publisher.Mono; * @Author: dongyan Ma * @Date: 2024/2/28 */ +@Component public class LogFilter implements GlobalFilter, Ordered { @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { - return null; + return chain.filter(exchange); } @Override public int getOrder() { - return 1; + return 0; } } diff --git a/etl-gateway/src/main/resources/bootstrap.yml b/etl-gateway/src/main/resources/bootstrap.yml index 6aa11fb..d13bfdd 100644 --- a/etl-gateway/src/main/resources/bootstrap.yml +++ b/etl-gateway/src/main/resources/bootstrap.yml @@ -1,31 +1,33 @@ -# Tomcat server: port: 18080 -# Spring spring: application: - # 应用名称 - name: etl-gateway + name: engine-gateway profiles: - # 环境配置 active: dev - main: - # 允许使用循环引用 - allow-circular-references: true - # 允许定义相同的bean对象 去覆盖原有的 - allow-bean-definition-overriding: true cloud: nacos: + #注册服务 discovery: - # 服务注册地址 - server-addr: 182.254.221.163:8848 - namespace: 10a15e4b-3457-44dc-9378-cc25849f1872 + server-addr: 115.159.33.152:8848 + namespace: f9f293d4-55ce-45c1-aa15-124ca461c060 + # 配置 config: - # 配置中心地址 - server-addr: 182.254.221.163:8848 - namespace: 10a15e4b-3457-44dc-9378-cc25849f1872 + server-addr: 115.159.33.152:8848 + namespace: f9f293d4-55ce-45c1-aa15-124ca461c060 # 配置文件格式 file-extension: yml - # 共享配置 - shared-configs: - - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} +logging: + level: + com.bwie: DEBUG + +auth: + jwt: + enabled: true # 是否开启JWT登录认证功能 + secret: passjava # JWT 私钥,用于校验JWT令牌的合法性 + expiration: 3600000 # JWT 令牌的有效期,用于校验JWT令牌的合法性,一个小时 + header: Authorization # HTTP 请求的 Header 名称,该 Header作为参数传递 JWT 令牌 + userParamName: userId # 用户登录认证用户名参数名称 + pwdParamName: password # 用户登录认证密码参数名称 + useDefaultController: true # 是否使用默认的JwtAuthController + skipValidUrl: /auth/login diff --git a/etl-groovy/pom.xml b/etl-groovy/pom.xml new file mode 100644 index 0000000..df86b7c --- /dev/null +++ b/etl-groovy/pom.xml @@ -0,0 +1,63 @@ + + + 4.0.0 + + com.bwie + etl-cloud + 1.0-SNAPSHOT + + etl-groovy + etl-groovy + + 1.8 + UTF-8 + UTF-8 + + + + com.bwie + etl-common + 1.0-SNAPSHOT + + + com.baomidou + mybatis-plus-boot-starter + + + + + + org.springframework.boot + spring-boot-starter-data-jdbc + + + + + mysql + mysql-connector-java + + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + org.codehaus.groovy + groovy-all + 2.4.7 + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-test + test + + + + diff --git a/etl-groovy/src/main/java/com/etl/groovy/SpringBootGroovyApplication.java b/etl-groovy/src/main/java/com/etl/groovy/SpringBootGroovyApplication.java new file mode 100644 index 0000000..b1ce458 --- /dev/null +++ b/etl-groovy/src/main/java/com/etl/groovy/SpringBootGroovyApplication.java @@ -0,0 +1,20 @@ +package com.etl.groovy; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +import groovy.lang.GroovyShell; +import groovy.lang.Script; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + +@SpringBootApplication +public class SpringBootGroovyApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringBootGroovyApplication.class, args); + } + + +} diff --git a/etl-groovy/src/main/java/com/etl/groovy/controller/GrooyTestController.java b/etl-groovy/src/main/java/com/etl/groovy/controller/GrooyTestController.java new file mode 100644 index 0000000..3b9b3ca --- /dev/null +++ b/etl-groovy/src/main/java/com/etl/groovy/controller/GrooyTestController.java @@ -0,0 +1,43 @@ +package com.etl.groovy.controller; + +import groovy.lang.GroovyShell; +import groovy.lang.Script; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @ClassName GrooyTestController + * @Description 描述 + * @Author ZeZhang.Liu + * @Date 2024/6/26 16:58 + */ +@RestController +@RequestMapping("/groovy") +public class GrooyTestController { + @RequestMapping("/test") + public String test() { + //创建GroovyShell + GroovyShell groovyShell = new GroovyShell(); + //装载解析脚本代码 + Script script = groovyShell.parse("package groovy\n" + + "\n" + + "import com.etl.groovy.service.GroovyTestService\n" + + "import com.etl.groovy.util.SpringContextUtil\n" + + "\n" + + "/**\n" + + " * 静态变量\n" + + " */\n" + + "class Globals {\n" + + " static String PARAM1 = \"静态变量\"\n" + + " static int[] arrayList = [1, 2]\n" + + "}\n" + + "\n" + + "def getBean() {\n" + + " GroovyTestService groovyTestService = SpringContextUtil.getBean(GroovyTestService.class);\n" + + " groovyTestService.removeDashesFromAddress()\n" + + "}"); + //执行 + script.invokeMethod("getBean", null); + return "ok"; + } +} diff --git a/etl-groovy/src/main/java/com/etl/groovy/entity/Address.java b/etl-groovy/src/main/java/com/etl/groovy/entity/Address.java new file mode 100644 index 0000000..d8f2757 --- /dev/null +++ b/etl-groovy/src/main/java/com/etl/groovy/entity/Address.java @@ -0,0 +1,15 @@ +package com.etl.groovy.entity; + +import lombok.Data; + +/** + * @ClassName Address + * @Description 描述 + * @Author TingTing.Yao + * @Date 2024/06/26 14:08 + */ +@Data +public class Address { + private Integer id; + private String address; +} diff --git a/etl-groovy/src/main/java/com/etl/groovy/mapper/AddressMapper.java b/etl-groovy/src/main/java/com/etl/groovy/mapper/AddressMapper.java new file mode 100644 index 0000000..f5d8519 --- /dev/null +++ b/etl-groovy/src/main/java/com/etl/groovy/mapper/AddressMapper.java @@ -0,0 +1,12 @@ +package com.etl.groovy.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.etl.groovy.entity.Address; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Update; + +@Mapper +public interface AddressMapper extends BaseMapper
{ + @Update("UPDATE address SET address = REPLACE(address, '-', '') WHERE address LIKE '%-%'") + void removeDashesFromAddress(); +} diff --git a/etl-groovy/src/main/java/com/etl/groovy/service/GroovyTestService.java b/etl-groovy/src/main/java/com/etl/groovy/service/GroovyTestService.java new file mode 100644 index 0000000..d33c5ec --- /dev/null +++ b/etl-groovy/src/main/java/com/etl/groovy/service/GroovyTestService.java @@ -0,0 +1,18 @@ +package com.etl.groovy.service; + +import com.etl.groovy.mapper.AddressMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class GroovyTestService { + + @Autowired + private AddressMapper addressMapper; + + public void removeDashesFromAddress() { + addressMapper.removeDashesFromAddress(); + } + +} + diff --git a/etl-groovy/src/main/java/com/etl/groovy/util/SpringContextUtil.java b/etl-groovy/src/main/java/com/etl/groovy/util/SpringContextUtil.java new file mode 100644 index 0000000..78cc933 --- /dev/null +++ b/etl-groovy/src/main/java/com/etl/groovy/util/SpringContextUtil.java @@ -0,0 +1,57 @@ +package com.etl.groovy.util; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +/** + * Spring上下文获取 + */ +@Component +public class SpringContextUtil implements ApplicationContextAware { + + private static ApplicationContext applicationContext; + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + + /** + * 通过name获取 Bean. + * + * @param name + * @return + */ + public static Object getBean(String name) { + return getApplicationContext().getBean(name); + } + + /** + * 通过class获取Bean. + * + * @param clazz + * @param + * @return + */ + public static T getBean(Class clazz) { + return getApplicationContext().getBean(clazz); + } + + /** + * 通过name,以及Clazz返回指定的Bean + * + * @param name + * @param clazz + * @param + * @return + */ + public static T getBean(String name, Class clazz) { + return getApplicationContext().getBean(name, clazz); + } +} diff --git a/etl-groovy/src/main/resources/bootstrap.yml b/etl-groovy/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..96fc4be --- /dev/null +++ b/etl-groovy/src/main/resources/bootstrap.yml @@ -0,0 +1,23 @@ +# Tomcat +server: + port: 9010 +# Spring +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://43.142.12.243:3306/lian + username: root + password: ytt@123 + main: + allow-circular-references: true + application: + # 应用名称 + name: etl-groovy + profiles: + # 环境配置 + active: dev +mybatis-plus: + configuration: + map-underscore-to-camel-case: true + type-aliases-package: com.etl.groovy.entity + mapper-locations: classpath:mappers/*xml diff --git a/etl-groovy/src/test/java/com/etl/groovy/EtlGroovyApplicationTests.java b/etl-groovy/src/test/java/com/etl/groovy/EtlGroovyApplicationTests.java new file mode 100644 index 0000000..5007638 --- /dev/null +++ b/etl-groovy/src/test/java/com/etl/groovy/EtlGroovyApplicationTests.java @@ -0,0 +1,13 @@ +package com.etl.groovy; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class EtlGroovyApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/etl-groovy/target/classes/bootstrap.yml b/etl-groovy/target/classes/bootstrap.yml new file mode 100644 index 0000000..96fc4be --- /dev/null +++ b/etl-groovy/target/classes/bootstrap.yml @@ -0,0 +1,23 @@ +# Tomcat +server: + port: 9010 +# Spring +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://43.142.12.243:3306/lian + username: root + password: ytt@123 + main: + allow-circular-references: true + application: + # 应用名称 + name: etl-groovy + profiles: + # 环境配置 + active: dev +mybatis-plus: + configuration: + map-underscore-to-camel-case: true + type-aliases-package: com.etl.groovy.entity + mapper-locations: classpath:mappers/*xml diff --git a/etl-groovy/target/classes/com/etl/groovy/SpringBootGroovyApplication.class b/etl-groovy/target/classes/com/etl/groovy/SpringBootGroovyApplication.class new file mode 100644 index 0000000000000000000000000000000000000000..5ff0ac88694d841f62ba188a8bb705d6df9e9b15 GIT binary patch literal 1632 zcmb7E+iufJ6kXF>f(b1ID3q%?+>%gi?zaF^=@I881𝔎%VYc)1i*XjK=|l_$PP) z1QH*>MjwO3Md-h&??c03)_UQ|NOSs`+J5E(_+Cc-&3R(`PaH@(kc3rIE ztOE~z73V5A&oFaSM$+77m~1px8K#z1UogydWF+pT!=BI&c`qbMy`usiu5vByz7S5C zb(t_Mb^|kj9ebFnpP{T!BV%YbaiZHe#=D`LZ2shVo965}Y zHZFPbsI|OY>?J~vWFWk}nhzWV8U<_O-nmjA*@*Po#a10Z4KiX#!%yu$;XKClt%4nT#eE@q$KNFav?@T6~#ZLOK zh)fTg3vgJWhWnGITdbC>U1B=K>Cp qmpKagAP$lBVX~Vg$q{;wJ_SqQlJr=H{7-f|PZ-B(zo~HoCxP$Mipg{U literal 0 HcmV?d00001 diff --git a/etl-groovy/target/classes/com/etl/groovy/entity/Address.class b/etl-groovy/target/classes/com/etl/groovy/entity/Address.class new file mode 100644 index 0000000000000000000000000000000000000000..6d3c08614210901bb11d21fbb95c3dadd8d1ef7f GIT binary patch literal 1923 zcma)7U2hvj6g^|_+G}T%x^A7skkSSM_#>_h1WN5B(2ulrvD4C^O7O(SUfEk*J2>k~ z{VV(c@{$LTz?DEk@KPjx13!aDN;!9T{S^#Cwr1|!Idkv1=g!!_{q@6705RdvosQ#fD}*!I2MXHtZo^hMRdqV{ zZvWA~-TTDaZ_|^kcI#IAfz@+l9XK_&PDFuG_ME6jX{{6TuD7jG9yyn_verSS#x(_ZU4?S_al z7bMI$jV%+qxGTdwvRc0oklkV}Sra9!DkR2ne0f=;b#P#JC~9F=<0d*jm6%s+3P0@Q zzv8jVhn3_b4DmxnJd2`mj)4VYnPZx(B4@=}&pn0u)`PvoG2%Jr@G@=F2Ve!~xKg4R z$LYi0A@t3O!}Bu_Q{)+k!zT|f%sl)mUJDMFyu!#cm;WB2*}NBtkxG2tVu=t^?iya7 z6({_EE^9OT9nXQ%2eGOeZ&i?}KE9l|l{Lj#8>$w4RZ%HGvyUwAc6@JBB zT6>1mM=%R%ZGh+yVU%=2j8Y`63nuam$s^3C^>kzi(vF!cjFX+Z?QiyD7oA&N`Su^7c${2J;xmVGnE zUr~8NfdW@Ji{84FF7!hGpyxM4AJNlELg*=ZbwQZlc~0l)Qlh-6ZFzF7B+4y{WhC-P zh!zHjeJ*~Zq{&8F3w8{VkXtLWrP=VK2D!tyjCb)KbLyNg(+crF<`Ui~pD-`k60XqF zJQ?mldqIar8I)q_Q0fIi<8??JDd=Ri4YNImXI^bBIe9F^=u3)%C-PHiCh-*Hi5#D`3Wb`pA5R4 zv8l7o41HvdzwB#$Xb!B-o!Q8;=ep4{@G+YD^SwFTR#^{^rf$?*b%Q`@u6DD4|uraTgfba>D6ab_*cY|1az1pdCu28^vv*Yv(k%lQ20Nuc_BEdogY wUwah^5XhnA@dJ<@0y|JZuZUg+wT80$0z^Rx5oL_#U=Q|FeUPGxh^PR30-{)|`~Uy| literal 0 HcmV?d00001 diff --git a/etl-groovy/target/classes/com/etl/groovy/service/GroovyTestService.class b/etl-groovy/target/classes/com/etl/groovy/service/GroovyTestService.class new file mode 100644 index 0000000000000000000000000000000000000000..0706d41145037e896c2b698c2ee77a67f7c216d3 GIT binary patch literal 697 zcmZ`%T~AX%5IuA0hrPWBqJpR|#+YCq+!r56AS8_jU#ccT`o6s#%3|+sv%4+n&oVJF z@Zb;NM-k?h3Z&r6oXpOgIdgXR;`012fRA{cqKfAYRIuK}242*$S;tGlvhMdihwxR8 zM(hdiI=L$p$DtZ{=O$BC%nGV~w{3^8`D1LODY$Eb=?%GUt&2JuX9HooLeqwS~UuKRDImCnO6A|3-T(}8;*5R1LzIVmk zC?P#?W1sWBDfQOxaX*~si6(44=ru(4?BaC9>Yr4G6wM4Z)a!Va;R%{TUbyT3E=pJ} z<Y>rUXf_+WG_fH7hSm zESn*;#}c#a2CQIJGAeCIEXmt~WnbF*jpPhVgxd+J2toJ_;oVM2=Tj1_Nj1UKo7J8H ER|)*A#sB~S literal 0 HcmV?d00001 diff --git a/etl-groovy/target/classes/com/etl/groovy/util/SpringContextUtil.class b/etl-groovy/target/classes/com/etl/groovy/util/SpringContextUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..e3f943340da2f9b3cf0bd536b9300f86b768884b GIT binary patch literal 1633 zcmb7E*>2NN5Ir|b(>j5+0RjcOL6S^a4(DdSdxP(hvf`bGFZ)E zO(3szyOybIzUkOC$M%gwUtqcJxNX(zx~AQJ<7yq_z;WNHdiYu0?(?V$3~idW>2C=n zi=|zGRLyy92#nTE+j!RNv<$bYwJcilbw}5%UClM+J~F2Kx27ksSl6A7YWSAgb{%K` zNbUKir8WW?k+xT~FxoZG@cU&5tQ9Y+T#8km9_mI{X28o}o$T$w?5oAnMd<}HBzt0L zw!lKMzNhVLs-@X&wc*R;R!cF{^VXiB`#fFBX3Ax%`rrcdagv&)dEQ`-v~Fp~#{%Oq zk`OLXI9r3G?you&{seC}o7F8U8flnqTl0G^Wvy&BAH{Hy>a9Lqp>K%{0vqwK(a~cZ ze>q3(-_g$Di^o?QPS4ei9aFYop|7KsWTFKoUiNI?>=?VIXRaA4wrIJkj>#bZe;KvhY8%2!=xPMSjGQpbb+zc4hZwi7Qfil z+&<7`(Tan-T5L;CmCfn>z5xPDgP`Z%ea!L)GYs|!Uqzmpf1n|*nFNlPxl=g{>@J zh!0#OFdBhC*cjKj5P)&yxf8g8t3*lX$J`}2rz@Y3ICWM6V;(6&B|#wsMFfNgN_dy~ zEk%j~^|2USNz&V#<&*k|#Cy*CQ*o54CDVv3SA<+Aue2&(kSw1dm4L*@4=@uufP!1( zM!+yhl#I1=mLVN7Bx4aPXBeh1O|KcgVNw)KF~`6iz6sn7xaT777f5miWTm>w35Jq^ pyg2zrEIrvs9vw(J&4bO*ISeB$v$TX^=1IE{1YAUsvrJ71_z6WhiC_Q# literal 0 HcmV?d00001 diff --git a/etl-jwt-manage/pom.xml b/etl-jwt-manage/pom.xml new file mode 100644 index 0000000..393087f --- /dev/null +++ b/etl-jwt-manage/pom.xml @@ -0,0 +1,136 @@ + + + 4.0.0 + + com.bwie + etl-cloud + 1.0-SNAPSHOT + + etl-jwt-manage + + 1.8 + UTF-8 + UTF-8 + 2.6.13 + 2021.0.5 + + + + javax.servlet + servlet-api + 2.5 + compile + + + + org.springframework.boot + spring-boot-starter-data-redis + + + com.alibaba + druid-spring-boot-starter + 1.2.6 + + + org.projectlombok + lombok + true + + + + io.jsonwebtoken + jjwt + 0.9.1 + compile + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + com.mysql + mysql-connector-j + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.cloud + spring-cloud-starter + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + UTF-8 + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot.version} + + com.etl.jwt.EtlJwtManageApplication + true + + + + repackage + + repackage + + + + + + + + diff --git a/etl-jwt-manage/src/main/java/com/etl/jwt/config/AuthJwtProperties.java b/etl-jwt-manage/src/main/java/com/etl/jwt/config/AuthJwtProperties.java new file mode 100644 index 0000000..74c3b57 --- /dev/null +++ b/etl-jwt-manage/src/main/java/com/etl/jwt/config/AuthJwtProperties.java @@ -0,0 +1,41 @@ +package com.etl.jwt.config; + +import com.etl.jwt.util.JwtTokenUtil; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; + +@Data +@ConfigurationProperties(prefix = "auth.jwt") +@Component +public class AuthJwtProperties { + + + //是否开启JWT,即注入相关的类对象 + private Boolean enabled = true; + + //JWT 密钥 + private String secret; + + //accessToken 有效时间 + private Long expiration; + + //header名称 + private String header; + + /** + * 用户登录-用户名参数名称 + */ + private String userParamName = "userId"; + /** + * 用户登录-密码参数名称 + */ + private String pwdParamName = "password"; + + //是否使用默认的JWTAuthController + private Boolean useDefaultController = false; + //跳过认证的路由 + private String skipValidUrl; + +} diff --git a/etl-jwt-manage/src/main/java/com/etl/jwt/util/JwtTokenUtil.java b/etl-jwt-manage/src/main/java/com/etl/jwt/util/JwtTokenUtil.java new file mode 100644 index 0000000..fe0385f --- /dev/null +++ b/etl-jwt-manage/src/main/java/com/etl/jwt/util/JwtTokenUtil.java @@ -0,0 +1,269 @@ +package com.etl.jwt.util; + + +import com.etl.jwt.config.AuthJwtProperties; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import org.springframework.context.annotation.Bean; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + + +@Component +public class JwtTokenUtil { + + private static final String JWT_CACHE_KEY = "jwt:userId:"; + private static final String USER_ID = "userId"; + private static final String USER_NAME = "username"; + private static final String ACCESS_TOKEN = "access_token"; + private static final String REFRESH_TOKEN = "refresh_token"; + private static final String EXPIRE_IN = "expire_in"; + + @Resource + private StringRedisTemplate stringRedisTemplate; + + @Resource + private AuthJwtProperties jwtProperties; + + + /** + * 生成 token 令牌主方法 + * @param userId 用户Id或用户名 + * @return 令token牌 + */ + public Map generateTokenAndRefreshToken(String userId, String username) { + //生成令牌及刷新令牌 + Map tokenMap = buildToken(userId, username); + //redis缓存结果 + cacheToken(userId, tokenMap); + return tokenMap; + } + + //将token缓存进redis + //方法将生产的token缓存进redis中,进行保存。 + private void cacheToken(String userId, Map tokenMap) { + stringRedisTemplate.opsForHash().put(JWT_CACHE_KEY + userId, ACCESS_TOKEN, tokenMap.get(ACCESS_TOKEN)); + stringRedisTemplate.opsForHash().put(JWT_CACHE_KEY + userId, REFRESH_TOKEN, tokenMap.get(REFRESH_TOKEN)); + stringRedisTemplate.expire(userId, jwtProperties.getExpiration() * 2, TimeUnit.MILLISECONDS); + } + //生成令牌 + private Map buildToken(String userId, String username) { + //生成token令牌 + String accessToken = generateToken(userId, username, null); + //生成刷新令牌 + String refreshToken = generateRefreshToken(userId, username, null); + //存储两个令牌及过期时间,返回结果 + HashMap tokenMap = new HashMap<>(2); + tokenMap.put(ACCESS_TOKEN, accessToken); + tokenMap.put(REFRESH_TOKEN, refreshToken); + tokenMap.put(EXPIRE_IN, jwtProperties.getExpiration()); + return tokenMap; + } + /** + * 生成 token 令牌 及 refresh token 令牌 + * @param payloads 令牌中携带的附加信息 + * @return 令牌 + */ + public String generateToken(String userId, String username, + Map payloads) { + Map claims = buildClaims(userId, username, payloads);; + + return generateToken(claims); + } + public String generateRefreshToken(String userId, String username, Map payloads) { + Map claims = buildClaims(userId, username, payloads); + + return generateRefreshToken(claims); + } + //构建map存储令牌需携带的信息 + //此方法中存放业务所需存放的信息,比如用户名,id等,生成的jwt解码后,payload中可查得以上信息 + private Map buildClaims(String userId, String username, Map payloads) { + int payloadSizes = payloads == null? 0 : payloads.size(); + + Map claims = new HashMap<>(payloadSizes + 2); + claims.put("sub", userId); + claims.put("username", username); + claims.put("created", new Date()); + //claims.put("roles", "admin"); + + if(payloadSizes > 0){ + claims.putAll(payloads); + } + + return claims; + } + + + /** + * 刷新令牌并生成新令牌 + * 并将新结果缓存进redis + */ + public Map refreshTokenAndGenerateToken(String userId, String username) { + Map tokenMap = buildToken(userId, username); + stringRedisTemplate.delete(JWT_CACHE_KEY + userId); + cacheToken(userId, tokenMap); + return tokenMap; + } + + /** + * 从request获取userid + * @param request http请求 + * @return request.getHeader + */ + public String getUserIdFromRequest(HttpServletRequest request) { + return request.getHeader(USER_ID); + } + + //缓存中删除token + public boolean removeToken(String userId) { + return Boolean.TRUE.equals(stringRedisTemplate.delete(JWT_CACHE_KEY + userId)); + } + + + /** + * 从令牌中获取用户id + * + * @param token 令牌 + * @return 用户id + */ + public String getUserIdFromToken(String token) { + String userId; + try { + Claims claims = getClaimsFromToken(token); + userId = claims.getSubject(); + } catch (Exception e) { + userId = null; + } + return userId; + } + /** + * 从令牌中获取用户名 + * + * @param token 令牌 + * @return 用户名 + */ + public String getUserNameFromToken(String token) { + String username; + try { + Claims claims = getClaimsFromToken(token); + username = (String) claims.get(USER_NAME); + } catch (Exception e) { + username = null; + } + return username; + } + + + /** + * 判断令牌是否不存在 redis 中 + * + * @param token 刷新令牌 + * @return true=不存在,false=存在 + */ + public Boolean isRefreshTokenNotExistCache(String token) { + String userId = getUserIdFromToken(token); + String refreshToken = (String)stringRedisTemplate.opsForHash().get(JWT_CACHE_KEY + userId, REFRESH_TOKEN); + return refreshToken == null || !refreshToken.equals(token); + } + + /** + * 判断令牌是否过期 + * + * @param token 令牌 + * @return true=已过期,false=未过期 + */ + public Boolean isTokenExpired(String token) { + try { + Claims claims = getClaimsFromToken(token); + Date expiration = claims.getExpiration(); + return expiration.before(new Date()); + } catch (Exception e) { + //验证 JWT 签名失败等同于令牌过期 + return true; + } + } + + /** + * 刷新令牌 + * + * @param token 原令牌 + * @return 新令牌 + */ + public String refreshToken(String token) { + String refreshedToken; + try { + Claims claims = getClaimsFromToken(token); + claims.put("created", new Date()); + refreshedToken = generateToken(claims); + } catch (Exception e) { + refreshedToken = null; + } + return refreshedToken; + } + + /** + * 验证令牌 + * + * @param token 令牌 + * @param userId 用户Id用户名 + * @return 是否有效 + */ + public Boolean validateToken(String token, String userId) { + + String username = getUserIdFromToken(token); + return (username.equals(userId) && !isTokenExpired(token)); + } + + + /** + * 生成令牌 + * @param claims 数据声明 + * @return 令牌 + */ + private String generateToken(Map claims) { + Date expirationDate = new Date(System.currentTimeMillis() + + jwtProperties.getExpiration()); + return Jwts.builder().setClaims(claims) + .setExpiration(expirationDate) + .signWith(SignatureAlgorithm.HS512, + jwtProperties.getSecret()) + .compact(); + } + /** + * 生成刷新令牌 refreshToken,有效期是令牌的 2 倍 + * @param claims 数据声明 + * @return 令牌 + */ + private String generateRefreshToken(Map claims) { + Date expirationDate = new Date(System.currentTimeMillis() + jwtProperties.getExpiration() * 2); + return Jwts.builder().setClaims(claims) + .setExpiration(expirationDate) + .signWith(SignatureAlgorithm.HS512, jwtProperties.getSecret()) + .compact(); + } + + /** + * 从令牌中获取数据声明,验证 JWT 签名 + * + * @param token 令牌 + * @return 数据声明 + */ + private Claims getClaimsFromToken(String token) { + Claims claims; + try { + claims = Jwts.parser().setSigningKey(jwtProperties.getSecret()).parseClaimsJws(token).getBody(); + } catch (Exception e) { + claims = null; + } + return claims; + } +} + diff --git a/etl-jwt-manage/target/classes/META-INF/spring-configuration-metadata.json b/etl-jwt-manage/target/classes/META-INF/spring-configuration-metadata.json new file mode 100644 index 0000000..52c9406 --- /dev/null +++ b/etl-jwt-manage/target/classes/META-INF/spring-configuration-metadata.json @@ -0,0 +1,54 @@ +{ + "groups": [ + { + "name": "auth.jwt", + "type": "com.etl.jwt.config.AuthJwtProperties", + "sourceType": "com.etl.jwt.config.AuthJwtProperties" + } + ], + "properties": [ + { + "name": "auth.jwt.enabled", + "type": "java.lang.Boolean", + "sourceType": "com.etl.jwt.config.AuthJwtProperties" + }, + { + "name": "auth.jwt.expiration", + "type": "java.lang.Long", + "sourceType": "com.etl.jwt.config.AuthJwtProperties" + }, + { + "name": "auth.jwt.header", + "type": "java.lang.String", + "sourceType": "com.etl.jwt.config.AuthJwtProperties" + }, + { + "name": "auth.jwt.pwd-param-name", + "type": "java.lang.String", + "description": "用户登录-密码参数名称", + "sourceType": "com.etl.jwt.config.AuthJwtProperties" + }, + { + "name": "auth.jwt.secret", + "type": "java.lang.String", + "sourceType": "com.etl.jwt.config.AuthJwtProperties" + }, + { + "name": "auth.jwt.skip-valid-url", + "type": "java.lang.String", + "sourceType": "com.etl.jwt.config.AuthJwtProperties" + }, + { + "name": "auth.jwt.use-default-controller", + "type": "java.lang.Boolean", + "sourceType": "com.etl.jwt.config.AuthJwtProperties" + }, + { + "name": "auth.jwt.user-param-name", + "type": "java.lang.String", + "description": "用户登录-用户名参数名称", + "sourceType": "com.etl.jwt.config.AuthJwtProperties" + } + ], + "hints": [] +} \ No newline at end of file diff --git a/etl-jwt-manage/target/classes/com/etl/jwt/config/AuthJwtProperties.class b/etl-jwt-manage/target/classes/com/etl/jwt/config/AuthJwtProperties.class new file mode 100644 index 0000000000000000000000000000000000000000..86beca161f6a783d32a8572ca272e38f61835a19 GIT binary patch literal 5180 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 m;*lkP-Q?rm8#pZDth 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 literal 0 HcmV?d00001 diff --git a/etl-jwt-manage/target/maven-archiver/pom.properties b/etl-jwt-manage/target/maven-archiver/pom.properties new file mode 100644 index 0000000..918f375 --- /dev/null +++ b/etl-jwt-manage/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Tue Jun 25 09:14:52 CST 2024 +version=1.0-SNAPSHOT +groupId=com.bwie +artifactId=etl-jwt-manage diff --git a/etl-jwt-manage/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/etl-jwt-manage/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..680670f --- /dev/null +++ b/etl-jwt-manage/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,3 @@ +com\etl\jwt\config\AuthJwtProperties.class +com\etl\jwt\util\JwtTokenUtil.class +META-INF\spring-configuration-metadata.json diff --git a/etl-jwt-manage/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/etl-jwt-manage/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..8dcd269 --- /dev/null +++ b/etl-jwt-manage/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,2 @@ +D:\workspace\ETL\etl-jwt-manage\src\main\java\com\etl\jwt\config\AuthJwtProperties.java +D:\workspace\ETL\etl-jwt-manage\src\main\java\com\etl\jwt\util\JwtTokenUtil.java diff --git a/etl-jwt-manage/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/etl-jwt-manage/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/etl-jwt-manage/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/etl-jwt-manage/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/pom.xml b/pom.xml index 7933abc..c6d7086 100644 --- a/pom.xml +++ b/pom.xml @@ -13,6 +13,9 @@ etl-gateway etl-data-source etl-heihei + etl-groovy + etl-auth + etl-jwt-manage @@ -27,6 +30,7 @@ + com.baomidou mybatis-plus-boot-starter @@ -35,6 +39,7 @@ org.springframework.boot spring-boot-starter-data-jdbc + ${spring-boot.version}