diff --git a/pom.xml b/pom.xml index 6818615a9e6f01db64a1a460ede790b80663270a..c768b8c958b6f5352f45da30d07274faf4db8ad8 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.zlt central-platform - 5.5.0 + 5.6.0 pom @@ -62,6 +62,7 @@ hub.zlt.com:8080/microservices-platform -Djava.security.egd=file:/dev/./urandom -Xms128m -Xmx128m + 20.0 @@ -430,6 +431,11 @@ pom import + + com.google.guava + guava + ${guava.version} + @@ -483,7 +489,7 @@ zlt-business - + zlt-web zlt-job diff --git a/zlt-business/code-generator/pom.xml b/zlt-business/code-generator/pom.xml index db4b3aea8c4515cef1f221e1bd77e7dc73ec99af..a589e49f366a1e41159cbaa5148e64d3a1df6006 100644 --- a/zlt-business/code-generator/pom.xml +++ b/zlt-business/code-generator/pom.xml @@ -4,7 +4,7 @@ com.zlt zlt-business - 5.5.0 + 5.6.0 code-generator diff --git a/zlt-business/file-center/pom.xml b/zlt-business/file-center/pom.xml index 57771598880c15370b719d70496afac771ebc950..76854291bb863e96f11b807b64719660d1403e3f 100644 --- a/zlt-business/file-center/pom.xml +++ b/zlt-business/file-center/pom.xml @@ -4,7 +4,7 @@ com.zlt zlt-business - 5.5.0 + 5.6.0 file-center 文件中心 diff --git a/zlt-business/pom.xml b/zlt-business/pom.xml index 59bbbdc9ae905916f43fd4e9fc6ef8f6e9f6d780..3b677e2097ba4ed9c2c79e5ac33ee30a97101df9 100644 --- a/zlt-business/pom.xml +++ b/zlt-business/pom.xml @@ -4,7 +4,7 @@ com.zlt central-platform - 5.5.0 + 5.6.0 zlt-business 业务中心 diff --git a/zlt-business/search-center/pom.xml b/zlt-business/search-center/pom.xml index f96f54740b1cf3f467400fad37665a4bdb2040f3..e733071d688a0f4e52387cedf1a6194b4dbddfd4 100644 --- a/zlt-business/search-center/pom.xml +++ b/zlt-business/search-center/pom.xml @@ -4,7 +4,7 @@ com.zlt zlt-business - 5.5.0 + 5.6.0 search-center 搜索中心 diff --git a/zlt-business/search-center/search-client/pom.xml b/zlt-business/search-center/search-client/pom.xml index 87e208c42f3c0ff9e9cd0f3ff577827405b4d100..4d9942bf8103af2c1dbcbd7b81b350d1d32f082d 100644 --- a/zlt-business/search-center/search-client/pom.xml +++ b/zlt-business/search-center/search-client/pom.xml @@ -4,7 +4,7 @@ com.zlt search-center - 5.5.0 + 5.6.0 search-client 搜索中心客户端 diff --git a/zlt-business/search-center/search-server/pom.xml b/zlt-business/search-center/search-server/pom.xml index ff3488c384f1af5c03df01c5f01c7159aef6e105..79fd5d7cafad3491071c206b2a99b7d3bb0afd75 100644 --- a/zlt-business/search-center/search-server/pom.xml +++ b/zlt-business/search-center/search-server/pom.xml @@ -4,7 +4,7 @@ com.zlt search-center - 5.5.0 + 5.6.0 search-server 搜索中心服务端 diff --git a/zlt-business/user-center/pom.xml b/zlt-business/user-center/pom.xml index 978b57065a6cc145507c1ffaa737fab29511d0e8..b9ea20d4ab637e0553dcb6ab683631935e9f26e4 100644 --- a/zlt-business/user-center/pom.xml +++ b/zlt-business/user-center/pom.xml @@ -4,7 +4,7 @@ com.zlt zlt-business - 5.5.0 + 5.6.0 user-center 用户中心 diff --git a/zlt-business/user-center/src/main/java/com/central/user/controller/SysMenuController.java b/zlt-business/user-center/src/main/java/com/central/user/controller/SysMenuController.java index 064f601923036309a2c91c9112bde6c9cc6b73a0..eaf16e991c492d79381bd1b9f6b98e58cae2dfcf 100644 --- a/zlt-business/user-center/src/main/java/com/central/user/controller/SysMenuController.java +++ b/zlt-business/user-center/src/main/java/com/central/user/controller/SysMenuController.java @@ -8,6 +8,7 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import com.central.common.annotation.LoginUser; import com.central.common.constant.CommonConstant; +import com.central.common.context.LoginUserContextHolder; import com.central.common.model.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -147,6 +148,9 @@ public class SysMenuController { @PostMapping("saveOrUpdate") public Result saveOrUpdate(@RequestBody SysMenu menu) { try { + if (menu.getId() == null) { + menu.setCreatorId(LoginUserContextHolder.getUser().getId()); + } menuService.saveOrUpdate(menu); return Result.succeed("操作成功"); } catch (Exception ex) { diff --git a/zlt-business/user-center/src/main/java/com/central/user/controller/SysUserController.java b/zlt-business/user-center/src/main/java/com/central/user/controller/SysUserController.java index 01d84597168a659866c4e1178c7c976371952e38..0a621f5c43ec20e0253d6bf32df2cb156a1fe955 100644 --- a/zlt-business/user-center/src/main/java/com/central/user/controller/SysUserController.java +++ b/zlt-business/user-center/src/main/java/com/central/user/controller/SysUserController.java @@ -7,6 +7,7 @@ import java.util.Map; import java.util.Set; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; import com.central.common.annotation.LoginUser; import com.central.common.constant.CommonConstant; import com.central.common.model.*; @@ -286,6 +287,23 @@ public class SysUserController { return queryService.strQuery("sys_user", searchDto, SEARCH_LOGIC_DEL_DTO); } + /** + * 获取用户并返回角色列表 + * @param username + * @return + */ + @GetMapping(value = "/users/roleUser/{username}") + @ApiOperation(value = "查询用户-带角色信息") + @Cacheable(value = "userRoles", key = "#username") + public SysUser selectRoleUser(@PathVariable("username") String username){ + SysUser sysUser = selectByUsername(username); + if(ObjectUtil.isNotNull(sysUser)){ + List roleList = findRolesByUserId(sysUser.getId()); + sysUser.setRoles(roleList); + } + return sysUser; + } + /** * 是否超级管理员 */ diff --git a/zlt-business/user-center/src/main/java/com/central/user/service/impl/SysRoleServiceImpl.java b/zlt-business/user-center/src/main/java/com/central/user/service/impl/SysRoleServiceImpl.java index 8550e08d5eb774a3ba481b758e4bd14d725059ad..45644d544b6c4f91da5cbebf742544b163e24092 100644 --- a/zlt-business/user-center/src/main/java/com/central/user/service/impl/SysRoleServiceImpl.java +++ b/zlt-business/user-center/src/main/java/com/central/user/service/impl/SysRoleServiceImpl.java @@ -6,6 +6,7 @@ import java.util.Map; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.central.common.constant.CommonConstant; +import com.central.common.context.LoginUserContextHolder; import com.central.common.lock.DistributedLock; import com.central.common.model.*; import com.central.common.service.impl.SuperServiceImpl; @@ -69,6 +70,7 @@ public class SysRoleServiceImpl extends SuperServiceImpl @Transactional public Result saveOrUpdateRole(SysRole sysRole) throws Exception { if (sysRole.getId() == null) { + sysRole.setCreatorId(LoginUserContextHolder.getUser().getId()); this.saveRole(sysRole); } else { baseMapper.updateById(sysRole); diff --git a/zlt-business/user-center/src/main/java/com/central/user/service/impl/SysUserServiceImpl.java b/zlt-business/user-center/src/main/java/com/central/user/service/impl/SysUserServiceImpl.java index eedada4c6d5f039ffc10586f8e1d906900356424..7d98f15b45eecee03979026231cf7f25be890cf7 100644 --- a/zlt-business/user-center/src/main/java/com/central/user/service/impl/SysUserServiceImpl.java +++ b/zlt-business/user-center/src/main/java/com/central/user/service/impl/SysUserServiceImpl.java @@ -7,6 +7,7 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.central.common.constant.CommonConstant; +import com.central.common.context.LoginUserContextHolder; import com.central.common.lock.DistributedLock; import com.central.common.model.*; import com.central.common.service.impl.SuperServiceImpl; @@ -226,6 +227,7 @@ public class SysUserServiceImpl extends SuperServiceImpl } sysUser.setPassword(passwordEncoder.encode(CommonConstant.DEF_USER_PASSWORD)); sysUser.setEnabled(Boolean.TRUE); + sysUser.setCreatorId(LoginUserContextHolder.getUser().getId()); } String username = sysUser.getUsername(); boolean result = super.saveOrUpdateIdempotency(sysUser, lock diff --git a/zlt-business/user-center/src/main/resources/application.yml b/zlt-business/user-center/src/main/resources/application.yml index f9a8c71b3558af208267e981da6072acfdc6c0fe..b5a9296a8f3b07d7a0d3ba4e9a9647647679c2cb 100644 --- a/zlt-business/user-center/src/main/resources/application.yml +++ b/zlt-business/user-center/src/main/resources/application.yml @@ -38,6 +38,19 @@ zlt: - com.central.user.mapper.SysRoleMapper.findAll # 用户列表显示用户所关联的所有角色 - com.central.user.mapper.SysUserRoleMapper.findRolesByUserIds + # 数据权限 + datascope: + enabled: false + ignoreTables: + - sys_role_user + - sys_role_menu + includeSqls: + # 用户列表 + - com.central.user.mapper.SysUserMapper.findList + # 角色列表 + - com.central.user.mapper.SysRoleMapper.findList + # 菜单列表 + - com.central.user.mapper.SysMenuMapper.selectList #审计日志 # audit-log: # enabled: true diff --git a/zlt-business/user-center/src/main/resources/mapper/SysRoleMapper.xml b/zlt-business/user-center/src/main/resources/mapper/SysRoleMapper.xml index 409a1b38b51fd66eedf0e0ec92a1066cb536eed2..4b06375569105d629a6fb589a5af2dcd9dc6a930 100644 --- a/zlt-business/user-center/src/main/resources/mapper/SysRoleMapper.xml +++ b/zlt-business/user-center/src/main/resources/mapper/SysRoleMapper.xml @@ -8,7 +8,8 @@ name, create_time, update_time, - tenant_id + tenant_id, + data_scope diff --git a/zlt-commons/pom.xml b/zlt-commons/pom.xml index cfda91670cca83d75069c7196c86cc9ff1fbd108..2df13283486e770fcaf85f766063ca5c20d4ed27 100644 --- a/zlt-commons/pom.xml +++ b/zlt-commons/pom.xml @@ -4,7 +4,7 @@ com.zlt central-platform - 5.5.0 + 5.6.0 zlt-commons 通用组件 diff --git a/zlt-commons/zlt-auth-client-spring-boot-starter/pom.xml b/zlt-commons/zlt-auth-client-spring-boot-starter/pom.xml index d9a642b005f7cea41cab92f9f6c146c1c768a8fd..cfc7753a3fc4310cf0c44a1e744db87e43bbb70d 100644 --- a/zlt-commons/zlt-auth-client-spring-boot-starter/pom.xml +++ b/zlt-commons/zlt-auth-client-spring-boot-starter/pom.xml @@ -5,7 +5,7 @@ com.zlt zlt-commons - 5.5.0 + 5.6.0 4.0.0 jar diff --git a/zlt-commons/zlt-auth-client-spring-boot-starter/src/main/java/com/central/oauth2/common/properties/AuthProperties.java b/zlt-commons/zlt-auth-client-spring-boot-starter/src/main/java/com/central/oauth2/common/properties/AuthProperties.java index c89860b98eca21530748cb9e71ddebcc4808c4b8..efdafd91ece744e5704906261b19518f93871043 100644 --- a/zlt-commons/zlt-auth-client-spring-boot-starter/src/main/java/com/central/oauth2/common/properties/AuthProperties.java +++ b/zlt-commons/zlt-auth-client-spring-boot-starter/src/main/java/com/central/oauth2/common/properties/AuthProperties.java @@ -7,6 +7,11 @@ import lombok.Setter; * 认证配置 * * @author zlt + * @version 1.0 + * @date 2019/1/19 + *

+ * Blog: https://zlt2000.gitee.io + * Github: https://github.com/zlt2000 */ @Setter @Getter @@ -47,4 +52,10 @@ public class AuthProperties { * false: 就算使用同一账号登录时都会新建一个token */ private Boolean isShareToken = true; + + /** + * 参数加密(rsa),对应的私钥(用于解密) + * 默认私钥对应的公钥为:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6u4sP969hZP7BUEeAXJlq5wEmZ2CIZU4+5JADY8Ium55qGaE5qXEwMaV+M2HFWU4PZbHfH+RGEIMwjkARRok93krFnJuuwTjLwgyUSsKm5M7v3Ek8zdqs474v1qOxqE6BmHz9QJfgnAtFYxwEyVRoQ12+IAhpOzDU3rz02VR05kGCrgGU6szxDtp6cQ+u9ACGPy/uKdIQ6H7aM/oxMyPlwK9H38ni6Lxai7q56qp6F1p7drxh8CWJZ3j0NicB5ZPnOMtrGL5lfnifHBjB+CDJXv8kffY0zwL3J+LrnyFbpKeNeMJZpykoYW85Pdz+8WnE9KGMM3EeOeD/QX/OfMdFQIDAQAB + */ + private String decryptParamPrivateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDq7iw/3r2Fk/sFQR4BcmWrnASZnYIhlTj7kkANjwi6bnmoZoTmpcTAxpX4zYcVZTg9lsd8f5EYQgzCOQBFGiT3eSsWcm67BOMvCDJRKwqbkzu/cSTzN2qzjvi/Wo7GoToGYfP1Al+CcC0VjHATJVGhDXb4gCGk7MNTevPTZVHTmQYKuAZTqzPEO2npxD670AIY/L+4p0hDoftoz+jEzI+XAr0ffyeLovFqLurnqqnoXWnt2vGHwJYlnePQ2JwHlk+c4y2sYvmV+eJ8cGMH4IMle/yR99jTPAvcn4uufIVukp414wlmnKShhbzk93P7xacT0oYwzcR454P9Bf858x0VAgMBAAECggEBAJxK94VGWi+T01wbhirQQHN6yFSqRPiyncY/9f0PO29MMAOosKIBhnP5qaxsj4HcZR4UQYLCG3VX+8T6xwMx8YXyRogYeTJSfhG8Ej2NtPDrcsRaMYrdQ09RvosPZA0hFclJQVOu0HumxVegpq8WFMhgfNW16KwgF5JiKfRpY5aw4NDWZFmdNExdymrWPheI8pWBq/U+l8oqrekhbiEKXM2UXmLlKTS9Nk46LRYwaaiDW8JEFuPdx0cnakb+ecCXGd/8Cc8Hxn/mLyvqS1cWHT3J+lXRkfcnNnrJTR9qhf9l077XBMJqVckFEpK4kKbXHZd957ISAxq48Tm+xMX9KAECgYEA995szPToU0BxTTtOD4Z4c5JvbURQEcDQl/dB+qCQnu/orW5ZWv4++lHq2SZPjzbt7M8OaoRN8A5zYcNrYe4kBhLOLqHdaS1yUGIIjAejEAJplR5GqI3T5qzaLjpyiUZpO0mOcwAazCevnSXH6uO5jP0sjwxwaXz4OsTcpHIXHqECgYEA8qMXhh+G88+vTELL/2dHhtTIf7IAJLQ37c1Xrm6uwOHPfiDr256Lc4EzF8QAQqlHoYm1jRK7xDfFymY/SJKJVhYehWlNilnMuDuDOqseC/Zn2KgjMSjLLVkbp25DcpAu6SSiWlBvemrV3jivX/MU0BFp8HjbrlUcl12lRtYgrfUCgYB+iN2iA6RWW597fbrr0gnLdgXMEgOODJBwA5l7CFzLxk1Ru/OBsCkWQJtTH2ueALyVF16UodXnpnjgf5Jh++AH+bGnvJn7B2hEAMe8NGnZ0mFz7nDDuyNhrvvyfYPa8EboLTS7IGKNtfTAlHjqQDaI8vW8UO1R7KoL1lOM33FOAQKBgQDt/Z6jReU+3CUbbiFeANWdoLSQ2+1cExEQxWsNgy8Rreux0WTG4/nwb3fIBc4jlJrYDZTwLMHTssjkv+muq1zd/ZAuV51g6LfutSEAuLseDLDLSBBMtbCkaFTBo1uw0U/SCsbcQy01K/leoMcUG//8HjiFUGZZ1s3WgloM4xbmyQKBgAipgnoEyzvUfe2OMOc5ARGNSGZG4JGTGCyfnrYvYfffWpAokklHOkZMumeSWJXkx5F+MgJd9fxBK9S57PZ09gWkoeSVg0xcz5QMjh8BswfCdyet/CXQtwIfK0Wf1gWdAxC6vvv3DQ7zXbTlvqMdVOFzCKlocCYkzWMvIsejWXnW"; } diff --git a/zlt-commons/zlt-auth-client-spring-boot-starter/src/main/java/com/central/oauth2/common/properties/PermitProperties.java b/zlt-commons/zlt-auth-client-spring-boot-starter/src/main/java/com/central/oauth2/common/properties/PermitProperties.java index e0c3c15fe9b45e9d2384b8eba9ede3c78f7f20db..d3f4cac4e7a93c0b57da9245664045767c00e465 100644 --- a/zlt-commons/zlt-auth-client-spring-boot-starter/src/main/java/com/central/oauth2/common/properties/PermitProperties.java +++ b/zlt-commons/zlt-auth-client-spring-boot-starter/src/main/java/com/central/oauth2/common/properties/PermitProperties.java @@ -10,6 +10,11 @@ import java.util.List; * 配置需要放权的url白名单 * * @author zlt + * @version 1.0 + * @date 2019/1/19 + *

+ * Blog: https://zlt2000.gitee.io + * Github: https://github.com/zlt2000 */ @Setter @Getter diff --git a/zlt-commons/zlt-auth-client-spring-boot-starter/src/main/java/com/central/oauth2/common/properties/RenewProperties.java b/zlt-commons/zlt-auth-client-spring-boot-starter/src/main/java/com/central/oauth2/common/properties/RenewProperties.java index 7dfa1ad75129e47a88015b21dfd8b342df84105b..fc850e861187f7050b2d2f50a612ee37ecf0dce8 100644 --- a/zlt-commons/zlt-auth-client-spring-boot-starter/src/main/java/com/central/oauth2/common/properties/RenewProperties.java +++ b/zlt-commons/zlt-auth-client-spring-boot-starter/src/main/java/com/central/oauth2/common/properties/RenewProperties.java @@ -10,7 +10,11 @@ import java.util.List; * 续签配置 * * @author zlt + * @version 1.0 * @date 2019/7/9 + *

+ * Blog: https://zlt2000.gitee.io + * Github: https://github.com/zlt2000 */ @Setter @Getter diff --git a/zlt-commons/zlt-auth-client-spring-boot-starter/src/main/java/com/central/oauth2/common/properties/SecurityProperties.java b/zlt-commons/zlt-auth-client-spring-boot-starter/src/main/java/com/central/oauth2/common/properties/SecurityProperties.java index bba42cc4fea1b52e7107d4617950eb1d86effe8f..4e17c3c11acc6114c5591d4d7a36aa097b9d8cb4 100644 --- a/zlt-commons/zlt-auth-client-spring-boot-starter/src/main/java/com/central/oauth2/common/properties/SecurityProperties.java +++ b/zlt-commons/zlt-auth-client-spring-boot-starter/src/main/java/com/central/oauth2/common/properties/SecurityProperties.java @@ -7,7 +7,11 @@ import org.springframework.cloud.context.config.annotation.RefreshScope; /** * @author zlt + * @version 1.0 * @date 2019/1/4 + *

+ * Blog: https://zlt2000.gitee.io + * Github: https://github.com/zlt2000 */ @Setter @Getter diff --git a/zlt-commons/zlt-auth-client-spring-boot-starter/src/main/java/com/central/oauth2/common/properties/UrlPermissionProperties.java b/zlt-commons/zlt-auth-client-spring-boot-starter/src/main/java/com/central/oauth2/common/properties/UrlPermissionProperties.java index 7012585f60ec77a52c09c58a54ae1c063377b8d9..4958d41073a572cf0f6fb9f4c712692f481024a7 100644 --- a/zlt-commons/zlt-auth-client-spring-boot-starter/src/main/java/com/central/oauth2/common/properties/UrlPermissionProperties.java +++ b/zlt-commons/zlt-auth-client-spring-boot-starter/src/main/java/com/central/oauth2/common/properties/UrlPermissionProperties.java @@ -10,7 +10,11 @@ import java.util.List; * url权限配置 * * @author zlt + * @version 1.0 * @date 2019/8/2 + *

+ * Blog: https://zlt2000.gitee.io + * Github: https://github.com/zlt2000 */ @Setter @Getter diff --git a/zlt-commons/zlt-common-core/pom.xml b/zlt-commons/zlt-common-core/pom.xml index e2ffbc11d001dd0cc32d74cee0b56e8e7b8efcd6..2228487b0f410fad7f89be1c72eab1cc468b7bd5 100644 --- a/zlt-commons/zlt-common-core/pom.xml +++ b/zlt-commons/zlt-common-core/pom.xml @@ -4,7 +4,7 @@ com.zlt zlt-commons - 5.5.0 + 5.6.0 zlt-common-core 公共通用组件 @@ -89,5 +89,9 @@ com.fasterxml.jackson.core jackson-databind + + com.google.guava + guava + \ No newline at end of file diff --git a/zlt-commons/zlt-common-core/src/main/java/com/central/common/constant/CommonConstant.java b/zlt-commons/zlt-common-core/src/main/java/com/central/common/constant/CommonConstant.java index 3072fe105345c218b85f192e96d63795aa8832a8..ebc5a60e7870c8aed95ed02046666807692a04fc 100644 --- a/zlt-commons/zlt-common-core/src/main/java/com/central/common/constant/CommonConstant.java +++ b/zlt-commons/zlt-common-core/src/main/java/com/central/common/constant/CommonConstant.java @@ -10,7 +10,7 @@ public interface CommonConstant { /** * 项目版本号(banner使用) */ - String PROJECT_VERSION = "5.5.0"; + String PROJECT_VERSION = "5.6.0"; /** * token请求头名称 diff --git a/zlt-commons/zlt-common-core/src/main/java/com/central/common/datascope/mp/interceptor/DataScopeInnerInterceptor.java b/zlt-commons/zlt-common-core/src/main/java/com/central/common/datascope/mp/interceptor/DataScopeInnerInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..114d1fa6aada7315b74cacc006f67c6466d75a0c --- /dev/null +++ b/zlt-commons/zlt-common-core/src/main/java/com/central/common/datascope/mp/interceptor/DataScopeInnerInterceptor.java @@ -0,0 +1,282 @@ +package com.central.common.datascope.mp.interceptor; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.PluginUtils; +import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; +import com.central.common.datascope.mp.sql.handler.SqlHandler; +import com.central.common.properties.DataScopeProperties; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import net.sf.jsqlparser.JSQLParserException; +import net.sf.jsqlparser.expression.Alias; +import net.sf.jsqlparser.expression.Expression; +import net.sf.jsqlparser.expression.ExpressionVisitorAdapter; +import net.sf.jsqlparser.expression.operators.conditional.AndExpression; +import net.sf.jsqlparser.parser.CCJSqlParserManager; +import net.sf.jsqlparser.parser.CCJSqlParserUtil; +import net.sf.jsqlparser.schema.Column; +import net.sf.jsqlparser.schema.Table; +import net.sf.jsqlparser.statement.select.*; +import org.apache.ibatis.executor.Executor; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.session.ResultHandler; +import org.apache.ibatis.session.RowBounds; +import org.springframework.http.server.PathContainer; +import org.springframework.web.util.pattern.PathPatternParser; + +import java.io.StringReader; +import java.sql.SQLException; +import java.util.*; + +import static com.central.common.datascope.mp.sql.handler.SqlHandler.ALIAS_SYNBOL; + +/** + * 数据权限拦截器 + * + * @author jarvis create by 2023/1/7 + */ +@Slf4j +@Data +@NoArgsConstructor +public class DataScopeInnerInterceptor implements InnerInterceptor { + + private DataScopeProperties dataScopeProperties; + + /** + * 权限的where条件 + */ + private SqlHandler sqlHandler; + + /** + * 对表配置进行缓存,优先读取缓存,在进行匹配 + */ + private Map tableInfoMap = new HashMap<>(); + + /** + * 通配符 + */ + private PathPatternParser pathPatternParser = new PathPatternParser(); + + public DataScopeInnerInterceptor(DataScopeProperties dataScopeProperties, SqlHandler sqlHandler) { + this.dataScopeProperties = dataScopeProperties; + this.sqlHandler = sqlHandler; + } + + @Override + public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) { + //为空时:所有sql都添加权限控制 + if (CollUtil.isEmpty(dataScopeProperties.getIncludeSqls()) + //有值时:只有配置的sql添加权限控制 + || dataScopeProperties.getIncludeSqls().contains(ms.getId())) { + //判断排除的sql + if(CollUtil.isEmpty(dataScopeProperties.getIgnoreSqls()) + || !dataScopeProperties.getIgnoreSqls().contains(ms.getId())){ + PluginUtils.MPBoundSql mpBs = PluginUtils.mpBoundSql(boundSql); + String sql = boundSql.getSql(); + try { + Select select = explainQuerySql(sql); + reform(select.getSelectBody()); + mpBs.sql(select.toString()); + } catch (JSQLParserException e) { + throw new RuntimeException(e); + } + } + } + } + + public Select explainQuerySql(String sql) throws JSQLParserException { + CCJSqlParserManager parserManager = new CCJSqlParserManager(); + Select select = (Select) parserManager.parse(new StringReader(sql)); + return select; + } + + /** + * 递归对查询和解析后的子查询进行改造 + * @param selectBody + * @param + * @throws JSQLParserException + */ + public void reform(SelectBody selectBody) throws JSQLParserException { + // 如果是plainSelect的话进行改造 + if(selectBody instanceof PlainSelect&& ObjectUtil.isNotNull(sqlHandler)){ + PlainSelect select = (PlainSelect) selectBody; + // 获取权限的where条件 + String scopeWhereSql = sqlHandler.handleScopeSql(); + // 如果条件不是空的话才对select进行改造 + if(StrUtil.isNotBlank(scopeWhereSql)){ + // 需要改造的别名列表,自动增加到where条件中 + List tableAliasList = new ArrayList<>(); + FromItem fromItem = select.getFromItem(); + String tableAlias = explainFromItem(fromItem); + // 获取from的表字段,如果from是子查询则进行递归 + if(fromItem instanceof Table){ + + String upperTableName = ((Table) fromItem).getName().toUpperCase(); + if(tableInfoMap.containsKey(upperTableName)){ + if (!tableInfoMap.get(upperTableName).getIgnore()) { + tableAliasList.add(StrUtil.isNotBlank(tableAlias)? tableAlias: ""); + } + }else{ + boolean ignore = true; + if(isReformTable(upperTableName)){ + tableAliasList.add(StrUtil.isNotBlank(tableAlias)? tableAlias: ""); + ignore = false; + } + // 写入缓存 + tableInfoMap.put(upperTableName, new TableConfig(upperTableName, ignore)); + } + }else if(fromItem instanceof SubSelect){ + reform(((SubSelect) fromItem).getSelectBody()); + } + // 获取join列表,然后获取对应的表或者递归子查询 + List joinList = select.getJoins(); + if (CollUtil.isNotEmpty(joinList)) { + for (Join join : joinList) { + if(join.getRightItem() instanceof Table){ + String joinTable = ((Table) join.getRightItem()).getName().toUpperCase(); + String joinAlias = ((Table) join.getRightItem()).getAlias().getName(); + if(tableInfoMap.containsKey(joinTable)){ + if (!tableInfoMap.get(joinTable).getIgnore()) { + tableAliasList.add(StrUtil.isNotBlank(joinAlias)? joinAlias: ""); + } + }else{ + boolean ignore = true; + if(isReformTable(joinTable)){ + tableAliasList.add(StrUtil.isNotBlank(joinAlias)? joinAlias: ""); + ignore = false; + } + // 写入缓存 + tableInfoMap.put(joinTable, new TableConfig(joinTable, ignore)); + } + } + if(join.getRightItem() instanceof SubSelect){ + reform(((SubSelect) join.getRightItem()).getSelectBody()); + } + } + } + // 如果改造的表是空的话则不改造对应的select + if(CollUtil.isNotEmpty(tableAliasList)){ + reformWhere(select, scopeWhereSql, tableAliasList); + } + } + // 如果select不是plainSelect的话则进行递归改造 + }else if(selectBody instanceof WithItem&& Objects.nonNull(((WithItem)selectBody).getSubSelect())){ + reform(((WithItem)selectBody).getSubSelect().getSelectBody()); + } + } + + + /** + * 判断表是否需要改造 + * @param table + * @return + * 1. 判断表是否在需要改造的范围 + * 1.1 如果表在inclde的set中(是否存在没用通配符的情况写入配置) + * 1.2 进行通配符匹配判断范围 + * 2. 在改造的范围中进行提出 + * 2.1 判断是不是完全匹配上ignore列表中 + * 2.2 判断是否在通配符过滤 + */ + private boolean isReformTable(String table){ + return + // 1. 判断表是否在需要改造的范围 + (dataScopeProperties.getIncludeTables().contains(table) + ||dataScopeProperties.getIncludeTables().stream().anyMatch(item-> + pathPatternParser.parse(item.toUpperCase()).matches(PathContainer.parsePath(table)) + ))&& ( + // 如果没有忽略列表的话在范围中直接返回 + CollUtil.isEmpty(dataScopeProperties.getIgnoreTables()) + // 在改造的范围中进行忽略表 + ||!(dataScopeProperties.getIgnoreTables().contains(table)|| + dataScopeProperties.getIgnoreTables().stream().anyMatch(item-> + pathPatternParser.parse(item.toUpperCase()).matches(PathContainer.parsePath(table)) + ))); + } + + /** + * 解析from中的东西 + * @param fromItem + * @return + * @throws JSQLParserException + */ + private String explainFromItem(FromItem fromItem) throws JSQLParserException { + // 别名 + String alias = ""; + if(Objects.nonNull(fromItem)){ + // 如果from的东西是表的话 + if (fromItem instanceof Table) { + Alias tablealias = ((Table) fromItem).getAlias(); + if(Objects.nonNull(tablealias)&& StrUtil.isNotBlank(tablealias.getName())){ + alias = tablealias.getName(); + }else{ + alias = ((Table) fromItem).getName(); + } + } + // 如果from的子查询 + if(fromItem instanceof SubSelect){ + SelectBody subSelectBody = ((SubSelect) fromItem).getSelectBody(); + reform(subSelectBody); + } + } + return alias; + } + + /** + * 改造where条件 + * @param select + * @param whereSql where 条件 + * @param aliasName 需要添加权限的表别名 + * @return + * @throws JSQLParserException + */ + private SelectBody reformWhere(PlainSelect select, String whereSql, List aliasName) throws JSQLParserException { + + // todo 处理exists + if(StrUtil.isNotBlank(whereSql)&& CollUtil.isNotEmpty(aliasName)){ + for (String alias : aliasName) { + Expression expression = CCJSqlParserUtil + .parseCondExpression(whereSql); + expression.accept(new ExpressionVisitorAdapter(){ + @Override + public void visit(Column column) { + if(Objects.isNull(column.getTable())|| ALIAS_SYNBOL.equals(column.getTable().toString())){ + Table table = new Table(); + table.setAlias(new Alias(alias)); + column.setTable(table); + } + } + }); + if(ObjectUtil.isNull(select.getWhere())){ + select.setWhere(expression); + }else { + AndExpression andExpression = new AndExpression(select.getWhere(), expression); + select.setWhere(andExpression); + } + } + } + return select; + } + + + public class TableConfig{ + private String tableName; + private Boolean isIgnore; + + public TableConfig(String tableName, Boolean isIgnore) { + this.tableName = tableName; + this.isIgnore = isIgnore; + } + + public String getTableName() { + return tableName; + } + + public Boolean getIgnore() { + return isIgnore; + } + } +} diff --git a/zlt-commons/zlt-common-core/src/main/java/com/central/common/datascope/mp/interceptor/EnableQuerySqlLogInnerInterceptor.java b/zlt-commons/zlt-common-core/src/main/java/com/central/common/datascope/mp/interceptor/EnableQuerySqlLogInnerInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..b23ceed6538457ed3f4b1b9d005a2a2fd35530cd --- /dev/null +++ b/zlt-commons/zlt-common-core/src/main/java/com/central/common/datascope/mp/interceptor/EnableQuerySqlLogInnerInterceptor.java @@ -0,0 +1,37 @@ +package com.central.common.datascope.mp.interceptor; + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.core.toolkit.PluginUtils; +import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.executor.Executor; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.session.ResultHandler; +import org.apache.ibatis.session.RowBounds; + +import java.sql.SQLException; + +/** + * 示例 + * + * @author jarvis create by 2023/2/2 + */ +@Slf4j +public class EnableQuerySqlLogInnerInterceptor implements InnerInterceptor{ + private InnerInterceptor delegate; + + public EnableQuerySqlLogInnerInterceptor(InnerInterceptor delegate) { + Assert.notNull(delegate, "委派类不能为空"); + this.delegate = delegate; + } + + @Override + public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException { + PluginUtils.MPBoundSql mpBs = PluginUtils.mpBoundSql(boundSql); + String sql = boundSql.getSql(); + log.info("执行mapperId{},原始sql为{}", ms.getId(), sql); + delegate.beforeQuery(executor, ms, parameter, rowBounds, resultHandler, boundSql); + log.info("执行mapperId{}, 修改sql为{}", ms.getId(), mpBs.sql()); + } +} diff --git a/zlt-commons/zlt-common-core/src/main/java/com/central/common/datascope/mp/sql/handler/CreatorDataScopeSqlHandler.java b/zlt-commons/zlt-common-core/src/main/java/com/central/common/datascope/mp/sql/handler/CreatorDataScopeSqlHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..8630b75b097d0f0100b7f9a88d8b46d4d2a2afd2 --- /dev/null +++ b/zlt-commons/zlt-common-core/src/main/java/com/central/common/datascope/mp/sql/handler/CreatorDataScopeSqlHandler.java @@ -0,0 +1,50 @@ +package com.central.common.datascope.mp.sql.handler; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; +import com.central.common.context.LoginUserContextHolder; +import com.central.common.enums.DataScope; +import com.central.common.feign.UserService; +import com.central.common.model.SysRole; +import com.central.common.model.SysUser; +import com.central.common.properties.DataScopeProperties; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; +import java.util.Objects; + +/** + * 个人权限的处理器 + * + * @author jarvis create by 2023/1/10 + */ +public class CreatorDataScopeSqlHandler implements SqlHandler{ + + @Autowired + UserService userService; + + @Autowired + private DataScopeProperties dataScopeProperties; + + /** + * 返回需要增加的where条件,返回空字符的话则代表不需要权限控制 + * + * @return where条件 + * 如果角色是全部权限的话则不进行控制,如果是个人权限的话则自动加入create_id = user_id + */ + @Override + public String handleScopeSql() { + SysUser user = LoginUserContextHolder.getUser(); + Assert.notNull(user, "登陆人不能为空"); + List roleList = userService.findRolesByUserId(user.getId()); + return StrUtil.isBlank(dataScopeProperties.getCreatorIdColumnName()) + ||CollUtil.isEmpty(roleList) + || roleList.stream().anyMatch(item-> Objects.isNull(item.getDataScope()) || DataScope.ALL.equals(item.getDataScope())) + ? DO_NOTHING: + // 这里确保有配置权限范围控制的字段 + // 1. 如果没有配置角色的情况默认采用只读全部的记录 + // 2. 如果有配置角色的话判断是否存在有ALL获取null的情况,如果没有ALL的话读取个人创建记录 + String.format("%s = '%s'", dataScopeProperties.getCreatorIdColumnName(), user.getId()); + } +} diff --git a/zlt-commons/zlt-common-core/src/main/java/com/central/common/datascope/mp/sql/handler/DefaultSqlHandler.java b/zlt-commons/zlt-common-core/src/main/java/com/central/common/datascope/mp/sql/handler/DefaultSqlHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..198d4d4bf9b95ea12beb8d6a834931cce948503c --- /dev/null +++ b/zlt-commons/zlt-common-core/src/main/java/com/central/common/datascope/mp/sql/handler/DefaultSqlHandler.java @@ -0,0 +1,15 @@ +package com.central.common.datascope.mp.sql.handler; + +/** + * 示例 + * + * @author jarvis create by 2023/1/8 + */ +public class DefaultSqlHandler implements SqlHandler{ + + + @Override + public String handleScopeSql() { + return DO_NOTHING; + } +} diff --git a/zlt-commons/zlt-common-core/src/main/java/com/central/common/datascope/mp/sql/handler/SqlHandler.java b/zlt-commons/zlt-common-core/src/main/java/com/central/common/datascope/mp/sql/handler/SqlHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..d9db76d73f4768d0197e59041784dd11161f1a31 --- /dev/null +++ b/zlt-commons/zlt-common-core/src/main/java/com/central/common/datascope/mp/sql/handler/SqlHandler.java @@ -0,0 +1,25 @@ +package com.central.common.datascope.mp.sql.handler; + +/** + * 数据权限的sql获取接口 + * + * @author jarvis create by 2023/1/8 + */ +public interface SqlHandler { + + /** + * 通过这个字符替换成别名,自动的 + */ + String ALIAS_SYNBOL = "alias_"; + + /** + * 空字符串 + */ + String DO_NOTHING = ""; + + /** + * 返回需要增加的where条件,返回空字符的话则代表不需要权限控制 + * @return where条件 + */ + String handleScopeSql(); +} diff --git a/zlt-commons/zlt-common-core/src/main/java/com/central/common/enums/DataScope.java b/zlt-commons/zlt-common-core/src/main/java/com/central/common/enums/DataScope.java new file mode 100644 index 0000000000000000000000000000000000000000..75a3e1249be135ae9e8233128c5093adadb7422d --- /dev/null +++ b/zlt-commons/zlt-common-core/src/main/java/com/central/common/enums/DataScope.java @@ -0,0 +1,21 @@ +package com.central.common.enums; + +import lombok.Getter; + +/** + * 枚举类型 + * + * @author jarvis create by 2023/1/10 + */ +@Getter +public enum DataScope implements ZltEnum{ + ALL(0, "全部权限"), CREATOR(1, "创建者权限"); + + DataScope(Integer id, String content) { + this.id = id; + this.content = content; + } + + private Integer id; + private String content; +} diff --git a/zlt-commons/zlt-common-core/src/main/java/com/central/common/enums/ZltEnum.java b/zlt-commons/zlt-common-core/src/main/java/com/central/common/enums/ZltEnum.java new file mode 100644 index 0000000000000000000000000000000000000000..30fa534bd29b7986edc43bae3650a3a3ff0171bd --- /dev/null +++ b/zlt-commons/zlt-common-core/src/main/java/com/central/common/enums/ZltEnum.java @@ -0,0 +1,20 @@ +package com.central.common.enums; + +/** + * 接口 + * + * @author jarvis create by 2023/1/20 + */ +public interface ZltEnum { + /** + * 获取id + * @return + */ + Integer getId(); + + /** + * 获取内容 + * @return + */ + String getContent(); +} diff --git a/zlt-commons/zlt-common-core/src/main/java/com/central/common/feign/UserService.java b/zlt-commons/zlt-common-core/src/main/java/com/central/common/feign/UserService.java index 427387adea2361178df4e06502d58c7b4914a803..0d0ed3c61b8a35ef562f6211f06f2ce27ae45c30 100644 --- a/zlt-commons/zlt-common-core/src/main/java/com/central/common/feign/UserService.java +++ b/zlt-commons/zlt-common-core/src/main/java/com/central/common/feign/UserService.java @@ -3,12 +3,15 @@ package com.central.common.feign; import com.central.common.constant.ServiceNameConstants; import com.central.common.feign.fallback.UserServiceFallbackFactory; import com.central.common.model.LoginAppUser; +import com.central.common.model.SysRole; import com.central.common.model.SysUser; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestParam; +import java.util.List; + /** * @author zlt */ @@ -48,4 +51,22 @@ public interface UserService { */ @GetMapping(value = "/users-anon/openId", params = "openId") LoginAppUser findByOpenId(@RequestParam("openId") String openId); + + + /** + * 获取带角色的用户信息 + * @param username + * @return + */ + @GetMapping(value = "/users/roleUser/{username}") + public SysUser selectRoleUser(@PathVariable("username") String username); + + /** + * 获取用户的角色 + * + * @param + * @return + */ + @GetMapping("/users/{id}/roles") + public List findRolesByUserId(@PathVariable("id") Long id); } diff --git a/zlt-commons/zlt-common-core/src/main/java/com/central/common/feign/fallback/UserServiceFallbackFactory.java b/zlt-commons/zlt-common-core/src/main/java/com/central/common/feign/fallback/UserServiceFallbackFactory.java index 1b7bbec858481a914dc99573aa7c262453222218..4a249494f0e94f2f0ed62f24b848f536478e7c56 100644 --- a/zlt-commons/zlt-common-core/src/main/java/com/central/common/feign/fallback/UserServiceFallbackFactory.java +++ b/zlt-commons/zlt-common-core/src/main/java/com/central/common/feign/fallback/UserServiceFallbackFactory.java @@ -2,10 +2,14 @@ package com.central.common.feign.fallback; import com.central.common.feign.UserService; import com.central.common.model.LoginAppUser; +import com.central.common.model.SysRole; import com.central.common.model.SysUser; import org.springframework.cloud.openfeign.FallbackFactory; import lombok.extern.slf4j.Slf4j; +import java.util.Collections; +import java.util.List; + /** * userService降级工场 * @@ -40,6 +44,29 @@ public class UserServiceFallbackFactory implements FallbackFactory log.error("通过openId查询用户异常:{}", openId, throwable); return new LoginAppUser(); } + + /** + * 获取带角色的用户信息 + * + * @param username + * @return + */ + @Override + public SysUser selectRoleUser(String username) { + log.error("通过用户名查询用户异常:{}", username, throwable); + return new SysUser(); + } + + /** + * 获取用户的角色 + * + * @param id@return + */ + @Override + public List findRolesByUserId(Long id) { + log.error("通过用户id查询角色列表异常:{}", id, throwable); + return Collections.emptyList(); + } }; } } diff --git a/zlt-commons/zlt-common-core/src/main/java/com/central/common/model/SysMenu.java b/zlt-commons/zlt-common-core/src/main/java/com/central/common/model/SysMenu.java index bd3de7058e2f70c586fe79174d3639d81328812b..b6029ff098df27757e10dd80c484a5a5b896fcea 100644 --- a/zlt-commons/zlt-common-core/src/main/java/com/central/common/model/SysMenu.java +++ b/zlt-commons/zlt-common-core/src/main/java/com/central/common/model/SysMenu.java @@ -29,6 +29,7 @@ public class SysMenu extends SuperEntity { * 请求的类型 */ private String pathMethod; + private Long creatorId; @TableField(exist = false) private List subMenus; diff --git a/zlt-commons/zlt-common-core/src/main/java/com/central/common/model/SysRole.java b/zlt-commons/zlt-common-core/src/main/java/com/central/common/model/SysRole.java index 45f050bbff1a41100e28d313f171734cbefffa79..e3ed124944cb3697d9f4d14eb6176aad50ee1783 100644 --- a/zlt-commons/zlt-common-core/src/main/java/com/central/common/model/SysRole.java +++ b/zlt-commons/zlt-common-core/src/main/java/com/central/common/model/SysRole.java @@ -2,6 +2,7 @@ package com.central.common.model; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; +import com.central.common.enums.DataScope; import lombok.Data; import lombok.EqualsAndHashCode; @@ -18,4 +19,9 @@ public class SysRole extends SuperEntity { private String name; @TableField(exist = false) private Long userId; + /** + * 数据权限字段 + */ + private DataScope dataScope; + private Long creatorId; } diff --git a/zlt-commons/zlt-common-core/src/main/java/com/central/common/model/SysUser.java b/zlt-commons/zlt-common-core/src/main/java/com/central/common/model/SysUser.java index 8a3b4185591995d6407b21585bbbf18ec7efeeec..c7a67b5c03d9a5110bb5b51c1309a6f17031f5f3 100644 --- a/zlt-commons/zlt-common-core/src/main/java/com/central/common/model/SysUser.java +++ b/zlt-commons/zlt-common-core/src/main/java/com/central/common/model/SysUser.java @@ -27,6 +27,7 @@ public class SysUser extends SuperEntity { private Boolean enabled; private String type; private String openId; + private Long creatorId; @TableLogic private boolean isDel; diff --git a/zlt-commons/zlt-common-core/src/main/java/com/central/common/passwordEncoder/SM3PasswordEncoder.java b/zlt-commons/zlt-common-core/src/main/java/com/central/common/passwordEncoder/SM3PasswordEncoder.java new file mode 100644 index 0000000000000000000000000000000000000000..c2bfc5bd8e65fee744843a88f27a14b3d51cd22e --- /dev/null +++ b/zlt-commons/zlt-common-core/src/main/java/com/central/common/passwordEncoder/SM3PasswordEncoder.java @@ -0,0 +1,36 @@ +package com.central.common.passwordEncoder; + +import cn.hutool.crypto.SmUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.crypto.password.PasswordEncoder; + +/** + * SM3 + * + * @author zlt + * @version 1.0 + * @date 2022/12/29 + *

+ * Blog: https://zlt2000.gitee.io + * Github: https://github.com/zlt2000 + */ +@Slf4j +public class SM3PasswordEncoder implements PasswordEncoder { + @Override + public String encode(CharSequence rawPassword) { + return SmUtil.sm3(rawPassword.toString()); + } + + @Override + public boolean matches(CharSequence rawPassword, String encodedPassword) { + if (rawPassword == null) { + throw new IllegalArgumentException("rawPassword cannot be null"); + } + if (encodedPassword == null || encodedPassword.length() == 0) { + log.warn("Empty encoded password"); + return false; + } + String rawPasswordEncoded = this.encode(rawPassword.toString()); + return rawPasswordEncoded.equals(encodedPassword); + } +} diff --git a/zlt-commons/zlt-common-core/src/main/java/com/central/common/properties/DataScopeProperties.java b/zlt-commons/zlt-common-core/src/main/java/com/central/common/properties/DataScopeProperties.java new file mode 100644 index 0000000000000000000000000000000000000000..2d3720a33aa46fff8d5c13775886615d9092135f --- /dev/null +++ b/zlt-commons/zlt-common-core/src/main/java/com/central/common/properties/DataScopeProperties.java @@ -0,0 +1,66 @@ +package com.central.common.properties; + +import cn.hutool.core.collection.CollUtil; +import com.google.common.collect.ImmutableSet; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +/** + * 示例 + * + * @author jarvis create by 2023/1/8 + */ +@ConfigurationProperties(prefix = "zlt.datascope") +@Data +public class DataScopeProperties { + private static final Set INGORE_SQL_ID = ImmutableSet + .of("com.central.user.mapper.findRolesByUserId" + , "com.central.user.mapper.SysUserMapper.selectList" + , "com.central.user.mapper.SysUserRoleMapper.findRolesByUserId" + , "com.central.user.mapper.SysRoleMenuMapper.findMenusByRoleIds"); + /** + * 是否开启权限控制 + */ + private Boolean enabled = Boolean.FALSE; + + /** + * 是否开启打印sql的修改情况 + */ + private Boolean enabledSqlDebug = Boolean.FALSE; + /** + * 配置那些表不执行权限控制 + */ + private Set ignoreTables = Collections.emptySet(); + /** + * 指定那些sql不执行权限控制 + */ + private Set ignoreSqls = INGORE_SQL_ID; + /** + * 配置那些表执行数据权限控制,默认是*则表示全部 + */ + private Set includeTables = Collections.singleton("*"); + /** + * 指定那些sql执行数据权限控制 + * 1. 为空时:所有sql都添加权限控制 + * 2. 有值时:只有配置的sql添加权限控制 + */ + private Set includeSqls = Collections.emptySet(); + + /** + * 指定创建人id的字段名 + */ + private String creatorIdColumnName = "creator_id"; + + public void setIgnoreSqls(Set ignoreSqls) { + Set ingoreSet = new HashSet<>(); + ingoreSet.addAll(INGORE_SQL_ID); + if(CollUtil.isNotEmpty(ignoreSqls)){ + ingoreSet.addAll(ignoreSqls); + } + this.ignoreSqls = ingoreSet; + } +} diff --git a/zlt-commons/zlt-common-core/src/main/java/com/central/common/utils/LoginUserUtils.java b/zlt-commons/zlt-common-core/src/main/java/com/central/common/utils/LoginUserUtils.java index 3fdf1be4996df848c40baada961cb02861f97129..b05ecdfd58e074fa0d3773a5726eaf53b638308a 100644 --- a/zlt-commons/zlt-common-core/src/main/java/com/central/common/utils/LoginUserUtils.java +++ b/zlt-commons/zlt-common-core/src/main/java/com/central/common/utils/LoginUserUtils.java @@ -8,6 +8,8 @@ import com.central.common.model.SysUser; import org.springframework.security.authentication.AnonymousAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; @@ -66,4 +68,14 @@ public class LoginUserUtils { } return user; } + + public static SysUser getCurrentUser(boolean isFull) { + // 从请求上下文里获取 Request 对象 + ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletRequest contextRequest = requestAttributes.getRequest(); + if (contextRequest != null) { + return LoginUserUtils.getCurrentUser(contextRequest, isFull); + } + return null; + } } diff --git a/zlt-commons/zlt-common-core/src/main/java/com/central/common/utils/PwdEncoderUtil.java b/zlt-commons/zlt-common-core/src/main/java/com/central/common/utils/PwdEncoderUtil.java index dfe0b18c1e0b3bb9675539dd2b5b45b27c03fb75..343a807054b4bd2defee714db265f742203afeb1 100644 --- a/zlt-commons/zlt-common-core/src/main/java/com/central/common/utils/PwdEncoderUtil.java +++ b/zlt-commons/zlt-common-core/src/main/java/com/central/common/utils/PwdEncoderUtil.java @@ -1,5 +1,6 @@ package com.central.common.utils; +import com.central.common.passwordEncoder.SM3PasswordEncoder; import org.springframework.security.crypto.argon2.Argon2PasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.DelegatingPasswordEncoder; @@ -35,6 +36,7 @@ public class PwdEncoderUtil { encoders.put("SHA-256", new org.springframework.security.crypto.password.MessageDigestPasswordEncoder("SHA-256")); encoders.put("sha256", new org.springframework.security.crypto.password.StandardPasswordEncoder()); encoders.put("argon2", new Argon2PasswordEncoder()); + encoders.put("SM3", new SM3PasswordEncoder()); Assert.isTrue(encoders.containsKey(encodingId), encodingId + " is not found in idToPasswordEncoder"); diff --git a/zlt-commons/zlt-common-spring-boot-starter/pom.xml b/zlt-commons/zlt-common-spring-boot-starter/pom.xml index f9f2f4c52ac09c20e84ab3823ef1bbbdd91214bb..f86bee97e674f378e9fa8c7092b633b881edcc2d 100644 --- a/zlt-commons/zlt-common-spring-boot-starter/pom.xml +++ b/zlt-commons/zlt-common-spring-boot-starter/pom.xml @@ -4,7 +4,7 @@ com.zlt zlt-commons - 5.5.0 + 5.6.0 zlt-common-spring-boot-starter 公共通用组件 diff --git a/zlt-commons/zlt-db-spring-boot-starter/pom.xml b/zlt-commons/zlt-db-spring-boot-starter/pom.xml index 69583a00329e691b71500e196ec2a2ab5e750f48..a9c73377ba5c1e54a36f31062769657147810749 100644 --- a/zlt-commons/zlt-db-spring-boot-starter/pom.xml +++ b/zlt-commons/zlt-db-spring-boot-starter/pom.xml @@ -5,7 +5,7 @@ com.zlt zlt-commons - 5.5.0 + 5.6.0 4.0.0 jar diff --git a/zlt-commons/zlt-db-spring-boot-starter/src/main/java/com/central/db/config/MybatisPlusAutoConfigure.java b/zlt-commons/zlt-db-spring-boot-starter/src/main/java/com/central/db/config/MybatisPlusAutoConfigure.java index f5f448533806d1e750c026cba1d8debe240759d3..9f732b071a0dc844bcc40cf70fe00a097d5cbc8a 100644 --- a/zlt-commons/zlt-db-spring-boot-starter/src/main/java/com/central/db/config/MybatisPlusAutoConfigure.java +++ b/zlt-commons/zlt-db-spring-boot-starter/src/main/java/com/central/db/config/MybatisPlusAutoConfigure.java @@ -5,6 +5,11 @@ import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import com.central.common.datascope.mp.interceptor.DataScopeInnerInterceptor; +import com.central.common.datascope.mp.interceptor.EnableQuerySqlLogInnerInterceptor; +import com.central.common.datascope.mp.sql.handler.CreatorDataScopeSqlHandler; +import com.central.common.datascope.mp.sql.handler.SqlHandler; +import com.central.common.properties.DataScopeProperties; import com.central.common.properties.TenantProperties; import com.central.db.interceptor.CustomTenantInterceptor; import com.central.db.properties.MybatisPlusAutoFillProperties; @@ -23,7 +28,7 @@ import org.springframework.context.annotation.Bean; * Blog: https://zlt2000.gitee.io * Github: https://github.com/zlt2000 */ -@EnableConfigurationProperties(MybatisPlusAutoFillProperties.class) +@EnableConfigurationProperties({MybatisPlusAutoFillProperties.class, DataScopeProperties.class}) public class MybatisPlusAutoConfigure { @Autowired private TenantLineHandler tenantLineHandler; @@ -34,11 +39,20 @@ public class MybatisPlusAutoConfigure { @Autowired private MybatisPlusAutoFillProperties autoFillProperties; + @Autowired + private DataScopeProperties dataScopeProperties; + + @Bean + @ConditionalOnMissingBean + public SqlHandler sqlHandler(){ + return new CreatorDataScopeSqlHandler(); + } + /** * 分页插件,自动识别数据库类型 */ @Bean - public MybatisPlusInterceptor paginationInterceptor() { + public MybatisPlusInterceptor paginationInterceptor(SqlHandler sqlHandler) { MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor(); boolean enableTenant = tenantProperties.getEnable(); //是否开启多租户隔离 @@ -47,6 +61,11 @@ public class MybatisPlusAutoConfigure { tenantLineHandler, tenantProperties.getIgnoreSqls()); mpInterceptor.addInnerInterceptor(tenantInterceptor); } + if(dataScopeProperties.getEnabled()){ + DataScopeInnerInterceptor dataScopeInnerInterceptor = new DataScopeInnerInterceptor(dataScopeProperties, sqlHandler); + mpInterceptor.addInnerInterceptor(Boolean.TRUE.equals(dataScopeProperties.getEnabledSqlDebug()) + ? new EnableQuerySqlLogInnerInterceptor(dataScopeInnerInterceptor): dataScopeInnerInterceptor); + } mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return mpInterceptor; } diff --git a/zlt-commons/zlt-elasticsearch-spring-boot-starter/pom.xml b/zlt-commons/zlt-elasticsearch-spring-boot-starter/pom.xml index 7b4be9bae80ca3440131e1a1c74bc91b6d26b3b5..3011499f90ff98a2d3f01173a78d64d0c1063fc8 100644 --- a/zlt-commons/zlt-elasticsearch-spring-boot-starter/pom.xml +++ b/zlt-commons/zlt-elasticsearch-spring-boot-starter/pom.xml @@ -5,7 +5,7 @@ com.zlt zlt-commons - 5.5.0 + 5.6.0 4.0.0 jar diff --git a/zlt-commons/zlt-loadbalancer-spring-boot-starter/pom.xml b/zlt-commons/zlt-loadbalancer-spring-boot-starter/pom.xml index fa8210aee8f16229da610794468c52f309ecf0ba..0b9a91c969c5d47389e396d97bf530ebe85d6634 100644 --- a/zlt-commons/zlt-loadbalancer-spring-boot-starter/pom.xml +++ b/zlt-commons/zlt-loadbalancer-spring-boot-starter/pom.xml @@ -5,7 +5,7 @@ com.zlt zlt-commons - 5.5.0 + 5.6.0 4.0.0 jar diff --git a/zlt-commons/zlt-log-spring-boot-starter/pom.xml b/zlt-commons/zlt-log-spring-boot-starter/pom.xml index 8f6d7dcb2cf5cea0bfc2bc07e8d48947e15f9a61..f921e7a056d6bcb05ae7381ec61c11c3fc4fd7ff 100644 --- a/zlt-commons/zlt-log-spring-boot-starter/pom.xml +++ b/zlt-commons/zlt-log-spring-boot-starter/pom.xml @@ -5,7 +5,7 @@ com.zlt zlt-commons - 5.5.0 + 5.6.0 4.0.0 jar diff --git a/zlt-commons/zlt-oss-spring-boot-starter/pom.xml b/zlt-commons/zlt-oss-spring-boot-starter/pom.xml index b12a383a858d3e137143f86991edad8d81147c35..e2abfeff218926c172a4e6d8e3d8f2fd542e9fa4 100644 --- a/zlt-commons/zlt-oss-spring-boot-starter/pom.xml +++ b/zlt-commons/zlt-oss-spring-boot-starter/pom.xml @@ -5,7 +5,7 @@ com.zlt zlt-commons - 5.5.0 + 5.6.0 4.0.0 jar diff --git a/zlt-commons/zlt-redis-spring-boot-starter/pom.xml b/zlt-commons/zlt-redis-spring-boot-starter/pom.xml index 293f16bf20859cdcfc2800ba480c76747557e8b4..ddf27ba351d82df6c29c9fb8380ea8a5485496db 100644 --- a/zlt-commons/zlt-redis-spring-boot-starter/pom.xml +++ b/zlt-commons/zlt-redis-spring-boot-starter/pom.xml @@ -5,7 +5,7 @@ com.zlt zlt-commons - 5.5.0 + 5.6.0 4.0.0 jar diff --git a/zlt-commons/zlt-sentinel-spring-boot-starter/pom.xml b/zlt-commons/zlt-sentinel-spring-boot-starter/pom.xml index 7822ca83743f2e6538079df5267a0a2ca30c1c1a..4c62722d629f682a42ff2bfc14202c4b8548ceb3 100644 --- a/zlt-commons/zlt-sentinel-spring-boot-starter/pom.xml +++ b/zlt-commons/zlt-sentinel-spring-boot-starter/pom.xml @@ -5,7 +5,7 @@ com.zlt zlt-commons - 5.5.0 + 5.6.0 4.0.0 jar diff --git a/zlt-commons/zlt-swagger2-spring-boot-starter/pom.xml b/zlt-commons/zlt-swagger2-spring-boot-starter/pom.xml index d1cb8349ce36c100ac26e6f4b9b2f6d7f568794b..0a992c22d7f7360d46fe8ad4d9e9b7d4bd2d47a3 100644 --- a/zlt-commons/zlt-swagger2-spring-boot-starter/pom.xml +++ b/zlt-commons/zlt-swagger2-spring-boot-starter/pom.xml @@ -5,7 +5,7 @@ com.zlt zlt-commons - 5.5.0 + 5.6.0 4.0.0 jar diff --git a/zlt-commons/zlt-zookeeper-spring-boot-starter/pom.xml b/zlt-commons/zlt-zookeeper-spring-boot-starter/pom.xml index dd8fdde6b37bcedabf16837469283b17637ab0ee..cd7c6b76f37111b8bc16b7dc54a909f2d7f3f246 100644 --- a/zlt-commons/zlt-zookeeper-spring-boot-starter/pom.xml +++ b/zlt-commons/zlt-zookeeper-spring-boot-starter/pom.xml @@ -5,7 +5,7 @@ com.zlt zlt-commons - 5.5.0 + 5.6.0 4.0.0 jar diff --git a/zlt-config/pom.xml b/zlt-config/pom.xml index 23b1ab06a7484fc0bc81c0b86bd6c056497b0543..cebc4513a4f6d8c6ba57648cdd659edd63e491e7 100644 --- a/zlt-config/pom.xml +++ b/zlt-config/pom.xml @@ -5,7 +5,7 @@ com.zlt central-platform - 5.5.0 + 5.6.0 4.0.0 jar diff --git a/zlt-demo/dubbo-demo/pom.xml b/zlt-demo/dubbo-demo/pom.xml index a3c170bbbf0aa6f9f518c1b1f887a2feea8afd07..1c1a07e762b0dd30dbf0a64efd2038fc5ecacb29 100644 --- a/zlt-demo/dubbo-demo/pom.xml +++ b/zlt-demo/dubbo-demo/pom.xml @@ -6,7 +6,7 @@ com.zlt zlt-demo - 5.5.0 + 5.6.0 dubbo-demo diff --git a/zlt-demo/pom.xml b/zlt-demo/pom.xml index b08687e6d621d422b7441d9337b12b8e0472117b..fc979432fff222cb29f16e391123fd6bf69a28d4 100644 --- a/zlt-demo/pom.xml +++ b/zlt-demo/pom.xml @@ -4,7 +4,7 @@ com.zlt central-platform - 5.5.0 + 5.6.0 zlt-demo pom diff --git a/zlt-demo/resources-server-demo/pom.xml b/zlt-demo/resources-server-demo/pom.xml index a27d77849f83a4a67a4f515c4b69f317178d0794..746ea4e64454de98dd89427eaaf17b39630850e4 100644 --- a/zlt-demo/resources-server-demo/pom.xml +++ b/zlt-demo/resources-server-demo/pom.xml @@ -6,7 +6,7 @@ com.zlt zlt-demo - 5.5.0 + 5.6.0 resources-server-demo diff --git a/zlt-demo/rocketmq-demo/pom.xml b/zlt-demo/rocketmq-demo/pom.xml index ae13512551ca32d857f23883b6de4bb1b8925eeb..5f898f4a61b7f86186ac6e1713f1bd4868b0aef8 100644 --- a/zlt-demo/rocketmq-demo/pom.xml +++ b/zlt-demo/rocketmq-demo/pom.xml @@ -4,7 +4,7 @@ com.zlt zlt-demo - 5.5.0 + 5.6.0 rocketmq-demo pom diff --git a/zlt-demo/rocketmq-demo/rocketmq-consume/pom.xml b/zlt-demo/rocketmq-demo/rocketmq-consume/pom.xml index 9a0093eb598e7d348edf38a22b10b0d50c6bc37c..6ac2c1f0bde9aed3ab1c0619d19ecfdb0f2820ca 100644 --- a/zlt-demo/rocketmq-demo/rocketmq-consume/pom.xml +++ b/zlt-demo/rocketmq-demo/rocketmq-consume/pom.xml @@ -4,7 +4,7 @@ com.zlt rocketmq-demo - 5.5.0 + 5.6.0 rocketmq-consume rocketMQ消费者demo diff --git a/zlt-demo/rocketmq-demo/rocketmq-produce/pom.xml b/zlt-demo/rocketmq-demo/rocketmq-produce/pom.xml index f6d7cb791fcf13e67dd0b3356f2eda8830dfbd23..52d570c0516f8d0b3802fb2585c6c7fba10fd6de 100644 --- a/zlt-demo/rocketmq-demo/rocketmq-produce/pom.xml +++ b/zlt-demo/rocketmq-demo/rocketmq-produce/pom.xml @@ -4,7 +4,7 @@ com.zlt rocketmq-demo - 5.5.0 + 5.6.0 rocketmq-produce rocketMQ生产者demo diff --git a/zlt-demo/rocketmq-demo/rocketmq-transactional/pom.xml b/zlt-demo/rocketmq-demo/rocketmq-transactional/pom.xml index 9093b84725dd3df7c72c434bf149a73f582bff7b..f82b2e2ae5e572150b90de5193d6cead4aea0429 100644 --- a/zlt-demo/rocketmq-demo/rocketmq-transactional/pom.xml +++ b/zlt-demo/rocketmq-demo/rocketmq-transactional/pom.xml @@ -4,7 +4,7 @@ com.zlt rocketmq-demo - 5.5.0 + 5.6.0 rocketmq-transactional rocketMQ事务消息demo diff --git a/zlt-demo/seata-demo/account-service/pom.xml b/zlt-demo/seata-demo/account-service/pom.xml index 593497a667721e0efcb2c030128c5b24c2eaa9ae..25508c7ff68531c0f2c1270b3243ee9d8d77179d 100644 --- a/zlt-demo/seata-demo/account-service/pom.xml +++ b/zlt-demo/seata-demo/account-service/pom.xml @@ -5,7 +5,7 @@ com.zlt seata-demo - 5.5.0 + 5.6.0 account-service diff --git a/zlt-demo/seata-demo/business-service/pom.xml b/zlt-demo/seata-demo/business-service/pom.xml index 5aa2ce8c15145015a5d42d4f4098218799951b67..85172f6500e429366408228d715858fba59f1345 100644 --- a/zlt-demo/seata-demo/business-service/pom.xml +++ b/zlt-demo/seata-demo/business-service/pom.xml @@ -5,7 +5,7 @@ com.zlt seata-demo - 5.5.0 + 5.6.0 business-service diff --git a/zlt-demo/seata-demo/order-service/pom.xml b/zlt-demo/seata-demo/order-service/pom.xml index 53602df3c20203d80d39f002cf12dcd526d92fde..fb1cfd99592be58ebdea8f3f82236f148cfb8141 100644 --- a/zlt-demo/seata-demo/order-service/pom.xml +++ b/zlt-demo/seata-demo/order-service/pom.xml @@ -5,7 +5,7 @@ com.zlt seata-demo - 5.5.0 + 5.6.0 order-service diff --git a/zlt-demo/seata-demo/pom.xml b/zlt-demo/seata-demo/pom.xml index 8944485afbb3a78a6e7b9272ada8ec86f65d646d..d85db458790a103fd0899083dc05dc578ede5d33 100644 --- a/zlt-demo/seata-demo/pom.xml +++ b/zlt-demo/seata-demo/pom.xml @@ -4,7 +4,7 @@ com.zlt zlt-demo - 5.5.0 + 5.6.0 seata-demo seata分布式事务demo diff --git a/zlt-demo/seata-demo/seata-common-starter/pom.xml b/zlt-demo/seata-demo/seata-common-starter/pom.xml index 14adda14a03a5731d6876b2ef72b0d775b0a7064..8559747647e80088219daa427c67bb5ffc9d5fe7 100644 --- a/zlt-demo/seata-demo/seata-common-starter/pom.xml +++ b/zlt-demo/seata-demo/seata-common-starter/pom.xml @@ -5,7 +5,7 @@ com.zlt seata-demo - 5.5.0 + 5.6.0 seata-common-starter diff --git a/zlt-demo/seata-demo/storage-service/pom.xml b/zlt-demo/seata-demo/storage-service/pom.xml index 816165b9823e9bc319a3de1f9430df4a32f94823..3a40b97207ec06b74bb8d9be7449e7aae9a92323 100644 --- a/zlt-demo/seata-demo/storage-service/pom.xml +++ b/zlt-demo/seata-demo/storage-service/pom.xml @@ -5,7 +5,7 @@ com.zlt seata-demo - 5.5.0 + 5.6.0 storage-service diff --git a/zlt-demo/sharding-jdbc-demo/pom.xml b/zlt-demo/sharding-jdbc-demo/pom.xml index d88e4acb762c880268642b5c26a654400e27282b..2aa24731bba0ac562164af6a999a9d50ef8a4113 100644 --- a/zlt-demo/sharding-jdbc-demo/pom.xml +++ b/zlt-demo/sharding-jdbc-demo/pom.xml @@ -4,7 +4,7 @@ com.zlt zlt-demo - 5.5.0 + 5.6.0 sharding-jdbc-demo sharding-jdbc分库分表demo diff --git a/zlt-demo/sso-demo/oidc-sso/pom.xml b/zlt-demo/sso-demo/oidc-sso/pom.xml index d37a983aad36a0e308aebfd64479f0897285dd48..b85eb0827440f8d1d5b2f8483b3dd35c792f49c8 100644 --- a/zlt-demo/sso-demo/oidc-sso/pom.xml +++ b/zlt-demo/sso-demo/oidc-sso/pom.xml @@ -4,7 +4,7 @@ com.zlt sso-demo - 5.5.0 + 5.6.0 oidc-sso OIDC协议单点登录demo diff --git a/zlt-demo/sso-demo/pom.xml b/zlt-demo/sso-demo/pom.xml index 58a3523c362a01544cab1c9b7a7ab4d1e106dfd0..ff666f52bd21479dd70e6798597753a5ea4280b4 100644 --- a/zlt-demo/sso-demo/pom.xml +++ b/zlt-demo/sso-demo/pom.xml @@ -4,7 +4,7 @@ com.zlt zlt-demo - 5.5.0 + 5.6.0 sso-demo pom diff --git a/zlt-demo/sso-demo/ss-sso/pom.xml b/zlt-demo/sso-demo/ss-sso/pom.xml index ef6cdc4332b680468264fd758c48d2b5e00163b8..cbc27268fd5ee4ed9a8b6bd51607a2186fca4186 100644 --- a/zlt-demo/sso-demo/ss-sso/pom.xml +++ b/zlt-demo/sso-demo/ss-sso/pom.xml @@ -4,7 +4,7 @@ com.zlt sso-demo - 5.5.0 + 5.6.0 ss-sso springSecurity单点登录demo diff --git a/zlt-demo/sso-demo/web-sso/pom.xml b/zlt-demo/sso-demo/web-sso/pom.xml index 9d5793f1c29943824280606b38f3dcfabb243fbc..190fdbf8f91bbfa86e9c74f4404afaac9dd26e86 100644 --- a/zlt-demo/sso-demo/web-sso/pom.xml +++ b/zlt-demo/sso-demo/web-sso/pom.xml @@ -4,7 +4,7 @@ com.zlt sso-demo - 5.5.0 + 5.6.0 web-sso 前后端分离单点登录demo diff --git a/zlt-demo/txlcn-demo/pom.xml b/zlt-demo/txlcn-demo/pom.xml index c0d573f38c42a60b83db46dee68304a60e7dcd6d..494d258cad884d2168bb8cf8f0c074b5fa1c2f83 100644 --- a/zlt-demo/txlcn-demo/pom.xml +++ b/zlt-demo/txlcn-demo/pom.xml @@ -4,7 +4,7 @@ com.zlt zlt-demo - 5.5.0 + 5.6.0 txlcn-demo txlcn分布式事务demo diff --git a/zlt-demo/txlcn-demo/txlcn-demo-common/pom.xml b/zlt-demo/txlcn-demo/txlcn-demo-common/pom.xml index 711d7269b12deed429e0f056ea4e56fd86ee6126..c3f6c452e6faa67dc4a7629bd417660ddf21c125 100644 --- a/zlt-demo/txlcn-demo/txlcn-demo-common/pom.xml +++ b/zlt-demo/txlcn-demo/txlcn-demo-common/pom.xml @@ -4,7 +4,7 @@ com.zlt txlcn-demo - 5.5.0 + 5.6.0 txlcn-demo-common demo-common diff --git a/zlt-demo/txlcn-demo/txlcn-demo-spring-service-a/pom.xml b/zlt-demo/txlcn-demo/txlcn-demo-spring-service-a/pom.xml index 2ceff021cc9cb9250584cfb7000c8dfe2511a6a3..da9b422d6f820d1be7b7ffb0c08afe42eeb7b04e 100644 --- a/zlt-demo/txlcn-demo/txlcn-demo-spring-service-a/pom.xml +++ b/zlt-demo/txlcn-demo/txlcn-demo-spring-service-a/pom.xml @@ -3,7 +3,7 @@ com.zlt txlcn-demo - 5.5.0 + 5.6.0 4.0.0 diff --git a/zlt-demo/txlcn-demo/txlcn-demo-spring-service-a/src/main/java/org/txlcn/demo/ServiceAApplication.java b/zlt-demo/txlcn-demo/txlcn-demo-spring-service-a/src/main/java/org/txlcn/demo/ServiceAApplication.java index ea86fbf6e3e741b792455b24917c20b7ef8988fa..cdbd24a5e3d862760fb0141c2d0d6ac6cfc3b83a 100644 --- a/zlt-demo/txlcn-demo/txlcn-demo-spring-service-a/src/main/java/org/txlcn/demo/ServiceAApplication.java +++ b/zlt-demo/txlcn-demo/txlcn-demo-spring-service-a/src/main/java/org/txlcn/demo/ServiceAApplication.java @@ -1,5 +1,6 @@ package org.txlcn.demo; +import com.central.common.lb.annotation.EnableFeignInterceptor; import com.codingapi.txlcn.tc.config.EnableDistributedTransaction; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -14,6 +15,7 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient @EnableDistributedTransaction +@EnableFeignInterceptor public class ServiceAApplication { public static void main(String[] args) { SpringApplication.run(ServiceAApplication.class, args); diff --git a/zlt-demo/txlcn-demo/txlcn-demo-spring-service-b/pom.xml b/zlt-demo/txlcn-demo/txlcn-demo-spring-service-b/pom.xml index e4c58cc31e1a618f5d4c29535be930b95f08cedc..3b3ddbf4578eb51ec9be76122e70a2ad715ece2b 100644 --- a/zlt-demo/txlcn-demo/txlcn-demo-spring-service-b/pom.xml +++ b/zlt-demo/txlcn-demo/txlcn-demo-spring-service-b/pom.xml @@ -3,7 +3,7 @@ com.zlt txlcn-demo - 5.5.0 + 5.6.0 4.0.0 txlcn-demo-spring-service-b diff --git a/zlt-demo/txlcn-demo/txlcn-demo-spring-service-c/pom.xml b/zlt-demo/txlcn-demo/txlcn-demo-spring-service-c/pom.xml index 90f3b7d64e543f35fff318b8051c5683cbd219ae..38ba0aaa1a6510b4311e82c7dd32cf480cf9d3dc 100644 --- a/zlt-demo/txlcn-demo/txlcn-demo-spring-service-c/pom.xml +++ b/zlt-demo/txlcn-demo/txlcn-demo-spring-service-c/pom.xml @@ -3,7 +3,7 @@ com.zlt txlcn-demo - 5.5.0 + 5.6.0 4.0.0 txlcn-demo-spring-service-c diff --git a/zlt-demo/websocket-demo/pom.xml b/zlt-demo/websocket-demo/pom.xml index eebf6a0838b142da79713dc9827f38800f07f3d1..5826519c03ffe49c0d7ea4a8bd3e776de8addf45 100644 --- a/zlt-demo/websocket-demo/pom.xml +++ b/zlt-demo/websocket-demo/pom.xml @@ -6,7 +6,7 @@ com.zlt zlt-demo - 5.5.0 + 5.6.0 websocket-demo diff --git a/zlt-doc/sql/oauth-center.sql b/zlt-doc/sql/oauth-center.sql index 6405352c65e8bf63149d6518a8c86c4765796a49..51227fb9b650b1b469cb66351b2d1364d399bf7d 100644 --- a/zlt-doc/sql/oauth-center.sql +++ b/zlt-doc/sql/oauth-center.sql @@ -24,12 +24,13 @@ CREATE TABLE `oauth_client_details` ( `client_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '应用名称', `support_id_token` tinyint(1) DEFAULT 1 COMMENT '是否支持id_token', `id_token_validity` int(11) DEFAULT 60 COMMENT 'id_token有效期', + `creator_id` int(11) COMMENT '创建人id', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of oauth_client_details -- ---------------------------- -INSERT INTO `oauth_client_details` VALUES (1, 'webApp', NULL, '$2a$10$06msMGYRH8nrm4iVnKFNKOoddB8wOwymVhbUzw/d3ZixD7Nq8ot72', 'webApp', 'app', 'authorization_code,password,refresh_token,client_credentials,implicit,password_code,openId,mobile_password', NULL, NULL, 3600, NULL, '{"LOGOUT_NOTIFY_URL_LIST":"http://127.0.0.1:8082/logoutNotify"}', 'true', NULL, NULL, 'pc端', 1, 60); +INSERT INTO `oauth_client_details` VALUES (1, 'webApp', NULL, '$2a$10$06msMGYRH8nrm4iVnKFNKOoddB8wOwymVhbUzw/d3ZixD7Nq8ot72', 'webApp', 'app', 'authorization_code,password,refresh_token,client_credentials,implicit,password_code,openId,mobile_password', 'http://127.0.0.1:8082/callback.html', NULL, 3600, NULL, '{"LOGOUT_NOTIFY_URL_LIST":"http://127.0.0.1:8082/logoutNotify"}', 'true', NULL, NULL, 'pc端', 1, 60); INSERT INTO `oauth_client_details` VALUES (2, 'app', NULL, '$2a$10$i3F515wEDiB4Gvj9ym9Prui0dasRttEUQ9ink4Wpgb4zEDCAlV8zO', 'app', 'app', 'authorization_code,password,refresh_token', 'http://127.0.0.1:8081/callback.html', NULL, 3600, NULL, '{"LOGOUT_NOTIFY_URL_LIST":"http://127.0.0.1:8081/logoutNotify"}', 'true', NULL, NULL, '移动端', 1, 60); INSERT INTO `oauth_client_details` VALUES (3, 'zlt', NULL, '$2a$10$/o.wuORzVcXaezmYVzwYMuoY7qeWXBALwQmkskXD/7C6rqfCyPrna', 'zlt', 'all', 'authorization_code,password,refresh_token,client_credentials', 'http://127.0.0.1:8080/singleLogin', NULL, 3600, 28800, '{}', 'true', '2018-12-27 00:50:30', '2018-12-27 00:50:30', '第三方应用', 1, 60); \ No newline at end of file diff --git a/zlt-doc/sql/user-center.sql b/zlt-doc/sql/user-center.sql index 9a48ed22262cb143a03af5ee3a312e9872ec49fc..e40c7d037e77e4349bb6aa9c5699e23650e2fbf7 100644 --- a/zlt-doc/sql/user-center.sql +++ b/zlt-doc/sql/user-center.sql @@ -20,6 +20,7 @@ CREATE TABLE `sys_user` ( `company` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL, `open_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL, `is_del` tinyint(1) NOT NULL DEFAULT 0, + `creator_id` int(11) COMMENT '创建人id', PRIMARY KEY (`id`), KEY `idx_username` (`username`), KEY `idx_mobile` (`mobile`), @@ -29,18 +30,18 @@ CREATE TABLE `sys_user` ( -- ---------------------------- -- Records of sys_user -- ---------------------------- -INSERT INTO `sys_user` VALUES (1, 'admin', '$2a$10$TJkwVdlpbHKnV45.nBxbgeFHmQRmyWlshg94lFu2rKxVtT2OMniDO', '管理员', 'http://pkqtmn0p1.bkt.clouddn.com/头像.png', '18888888888', 0, 1, 'APP', '2017-11-17 16:56:59', '2019-01-08 17:05:47', 'ENGJ', '123', 0); -INSERT INTO `sys_user` VALUES (2, 'user', '$2a$10$OhfZv4VQJiqMEukpf1qXA.V7UMiHjr86g6lJqPvKUoHwrPk35steG', '体验用户', 'http://payo7kq4i.bkt.clouddn.com/QQ%E5%9B%BE%E7%89%8720180819191900.jpg', '18888888887', 1, 1, 'APP', '2017-11-17 16:56:59', NULL, 'ENGJ', NULL, 0); -INSERT INTO `sys_user` VALUES (3, 'test', '$2a$10$RD18sHNphJMmcuLuUX/Np.IV/7Ngbjd3Jtj3maFLpwaA6KaHVqPtq', '测试账户', 'http://payo7kq4i.bkt.clouddn.com/QQ%E5%9B%BE%E7%89%8720180819191900.jpg', '13851539156', 0, 0, 'APP', '2017-11-17 16:56:59', '2018-09-07 03:27:40', 'ENGJ', NULL, 0); -INSERT INTO `sys_user` VALUES (4, '1', '$2a$10$9vLdwXBZaAPy/hmzEDf.M.YbrsKWGG21nqWq17/EwWPBi65GDivLa', '11', NULL, '13530151800', 1, 1, 'APP', '2018-09-07 14:20:51', '2018-11-15 01:45:36', 'YCC', NULL, 0); -INSERT INTO `sys_user` VALUES (5, '12', '$2a$10$cgRGZ0uuIAoKuwBoTWmz7eJzP4RUEr688VlnpZ4BTCz2RZEt0jrIe', '12', NULL, '17587132062', 0, 1, 'APP', '2018-09-08 04:52:25', '2018-09-16 01:48:00', 'YCC', NULL, 0); -INSERT INTO `sys_user` VALUES (6, 'abc1', '$2a$10$pzvn4TfBh2oFZJbtagovFe56ZTUlTaawPnx0Yz2PeqGex0xbddAGu', 'abc', NULL, '12345678901', 0, 1, 'APP', '2018-09-11 08:02:25', '2018-09-14 06:49:54', 'YCC', NULL, 0); -INSERT INTO `sys_user` VALUES (7, '234', '$2a$10$FxFvGGSi2RCe4lm5V.G0Feq6szh5ArMz.8Mzm08zQlkA.VgE9GFbm', 'ddd', NULL, '13245678906', 0, 1, 'APP', '2018-09-19 01:33:54', '2018-09-19 01:33:54', 'JFSC', NULL, 1); -INSERT INTO `sys_user` VALUES (8, 'tester', '$2a$10$VUfknatgKIoZJYDLIesrrO5Vg8Djw5ON2oDWeXyC24TZ6Ca/TWiye', 'tester', NULL, '12345678901', 0, 1, 'APP', '2018-09-19 04:52:01', '2018-11-16 22:12:04', 'JFSC', NULL, 1); -INSERT INTO `sys_user` VALUES (9, '11111111111111111111', '$2a$10$DNaUDpCHKZI0V9w.R3wBaeD/gGOQDYjgC5fhju7bQLfIkqsZV61pi', 'cute', 'http://payo7kq4i.bkt.clouddn.com/C:\\Users\\GAOY91\\Pictures\\79f0f736afc37931a921fd59e3c4b74543a91170.jpg', '15599999991', 1, 1, 'APP', '2018-09-19 04:57:39', NULL, 'JFSC', NULL, 1); -INSERT INTO `sys_user` VALUES (10, 'test001', '123456', 'test001', NULL, '11111111', 0, 1, 'BACKEND', '2018-09-12 13:50:57', '2019-01-07 13:04:18', NULL, NULL, 1); -INSERT INTO `sys_user` VALUES (11, 'test002', '123456', 'test002', NULL, '22222222', 0, 1, 'BACKEND', '2018-09-11 08:02:25', '2018-09-14 06:49:54', NULL, NULL, 1); -INSERT INTO `sys_user` VALUES (12, '123', '$2a$10$PgngbC9pQWDT.ZG37fvV6e8Zi0C3mQOVMJJE35.XQULnppSEWhyPK', '12', NULL, '1', 0, 1, 'BACKEND', '2019-01-19 13:44:02', '2019-01-19 13:44:02', NULL, NULL, 1); +INSERT INTO `sys_user` VALUES (1, 'admin', '$2a$10$TJkwVdlpbHKnV45.nBxbgeFHmQRmyWlshg94lFu2rKxVtT2OMniDO', '管理员', 'http://pkqtmn0p1.bkt.clouddn.com/头像.png', '18888888888', 0, 1, 'APP', '2017-11-17 16:56:59', '2019-01-08 17:05:47', 'ENGJ', '123', 0, 1); +INSERT INTO `sys_user` VALUES (2, 'user', '$2a$10$OhfZv4VQJiqMEukpf1qXA.V7UMiHjr86g6lJqPvKUoHwrPk35steG', '体验用户', 'http://payo7kq4i.bkt.clouddn.com/QQ%E5%9B%BE%E7%89%8720180819191900.jpg', '18888888887', 1, 1, 'APP', '2017-11-17 16:56:59', NULL, 'ENGJ', NULL, 0, 1); +INSERT INTO `sys_user` VALUES (3, 'test', '$2a$10$RD18sHNphJMmcuLuUX/Np.IV/7Ngbjd3Jtj3maFLpwaA6KaHVqPtq', '测试账户', 'http://payo7kq4i.bkt.clouddn.com/QQ%E5%9B%BE%E7%89%8720180819191900.jpg', '13851539156', 0, 0, 'APP', '2017-11-17 16:56:59', '2018-09-07 03:27:40', 'ENGJ', NULL, 0, 1); +INSERT INTO `sys_user` VALUES (4, '1', '$2a$10$9vLdwXBZaAPy/hmzEDf.M.YbrsKWGG21nqWq17/EwWPBi65GDivLa', '11', NULL, '13530151800', 1, 1, 'APP', '2018-09-07 14:20:51', '2018-11-15 01:45:36', 'YCC', NULL, 0, 1); +INSERT INTO `sys_user` VALUES (5, '12', '$2a$10$cgRGZ0uuIAoKuwBoTWmz7eJzP4RUEr688VlnpZ4BTCz2RZEt0jrIe', '12', NULL, '17587132062', 0, 1, 'APP', '2018-09-08 04:52:25', '2018-09-16 01:48:00', 'YCC', NULL, 0, 1); +INSERT INTO `sys_user` VALUES (6, 'abc1', '$2a$10$pzvn4TfBh2oFZJbtagovFe56ZTUlTaawPnx0Yz2PeqGex0xbddAGu', 'abc', NULL, '12345678901', 0, 1, 'APP', '2018-09-11 08:02:25', '2018-09-14 06:49:54', 'YCC', NULL, 0, 1); +INSERT INTO `sys_user` VALUES (7, '234', '$2a$10$FxFvGGSi2RCe4lm5V.G0Feq6szh5ArMz.8Mzm08zQlkA.VgE9GFbm', 'ddd', NULL, '13245678906', 0, 1, 'APP', '2018-09-19 01:33:54', '2018-09-19 01:33:54', 'JFSC', NULL, 1, 1); +INSERT INTO `sys_user` VALUES (8, 'tester', '$2a$10$VUfknatgKIoZJYDLIesrrO5Vg8Djw5ON2oDWeXyC24TZ6Ca/TWiye', 'tester', NULL, '12345678901', 0, 1, 'APP', '2018-09-19 04:52:01', '2018-11-16 22:12:04', 'JFSC', NULL, 1, 1); +INSERT INTO `sys_user` VALUES (9, '11111111111111111111', '$2a$10$DNaUDpCHKZI0V9w.R3wBaeD/gGOQDYjgC5fhju7bQLfIkqsZV61pi', 'cute', 'http://payo7kq4i.bkt.clouddn.com/C:\\Users\\GAOY91\\Pictures\\79f0f736afc37931a921fd59e3c4b74543a91170.jpg', '15599999991', 1, 1, 'APP', '2018-09-19 04:57:39', NULL, 'JFSC', NULL, 1, 1); +INSERT INTO `sys_user` VALUES (10, 'test001', '123456', 'test001', NULL, '11111111', 0, 1, 'BACKEND', '2018-09-12 13:50:57', '2019-01-07 13:04:18', NULL, NULL, 1, 1); +INSERT INTO `sys_user` VALUES (11, 'test002', '123456', 'test002', NULL, '22222222', 0, 1, 'BACKEND', '2018-09-11 08:02:25', '2018-09-14 06:49:54', NULL, NULL, 1, 1); +INSERT INTO `sys_user` VALUES (12, '123', '$2a$10$PgngbC9pQWDT.ZG37fvV6e8Zi0C3mQOVMJJE35.XQULnppSEWhyPK', '12', NULL, '1', 0, 1, 'BACKEND', '2019-01-19 13:44:02', '2019-01-19 13:44:02', NULL, NULL, 1, 1); -- ---------------------------- -- Table structure for sys_role @@ -50,9 +51,11 @@ CREATE TABLE `sys_role` ( `id` int(11) NOT NULL AUTO_INCREMENT, `code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色code', `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色名', + `data_scope` varchar(32) DEFAULT 'ALL' comment '数据权限范围配置:ALL/全部权限,CREATOR/创建者权限', `create_time` datetime(0) NULL DEFAULT NULL, `update_time` datetime(0) NULL DEFAULT NULL, `tenant_id` varchar(32) DEFAULT '' COMMENT '租户字段', + `creator_id` int(11) COMMENT '创建人id', PRIMARY KEY (`id`), KEY `idx_code` (`code`), KEY `idx_tenant_id` (`tenant_id`) @@ -61,11 +64,11 @@ CREATE TABLE `sys_role` ( -- ---------------------------- -- Records of sys_role -- ---------------------------- -INSERT INTO `sys_role` VALUES (1, 'ADMIN', '管理员', '2017-11-17 16:56:59', '2018-09-19 09:39:10', 'webApp'); -INSERT INTO `sys_role` VALUES (2, 'test', '测试', '2018-09-17 10:15:51', '2018-11-15 01:49:14', 'webApp'); -INSERT INTO `sys_role` VALUES (3, '11', '11', '2018-11-15 01:49:19', '2018-11-15 01:49:19', 'webApp'); -INSERT INTO `sys_role` VALUES (4, 'shop_admin', '商城管理员', '2019-08-06 20:02:12.604', '2019-08-06 20:02:12.604', 'zlt'); -INSERT INTO `sys_role` VALUES (5, 'app_admin', '移动管理员', '2019-08-06 20:02:12.604', '2019-08-06 20:02:12.604', 'app'); +INSERT INTO `sys_role` VALUES (1, 'ADMIN', '管理员', 'ALL', '2017-11-17 16:56:59', '2018-09-19 09:39:10', 'webApp', 1); +INSERT INTO `sys_role` VALUES (2, 'test', '测试', 'ALL', '2018-09-17 10:15:51', '2018-11-15 01:49:14', 'webApp', 1); +INSERT INTO `sys_role` VALUES (3, '11', '11', 'ALL', '2018-11-15 01:49:19', '2018-11-15 01:49:19', 'webApp', 1); +INSERT INTO `sys_role` VALUES (4, 'shop_admin', '商城管理员', 'ALL', '2019-08-06 20:02:12.604', '2019-08-06 20:02:12.604', 'zlt', 1); +INSERT INTO `sys_role` VALUES (5, 'app_admin', '移动管理员', 'ALL', '2019-08-06 20:02:12.604', '2019-08-06 20:02:12.604', 'app', 1); -- ---------------------------- -- Table structure for sys_role_user @@ -111,6 +114,7 @@ CREATE TABLE `sys_menu` ( `type` tinyint(1) NOT NULL, `hidden` tinyint(1) NOT NULL DEFAULT 0, `tenant_id` varchar(32) DEFAULT '' COMMENT '租户字段', + `creator_id` int(11) COMMENT '创建人id', PRIMARY KEY (`id`), KEY `idx_parent_id` (`parent_id`), KEY `idx_tenant_id` (`tenant_id`) @@ -119,39 +123,39 @@ CREATE TABLE `sys_menu` ( -- ---------------------------- -- Records of sys_menu -- ---------------------------- -INSERT INTO `sys_menu` VALUES (2, 12, '用户管理', '#!user', 'system/user.html', NULL, 'layui-icon-friends', 2, '2017-11-17 16:56:59', '2018-09-19 11:26:14', 1, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (3, 12, '角色管理', '#!role', 'system/role.html', NULL, 'layui-icon-user', 3, '2017-11-17 16:56:59', '2019-01-14 15:34:40', 1, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (4, 12, '菜单管理', '#!menus', 'system/menus.html', NULL, 'layui-icon-menu-fill', 4, '2017-11-17 16:56:59', '2018-09-03 02:23:47', 1, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (9, 37, '文件中心', '#!files', 'files/files.html', NULL, 'layui-icon-file', 3, '2017-11-17 16:56:59', '2019-01-17 20:18:44', 1, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (10, 37, '文档中心', '#!swagger', 'http://127.0.0.1:9900/doc.html', NULL, 'layui-icon-app', 4, '2017-11-17 16:56:59', '2019-01-17 20:18:48', 1, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (11, 12, '我的信息', '#!myInfo', 'system/myInfo.html', NULL, 'layui-icon-login-qq', 10, '2017-11-17 16:56:59', '2018-09-02 06:12:24', 1, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (12, -1, '认证管理', 'javascript:;', '', NULL, 'layui-icon-set', 1, '2017-11-17 16:56:59', '2018-12-13 15:02:49', 1, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (35, 12, '应用管理', '#!app', 'attestation/app.html', NULL, 'layui-icon-link', 5, '2017-11-17 16:56:59', '2019-01-14 15:35:15', 1, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (37, -1, '系统管理', 'javascript:;', '', NULL, 'layui-icon-set', 2, '2018-08-25 10:41:58', '2019-01-23 14:01:58', 1, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (62, 63, '应用监控', '#!admin', 'http://127.0.0.1:6500/#/wallboard', NULL, 'layui-icon-chart-screen', 4, '2019-01-08 15:32:19', '2019-01-17 20:22:44', 1, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (63, -1, '系统监控', 'javascript:;', '', NULL, 'layui-icon-set', 2, '2019-01-10 18:35:05', '2019-01-10 18:35:05', 1, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (64, 63, '系统日志', '#!sysLog', 'log/sysLog.html', NULL, 'layui-icon-file-b', 1, '2019-01-10 18:35:55', '2019-01-12 00:27:20', 1, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (65, 37, '代码生成器', '#!generator', 'generator/list.html', NULL, 'layui-icon-template', 2, '2019-01-14 00:47:36', '2019-01-23 14:06:31', 1, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (66, 63, '慢查询SQL', '#!slowQueryLog', 'log/slowQueryLog.html', NULL, 'layui-icon-snowflake', 2, '2019-01-16 12:00:27', '2019-01-16 15:32:31', 1, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (67, -1, '任务管理', '#!job', 'http://127.0.0.1:8081/', NULL, 'layui-icon-date', 3, '2019-01-17 20:18:22', '2019-01-23 14:01:53', 1, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (68, 63, '应用吞吐量监控', '#!sentinel', 'http://127.0.0.1:6999', NULL, 'layui-icon-chart', 5, '2019-01-22 16:31:55', '2019-01-22 16:34:03', 1, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (69, 37, '配置中心', '#!nacos', 'http://127.0.0.1:8848/nacos', NULL, 'layui-icon-tabs', 1, '2019-01-23 14:06:10', '2019-01-23 14:06:10', 1, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (70, 63, 'APM监控', '#!apm', 'http://127.0.0.1:8080', null, 'layui-icon-engine', 6, '2019-02-27 10:31:55', '2019-02-27 10:31:55', 1, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (71, -1, '搜索管理', 'javascript:;', '', NULL, 'layui-icon-set', 3, '2018-08-25 10:41:58', '2019-01-23 15:07:07', 1, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (72, 71, '索引管理', '#!index', 'search/index_manager.html', NULL, 'layui-icon-template', 1, '2019-01-10 18:35:55', '2019-01-12 00:27:20', 1, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (73, 71, '用户搜索', '#!userSearch', 'search/user_search.html', NULL, 'layui-icon-user', 2, '2019-01-10 18:35:55', '2019-01-12 00:27:20', 1, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (74, 12, 'Token管理', '#!tokens', 'system/tokens.html', NULL, 'layui-icon-unlink', 6, '2019-07-11 16:56:59', '2019-07-11 16:56:59', 1, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (75, 2, '用户列表', '/api-user/users', 'user-list', 'GET', null, 1, '2019-07-29 16:56:59', '2019-07-29 16:56:59', 2, 0, 'webApp'); +INSERT INTO `sys_menu` VALUES (2, 12, '用户管理', '#!user', 'system/user.html', NULL, 'layui-icon-friends', 2, '2017-11-17 16:56:59', '2018-09-19 11:26:14', 1, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (3, 12, '角色管理', '#!role', 'system/role.html', NULL, 'layui-icon-user', 3, '2017-11-17 16:56:59', '2019-01-14 15:34:40', 1, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (4, 12, '菜单管理', '#!menus', 'system/menus.html', NULL, 'layui-icon-menu-fill', 4, '2017-11-17 16:56:59', '2018-09-03 02:23:47', 1, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (9, 37, '文件中心', '#!files', 'files/files.html', NULL, 'layui-icon-file', 3, '2017-11-17 16:56:59', '2019-01-17 20:18:44', 1, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (10, 37, '文档中心', '#!swagger', 'http://127.0.0.1:9900/doc.html', NULL, 'layui-icon-app', 4, '2017-11-17 16:56:59', '2019-01-17 20:18:48', 1, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (11, 12, '我的信息', '#!myInfo', 'system/myInfo.html', NULL, 'layui-icon-login-qq', 10, '2017-11-17 16:56:59', '2018-09-02 06:12:24', 1, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (12, -1, '认证管理', 'javascript:;', '', NULL, 'layui-icon-set', 1, '2017-11-17 16:56:59', '2018-12-13 15:02:49', 1, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (35, 12, '应用管理', '#!app', 'attestation/app.html', NULL, 'layui-icon-link', 5, '2017-11-17 16:56:59', '2019-01-14 15:35:15', 1, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (37, -1, '系统管理', 'javascript:;', '', NULL, 'layui-icon-set', 2, '2018-08-25 10:41:58', '2019-01-23 14:01:58', 1, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (62, 63, '应用监控', '#!admin', 'http://127.0.0.1:6500/#/wallboard', NULL, 'layui-icon-chart-screen', 4, '2019-01-08 15:32:19', '2019-01-17 20:22:44', 1, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (63, -1, '系统监控', 'javascript:;', '', NULL, 'layui-icon-set', 2, '2019-01-10 18:35:05', '2019-01-10 18:35:05', 1, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (64, 63, '系统日志', '#!sysLog', 'log/sysLog.html', NULL, 'layui-icon-file-b', 1, '2019-01-10 18:35:55', '2019-01-12 00:27:20', 1, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (65, 37, '代码生成器', '#!generator', 'generator/list.html', NULL, 'layui-icon-template', 2, '2019-01-14 00:47:36', '2019-01-23 14:06:31', 1, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (66, 63, '慢查询SQL', '#!slowQueryLog', 'log/slowQueryLog.html', NULL, 'layui-icon-snowflake', 2, '2019-01-16 12:00:27', '2019-01-16 15:32:31', 1, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (67, -1, '任务管理', '#!job', 'http://127.0.0.1:8081/', NULL, 'layui-icon-date', 3, '2019-01-17 20:18:22', '2019-01-23 14:01:53', 1, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (68, 63, '应用吞吐量监控', '#!sentinel', 'http://127.0.0.1:6999', NULL, 'layui-icon-chart', 5, '2019-01-22 16:31:55', '2019-01-22 16:34:03', 1, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (69, 37, '配置中心', '#!nacos', 'http://127.0.0.1:8848/nacos', NULL, 'layui-icon-tabs', 1, '2019-01-23 14:06:10', '2019-01-23 14:06:10', 1, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (70, 63, 'APM监控', '#!apm', 'http://127.0.0.1:8080', null, 'layui-icon-engine', 6, '2019-02-27 10:31:55', '2019-02-27 10:31:55', 1, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (71, -1, '搜索管理', 'javascript:;', '', NULL, 'layui-icon-set', 3, '2018-08-25 10:41:58', '2019-01-23 15:07:07', 1, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (72, 71, '索引管理', '#!index', 'search/index_manager.html', NULL, 'layui-icon-template', 1, '2019-01-10 18:35:55', '2019-01-12 00:27:20', 1, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (73, 71, '用户搜索', '#!userSearch', 'search/user_search.html', NULL, 'layui-icon-user', 2, '2019-01-10 18:35:55', '2019-01-12 00:27:20', 1, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (74, 12, 'Token管理', '#!tokens', 'system/tokens.html', NULL, 'layui-icon-unlink', 6, '2019-07-11 16:56:59', '2019-07-11 16:56:59', 1, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (75, 2, '用户列表', '/api-user/users', 'user-list', 'GET', null, 1, '2019-07-29 16:56:59', '2019-07-29 16:56:59', 2, 0, 'webApp', 1); INSERT INTO `sys_menu` VALUES (76, 2, '查询用户角色', '/api-user/roles', 'user-roles', 'GET', null, 2, '2019-07-29 16:56:59', '2019-07-29 16:56:59', 2, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (77, 2, '用户添加', '/api-user/users/saveOrUpdate', 'user-btn-add', 'POST', null, 3, '2019-07-29 16:56:59', '2019-07-29 16:56:59', 2, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (78, 2, '用户导出', '/api-user/users/export', 'user-btn-export', 'POST', null, 4, '2019-07-29 16:56:59', '2019-07-29 16:56:59', 2, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (79, 2, '用户导入', '/api-user/users/import', 'user-btn-import', 'POST', null, 5, '2019-07-29 16:56:59', '2019-07-29 16:56:59', 2, 0, 'webApp'); -INSERT INTO `sys_menu` VALUES (80, -1, '用户管理', '#!user', '', NULL, NULL, 1, '2019-08-06 20:02:12.604', '2019-08-06 20:02:12.604', 1, 0, 'zlt'); -INSERT INTO `sys_menu` VALUES (81, -1, '商品管理', '#!product', '', NULL, NULL, 2, '2019-08-06 20:02:12.604', '2019-08-06 20:02:12.604', 1, 0, 'zlt'); -INSERT INTO `sys_menu` VALUES (82, -1, '支付管理', '#!pay', '', NULL, NULL, 3, '2019-08-06 20:02:12.604', '2019-08-06 20:02:12.604', 1, 0, 'zlt'); -INSERT INTO `sys_menu` VALUES (83, -1, '交易管理', '#!trading', '', NULL, NULL, 4, '2019-08-06 20:02:12.604', '2019-08-06 20:02:12.604', 1, 0, 'zlt'); -INSERT INTO `sys_menu` VALUES (84, -1, '系统管理', '#!system', '', NULL, NULL, 1, '2019-08-06 20:02:12.604', '2019-08-06 20:02:12.604', 1, 0, 'app'); -INSERT INTO `sys_menu` VALUES (85, 63, '审计日志', '#!auditLog', 'log/auditLog.html', NULL, 'layui-icon-file-b', 3, '2020-02-04 12:00:27', '2020-02-04 15:32:31', 1, 0, 'webApp'); +INSERT INTO `sys_menu` VALUES (77, 2, '用户添加', '/api-user/users/saveOrUpdate', 'user-btn-add', 'POST', null, 3, '2019-07-29 16:56:59', '2019-07-29 16:56:59', 2, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (78, 2, '用户导出', '/api-user/users/export', 'user-btn-export', 'POST', null, 4, '2019-07-29 16:56:59', '2019-07-29 16:56:59', 2, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (79, 2, '用户导入', '/api-user/users/import', 'user-btn-import', 'POST', null, 5, '2019-07-29 16:56:59', '2019-07-29 16:56:59', 2, 0, 'webApp', 1); +INSERT INTO `sys_menu` VALUES (80, -1, '用户管理', '#!user', '', NULL, NULL, 1, '2019-08-06 20:02:12.604', '2019-08-06 20:02:12.604', 1, 0, 'zlt', 1); +INSERT INTO `sys_menu` VALUES (81, -1, '商品管理', '#!product', '', NULL, NULL, 2, '2019-08-06 20:02:12.604', '2019-08-06 20:02:12.604', 1, 0, 'zlt', 1); +INSERT INTO `sys_menu` VALUES (82, -1, '支付管理', '#!pay', '', NULL, NULL, 3, '2019-08-06 20:02:12.604', '2019-08-06 20:02:12.604', 1, 0, 'zlt', 1); +INSERT INTO `sys_menu` VALUES (83, -1, '交易管理', '#!trading', '', NULL, NULL, 4, '2019-08-06 20:02:12.604', '2019-08-06 20:02:12.604', 1, 0, 'zlt', 1); +INSERT INTO `sys_menu` VALUES (84, -1, '系统管理', '#!system', '', NULL, NULL, 1, '2019-08-06 20:02:12.604', '2019-08-06 20:02:12.604', 1, 0, 'app', 1); +INSERT INTO `sys_menu` VALUES (85, 63, '审计日志', '#!auditLog', 'log/auditLog.html', NULL, 'layui-icon-file-b', 3, '2020-02-04 12:00:27', '2020-02-04 15:32:31', 1, 0, 'webApp', 1); -- ---------------------------- -- Table structure for sys_role_menu diff --git "a/zlt-doc/\347\211\210\346\234\254\345\215\207\347\272\247_sql/\346\227\247\347\211\210\346\234\254\345\215\207\347\272\247v5.6.0.sql" "b/zlt-doc/\347\211\210\346\234\254\345\215\207\347\272\247_sql/\346\227\247\347\211\210\346\234\254\345\215\207\347\272\247v5.6.0.sql" new file mode 100644 index 0000000000000000000000000000000000000000..7fdd13cda23a63bf1e4be56199b5f61ba8b7a850 --- /dev/null +++ "b/zlt-doc/\347\211\210\346\234\254\345\215\207\347\272\247_sql/\346\227\247\347\211\210\346\234\254\345\215\207\347\272\247v5.6.0.sql" @@ -0,0 +1,16 @@ +------------更新语句 +Use `user-center`; +alter table sys_role add data_scope varchar(32) DEFAULT 'ALL' comment '数据权限范围配置:ALL/全部权限,CREATOR/创建者权限'; + +alter table sys_user add `creator_id` int(11) COMMENT '创建人id'; +update sys_user set creator_id = 1; + +alter table sys_role add `creator_id` int(11) COMMENT '创建人id'; +update sys_role set creator_id = 1; + +alter table sys_menu add `creator_id` int(11) COMMENT '创建人id'; +update sys_menu set creator_id = 1; + +Use `oauth-center`; +alter table oauth_client_details add `creator_id` int(11) COMMENT '创建人id'; +update oauth_client_details set creator_id = 1; \ No newline at end of file diff --git a/zlt-gateway/pom.xml b/zlt-gateway/pom.xml index ef97e16a1894c4555590454db37c6bee0ea18ca4..e7ce60b76b45316605120f6f49c9d613aa326181 100644 --- a/zlt-gateway/pom.xml +++ b/zlt-gateway/pom.xml @@ -4,7 +4,7 @@ com.zlt central-platform - 5.5.0 + 5.6.0 zlt-gateway pom diff --git a/zlt-gateway/sc-gateway/pom.xml b/zlt-gateway/sc-gateway/pom.xml index 6ef16f8103bed2e59918b509a6020a1a64b06b13..8fb732332d76118ef83fdddf669f8d0c547185e8 100644 --- a/zlt-gateway/sc-gateway/pom.xml +++ b/zlt-gateway/sc-gateway/pom.xml @@ -4,7 +4,7 @@ com.zlt zlt-gateway - 5.5.0 + 5.6.0 sc-gateway spring cloud gateway网关 diff --git a/zlt-job/job-admin/pom.xml b/zlt-job/job-admin/pom.xml index 7624feee8c73a1be3c210677053e4bed5ffb1107..2ca82608f5d4a975b0c0337613d7ba713379da80 100644 --- a/zlt-job/job-admin/pom.xml +++ b/zlt-job/job-admin/pom.xml @@ -4,7 +4,7 @@ com.zlt zlt-job - 5.5.0 + 5.6.0 job-admin jar diff --git a/zlt-job/job-core/pom.xml b/zlt-job/job-core/pom.xml index 5633149d595b2da82f87e0ce075eee7fb369cf00..e9ab175891b51c7a9c6cc20b221e97ea39270201 100644 --- a/zlt-job/job-core/pom.xml +++ b/zlt-job/job-core/pom.xml @@ -4,7 +4,7 @@ com.zlt zlt-job - 5.5.0 + 5.6.0 job-core jar diff --git a/zlt-job/job-executor-samples/pom.xml b/zlt-job/job-executor-samples/pom.xml index 6448abb795b0a74debdfe9504409a8abb68e2e8b..c5d61d72f4d00ce5263feb8a5db695f788be6512 100644 --- a/zlt-job/job-executor-samples/pom.xml +++ b/zlt-job/job-executor-samples/pom.xml @@ -6,7 +6,7 @@ com.zlt zlt-job - 5.5.0 + 5.6.0 job-executor-samples jar diff --git a/zlt-job/pom.xml b/zlt-job/pom.xml index 793a17f4aee0e0f681a63dbab3a1881f1681ba33..2b0f6e8e7f40d8055595978f8064fc648b453048 100644 --- a/zlt-job/pom.xml +++ b/zlt-job/pom.xml @@ -4,7 +4,7 @@ com.zlt central-platform - 5.5.0 + 5.6.0 zlt-job pom diff --git a/zlt-monitor/log-center/pom.xml b/zlt-monitor/log-center/pom.xml index 4f21ddc3ec81388cead6cd40081186e9a7d84abb..eb2d27bfbd9b7d701091fa1d26c123b11c2ffbbb 100644 --- a/zlt-monitor/log-center/pom.xml +++ b/zlt-monitor/log-center/pom.xml @@ -4,7 +4,7 @@ com.zlt zlt-monitor - 5.5.0 + 5.6.0 log-center diff --git a/zlt-monitor/pom.xml b/zlt-monitor/pom.xml index 8771d30b8940b3a21b791691c95045ee997c56f7..db74570ae155d0ceb530f7f6d07d97215f9dbc91 100644 --- a/zlt-monitor/pom.xml +++ b/zlt-monitor/pom.xml @@ -3,7 +3,7 @@ com.zlt central-platform - 5.5.0 + 5.6.0 zlt-monitor pom diff --git a/zlt-monitor/sc-admin/pom.xml b/zlt-monitor/sc-admin/pom.xml index 96cd442e5988cca3ff402eb36373ad4647948816..58d8b6dbbea6dba65010eb6d1b4d06c3a968d94c 100644 --- a/zlt-monitor/sc-admin/pom.xml +++ b/zlt-monitor/sc-admin/pom.xml @@ -4,7 +4,7 @@ com.zlt zlt-monitor - 5.5.0 + 5.6.0 sc-admin diff --git a/zlt-transaction/pom.xml b/zlt-transaction/pom.xml index 0c16ad7676aada49713c96f1adb1de0fbb31009a..543b5c3c4b48bb96f728ac59196c121f43567545 100644 --- a/zlt-transaction/pom.xml +++ b/zlt-transaction/pom.xml @@ -4,7 +4,7 @@ com.zlt central-platform - 5.5.0 + 5.6.0 zlt-transaction 事务 diff --git a/zlt-transaction/txlcn-tm/pom.xml b/zlt-transaction/txlcn-tm/pom.xml index 446b98656240fd7d64a06a487a19cccbbee7a24e..8830df910c2659fa2cad292b08ba1231f45e0ff8 100644 --- a/zlt-transaction/txlcn-tm/pom.xml +++ b/zlt-transaction/txlcn-tm/pom.xml @@ -3,7 +3,7 @@ com.zlt zlt-transaction - 5.5.0 + 5.6.0 4.0.0 txlcn-tm diff --git a/zlt-uaa/pom.xml b/zlt-uaa/pom.xml index 691b3e11c825f516fc3fa4c637bfcd93d136c133..7c4541e3b41f8ae0cf600f9ed13a2a31ab518905 100644 --- a/zlt-uaa/pom.xml +++ b/zlt-uaa/pom.xml @@ -4,7 +4,7 @@ com.zlt central-platform - 5.5.0 + 5.6.0 zlt-uaa 认证中心 diff --git a/zlt-uaa/src/main/java/com/central/oauth/config/RedisListenerConfig.java b/zlt-uaa/src/main/java/com/central/oauth/config/RedisListenerConfig.java index 68f98f8f89b0daa7c8989136215bc84853c13325..9daa34aa1eef408105a20b19a3fcc711ae9ea3af 100644 --- a/zlt-uaa/src/main/java/com/central/oauth/config/RedisListenerConfig.java +++ b/zlt-uaa/src/main/java/com/central/oauth/config/RedisListenerConfig.java @@ -1,6 +1,5 @@ package com.central.oauth.config; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; diff --git a/zlt-uaa/src/main/java/com/central/oauth/filter/OauthTokenAspect.java b/zlt-uaa/src/main/java/com/central/oauth/filter/OauthTokenAspect.java index 7e101e6ffc5a274cf89c9b1989479ea888a25a88..822b9c7c915b25f729e5f1be5faf46d5d39d4daa 100644 --- a/zlt-uaa/src/main/java/com/central/oauth/filter/OauthTokenAspect.java +++ b/zlt-uaa/src/main/java/com/central/oauth/filter/OauthTokenAspect.java @@ -3,19 +3,21 @@ package com.central.oauth.filter; import com.central.common.constant.SecurityConstants; import com.central.common.context.TenantContextHolder; import com.central.common.model.Result; +import com.central.oauth.handler.decryptParamHandler.IDecryptParamHandler; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.security.authentication.InsufficientAuthenticationException; import org.springframework.security.core.Authentication; import org.springframework.security.oauth2.common.OAuth2AccessToken; +import org.springframework.security.oauth2.common.exceptions.OAuth2Exception; import org.springframework.security.oauth2.common.util.OAuth2Utils; import org.springframework.security.oauth2.provider.OAuth2Authentication; import org.springframework.stereotype.Component; +import javax.annotation.Resource; import java.security.Principal; import java.util.Map; @@ -34,17 +36,23 @@ import java.util.Map; @Component @Aspect public class OauthTokenAspect { + @Resource + private IDecryptParamHandler decryptParamHandler; + @Around("execution(* org.springframework.security.oauth2.provider.endpoint.TokenEndpoint.postAccessToken(..))") public Object handleControllerMethod(ProceedingJoinPoint joinPoint) throws Throwable { try { Object[] args = joinPoint.getArgs(); Principal principal = (Principal) args[0]; if (!(principal instanceof Authentication)) { - throw new InsufficientAuthenticationException( + throw new OAuth2Exception( "There is no client authentication. Try adding an appropriate authentication filter."); } String clientId = getClientId(principal); Map parameters = (Map) args[1]; + //解密参数 + decryptParamHandler.decryptParams(parameters); + String grantType = parameters.get(OAuth2Utils.GRANT_TYPE); if (!parameters.containsKey(SecurityConstants.ACCOUNT_TYPE_PARAM_NAME)) { parameters.put(SecurityConstants.ACCOUNT_TYPE_PARAM_NAME, SecurityConstants.DEF_ACCOUNT_TYPE); @@ -74,7 +82,7 @@ public class OauthTokenAspect { private String getClientId(Principal principal) { Authentication client = (Authentication) principal; if (!client.isAuthenticated()) { - throw new InsufficientAuthenticationException("The client is not authenticated."); + throw new OAuth2Exception("The client is not authenticated."); } String clientId = client.getName(); if (client instanceof OAuth2Authentication) { diff --git a/zlt-uaa/src/main/java/com/central/oauth/handler/decryptParamHandler/IDecryptParamHandler.java b/zlt-uaa/src/main/java/com/central/oauth/handler/decryptParamHandler/IDecryptParamHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..942f3e1c3959c29632d607405e47210063ddcfc1 --- /dev/null +++ b/zlt-uaa/src/main/java/com/central/oauth/handler/decryptParamHandler/IDecryptParamHandler.java @@ -0,0 +1,48 @@ +package com.central.oauth.handler.decryptParamHandler; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; + +import java.util.Map; + +/** + * 解密参数的处理接口 + * + * @author zlt + * @version 1.0 + * @date 2022/12/29 + *

+ * Blog: https://zlt2000.gitee.io + * Github: https://github.com/zlt2000 + */ +public interface IDecryptParamHandler { + String SEPARATOR = ";"; + /** + * 需要解密的参数名,多个以 ; 隔离 + * 例如:decrypt_param=username;password + */ + String PARAM_KEY_DECRYPT_PARAM = "decrypt_param"; + + /** + * 根据 parameters里面decrypt_param 的值进行参数解密,并把解密后的值替换原值 + * @param parameters 参数集合 + */ + default void decryptParams(Map parameters) { + if (CollUtil.isNotEmpty(parameters)) { + //从 parameters 中获取 decrypt_param 参数值 + String decryptParam = parameters.get(PARAM_KEY_DECRYPT_PARAM); + //如果参数decrypt_param有值,则进行参数解密 + if (StrUtil.isNotEmpty(decryptParam)) { + String[] paramNames = decryptParam.split(SEPARATOR); + this.decrypt(paramNames, parameters); + } + } + } + + /** + * 解密并更新参数值 + * @param paramNames 需要解密的参数名 + * @param parameters 参数集合(参数名:参数值) + */ + void decrypt(String[] paramNames, Map parameters); +} diff --git a/zlt-uaa/src/main/java/com/central/oauth/handler/decryptParamHandler/RsaDecryptParamHandler.java b/zlt-uaa/src/main/java/com/central/oauth/handler/decryptParamHandler/RsaDecryptParamHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..ea324f5eb826d47e4e4ef52a97b8323b4e5afd6b --- /dev/null +++ b/zlt-uaa/src/main/java/com/central/oauth/handler/decryptParamHandler/RsaDecryptParamHandler.java @@ -0,0 +1,54 @@ +package com.central.oauth.handler.decryptParamHandler; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; +import cn.hutool.crypto.asymmetric.KeyType; +import cn.hutool.crypto.asymmetric.RSA; +import com.central.oauth2.common.properties.AuthProperties; +import com.central.oauth2.common.properties.SecurityProperties; +import org.springframework.security.oauth2.common.exceptions.OAuth2Exception; +import org.springframework.stereotype.Service; + +import java.util.Map; + +/** + * 使用rsa算法对参数进行解密 + * + * @author zlt + * @version 1.0 + * @date 2022/12/29 + *

+ * Blog: https://zlt2000.gitee.io + * Github: https://github.com/zlt2000 + */ +@Service +public class RsaDecryptParamHandler implements IDecryptParamHandler { + private final AuthProperties authProperties; + + public RsaDecryptParamHandler(SecurityProperties securityProperties) { + this.authProperties = securityProperties.getAuth(); + } + + @Override + public void decrypt(String[] paramNames, Map parameters) { + RSA rsaTools = SecureUtil.rsa(authProperties.getDecryptParamPrivateKey(), null); + String value; + for (String param : paramNames) { + value = parameters.get(param); + if (StrUtil.isNotEmpty(value)) { + //解密 + value = this.decrypt(rsaTools, value, param); + //更新参数为解密后的值 + parameters.put(param, value); + } + } + } + + private String decrypt(RSA rsaTools, String value, String param) { + try { + return rsaTools.decryptStr(value, KeyType.PrivateKey); + } catch (Exception e) { + throw new OAuth2Exception("参数 " + param + " 解密失败!"); + } + } +} diff --git a/zlt-uaa/src/main/java/com/central/oauth/model/Client.java b/zlt-uaa/src/main/java/com/central/oauth/model/Client.java index dfe3e9e9a8d18aa317b0b8bf8f1a220ecc398319..a8915966b882e6b304a8b4b6b6c3bd2012c9d6ee 100644 --- a/zlt-uaa/src/main/java/com/central/oauth/model/Client.java +++ b/zlt-uaa/src/main/java/com/central/oauth/model/Client.java @@ -41,4 +41,6 @@ public class Client extends SuperEntity { */ @TableField(value = "id_token_validity") private Integer idTokenValiditySeconds = 60; + + private Long creatorId; } diff --git a/zlt-uaa/src/main/java/com/central/oauth/service/impl/ClientServiceImpl.java b/zlt-uaa/src/main/java/com/central/oauth/service/impl/ClientServiceImpl.java index 5e0141957d8fb64047cdf0a829e67331a4595285..a84007eea681448d606c1527edb3cca5841da81d 100644 --- a/zlt-uaa/src/main/java/com/central/oauth/service/impl/ClientServiceImpl.java +++ b/zlt-uaa/src/main/java/com/central/oauth/service/impl/ClientServiceImpl.java @@ -3,6 +3,7 @@ package com.central.oauth.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.central.common.context.LoginUserContextHolder; import com.central.common.lock.DistributedLock; import com.central.common.redis.template.RedisRepository; import com.central.common.constant.SecurityConstants; @@ -45,6 +46,9 @@ public class ClientServiceImpl extends SuperServiceImpl im public Result saveClient(Client client) throws Exception { client.setClientSecret(passwordEncoder.encode(client.getClientSecretStr())); String clientId = client.getClientId(); + if (client.getId() == null) { + client.setCreatorId(LoginUserContextHolder.getUser().getId()); + } super.saveOrUpdateIdempotency(client, lock , LOCK_KEY_CLIENTID+clientId , new QueryWrapper().eq("client_id", clientId) diff --git a/zlt-uaa/src/main/resources/application.yml b/zlt-uaa/src/main/resources/application.yml index 0527d6b424327667d3dc81e6969900b5f8d43535..7b83922f3b79a0b2ef2d48b44475075169c36ed7 100644 --- a/zlt-uaa/src/main/resources/application.yml +++ b/zlt-uaa/src/main/resources/application.yml @@ -37,4 +37,10 @@ zlt: tenant: enable: true ignoreTables: - - oauth_client_details \ No newline at end of file + - oauth_client_details + # 数据权限 + datascope: + enabled: false + includeSqls: + # 应用列表 + - com.central.oauth.mapper.ClientMapper.findList \ No newline at end of file diff --git a/zlt-uaa/src/test/java/com/central/oauth2/common/util/RsaUtilsTest.java b/zlt-uaa/src/test/java/com/central/oauth2/common/util/RsaUtilsTest.java new file mode 100644 index 0000000000000000000000000000000000000000..2d76f52e74a40ea067612c7d290e9b87256579e3 --- /dev/null +++ b/zlt-uaa/src/test/java/com/central/oauth2/common/util/RsaUtilsTest.java @@ -0,0 +1,52 @@ +package com.central.oauth2.common.util; + +import cn.hutool.crypto.SecureUtil; +import cn.hutool.crypto.asymmetric.KeyType; +import cn.hutool.crypto.asymmetric.RSA; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * RSA加密测试 + * + * @author zlt + * @version 1.0 + * @date 2023/1/30 + *

+ * Blog: https://zlt2000.gitee.io + * Github: https://github.com/zlt2000 + */ +@RunWith(SpringRunner.class) +public class RsaUtilsTest { + /** + * 私钥 + */ + private final static String PRIVATE_KEY = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDq7iw/3r2Fk/sFQR4BcmWrnASZnYIhlTj7kkANjwi6bnmoZoTmpcTAxpX4zYcVZTg9lsd8f5EYQgzCOQBFGiT3eSsWcm67BOMvCDJRKwqbkzu/cSTzN2qzjvi/Wo7GoToGYfP1Al+CcC0VjHATJVGhDXb4gCGk7MNTevPTZVHTmQYKuAZTqzPEO2npxD670AIY/L+4p0hDoftoz+jEzI+XAr0ffyeLovFqLurnqqnoXWnt2vGHwJYlnePQ2JwHlk+c4y2sYvmV+eJ8cGMH4IMle/yR99jTPAvcn4uufIVukp414wlmnKShhbzk93P7xacT0oYwzcR454P9Bf858x0VAgMBAAECggEBAJxK94VGWi+T01wbhirQQHN6yFSqRPiyncY/9f0PO29MMAOosKIBhnP5qaxsj4HcZR4UQYLCG3VX+8T6xwMx8YXyRogYeTJSfhG8Ej2NtPDrcsRaMYrdQ09RvosPZA0hFclJQVOu0HumxVegpq8WFMhgfNW16KwgF5JiKfRpY5aw4NDWZFmdNExdymrWPheI8pWBq/U+l8oqrekhbiEKXM2UXmLlKTS9Nk46LRYwaaiDW8JEFuPdx0cnakb+ecCXGd/8Cc8Hxn/mLyvqS1cWHT3J+lXRkfcnNnrJTR9qhf9l077XBMJqVckFEpK4kKbXHZd957ISAxq48Tm+xMX9KAECgYEA995szPToU0BxTTtOD4Z4c5JvbURQEcDQl/dB+qCQnu/orW5ZWv4++lHq2SZPjzbt7M8OaoRN8A5zYcNrYe4kBhLOLqHdaS1yUGIIjAejEAJplR5GqI3T5qzaLjpyiUZpO0mOcwAazCevnSXH6uO5jP0sjwxwaXz4OsTcpHIXHqECgYEA8qMXhh+G88+vTELL/2dHhtTIf7IAJLQ37c1Xrm6uwOHPfiDr256Lc4EzF8QAQqlHoYm1jRK7xDfFymY/SJKJVhYehWlNilnMuDuDOqseC/Zn2KgjMSjLLVkbp25DcpAu6SSiWlBvemrV3jivX/MU0BFp8HjbrlUcl12lRtYgrfUCgYB+iN2iA6RWW597fbrr0gnLdgXMEgOODJBwA5l7CFzLxk1Ru/OBsCkWQJtTH2ueALyVF16UodXnpnjgf5Jh++AH+bGnvJn7B2hEAMe8NGnZ0mFz7nDDuyNhrvvyfYPa8EboLTS7IGKNtfTAlHjqQDaI8vW8UO1R7KoL1lOM33FOAQKBgQDt/Z6jReU+3CUbbiFeANWdoLSQ2+1cExEQxWsNgy8Rreux0WTG4/nwb3fIBc4jlJrYDZTwLMHTssjkv+muq1zd/ZAuV51g6LfutSEAuLseDLDLSBBMtbCkaFTBo1uw0U/SCsbcQy01K/leoMcUG//8HjiFUGZZ1s3WgloM4xbmyQKBgAipgnoEyzvUfe2OMOc5ARGNSGZG4JGTGCyfnrYvYfffWpAokklHOkZMumeSWJXkx5F+MgJd9fxBK9S57PZ09gWkoeSVg0xcz5QMjh8BswfCdyet/CXQtwIfK0Wf1gWdAxC6vvv3DQ7zXbTlvqMdVOFzCKlocCYkzWMvIsejWXnW"; + /** + * 公钥 + */ + private final static String PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6u4sP969hZP7BUEeAXJlq5wEmZ2CIZU4+5JADY8Ium55qGaE5qXEwMaV+M2HFWU4PZbHfH+RGEIMwjkARRok93krFnJuuwTjLwgyUSsKm5M7v3Ek8zdqs474v1qOxqE6BmHz9QJfgnAtFYxwEyVRoQ12+IAhpOzDU3rz02VR05kGCrgGU6szxDtp6cQ+u9ACGPy/uKdIQ6H7aM/oxMyPlwK9H38ni6Lxai7q56qp6F1p7drxh8CWJZ3j0NicB5ZPnOMtrGL5lfnifHBjB+CDJXv8kffY0zwL3J+LrnyFbpKeNeMJZpykoYW85Pdz+8WnE9KGMM3EeOeD/QX/OfMdFQIDAQAB"; + + private static RSA rsaTools; + + @BeforeClass + public static void init() { + rsaTools = SecureUtil.rsa(PRIVATE_KEY, PUBLIC_KEY); + } + + @Test + public void testDecrypt() { + String value = "admin"; + String result = rsaTools.encryptBcd(value, KeyType.PublicKey); + System.out.println(result); + } + + @Test + public void testEncrypt() { + String value = "8A806900A16294BF11F3D0455ADE2759CCC8C52F0BB5DEF731A0E5F596203401899B545B36E7072EC4CC1AA2FDE7481589783D555D36EDDDC19587D62B6AB39A6478FF75600F2B3671816D33C2AF6776F3865838EA2D90060E01C014B6F0DAE7D0D09EC80FF3F2ABFE5F12F111A72390A0083534789F49D9CA36CF39D071622B75C5B5F2BEC609F7C7EE53E324FA0443AC31BE40FF9B6693AE5BEAC0BFDC677794E7A5B503B3A3F571DD6AB5169598F5FC59D63EF60E572FFDF3CA2DCB818A2448C6E25CC46B17CBB232B0F46BC05C916EEB05E9C852B0729C3DE28C7FD679B89E370FB829ACB4485A7346E50AA06655A5A9DFDA5685145A6142A04ACF72D689"; + String result = rsaTools.decryptStr(value, KeyType.PrivateKey); + System.out.println(result); + } +} diff --git a/zlt-web/layui-web/Dockerfile b/zlt-web/layui-web/Dockerfile deleted file mode 100644 index fc40b43a9eeee9cda19a42a0868a572fc4e94870..0000000000000000000000000000000000000000 --- a/zlt-web/layui-web/Dockerfile +++ /dev/null @@ -1,9 +0,0 @@ -FROM nginx:1.21.0 - -LABEL MAINTAINER=Andy -RUN rm -rf /usr/share/nginx/html/* -COPY src/main/resources/static/ /usr/share/nginx/html/ - -# docker run --name zlt-web \ -# -v /host/path/apiUrl.js:/usr/share/nginx/html/module/apiUrl.js:ro -# -d zlt-web:4.5 \ No newline at end of file diff --git a/zlt-web/layui-web/pom.xml b/zlt-web/layui-web/pom.xml index b0cf64fe1b331b5c401535cbd97753d9eb058fd8..b4059833f5dbba41373e85c34055c24b100b2c22 100644 --- a/zlt-web/layui-web/pom.xml +++ b/zlt-web/layui-web/pom.xml @@ -6,7 +6,7 @@ com.zlt zlt-web - 5.4.0 + 5.6.0 layui-web Layui开发的前端 @@ -14,7 +14,6 @@ org.springframework.boot spring-boot-starter-web - 2.5.14 - - - - -

- -
- - -
- - -
-
-
    -
-
-
-
-
-
- -
- - - - - -
-
- - - - - - - - - - + + + + + + + zlt-mp + + + + + + + + + + +
+ +
+ + +
+ + +
+
+
    +
+
+
+
+
+
+ +
+ + + + + +
+
+ + + + + + + + + + \ No newline at end of file diff --git a/zlt-web/layui-web/src/main/resources/static/login.html b/zlt-web/layui-web/src/main/resources/static/login.html index 643b16f123f094f50fdc0aedd589cc37b1fb3581..59807664ab5dc7e526441e1d7d440ed99380ca67 100644 --- a/zlt-web/layui-web/src/main/resources/static/login.html +++ b/zlt-web/layui-web/src/main/resources/static/login.html @@ -1,129 +1,129 @@ - - - - - - - - 用户登录 - - - - - - - - - - - - - + + + + + + + + 用户登录 + + + + + + + + + + + + + \ No newline at end of file diff --git a/zlt-web/layui-web/src/main/resources/static/module/index.js b/zlt-web/layui-web/src/main/resources/static/module/index.js index 7bb9e6fa56508dd0835f247afd25e3f0f71fbf9b..183a5f3ca2eb1288a829dfe79dd44876e74cb509 100644 --- a/zlt-web/layui-web/src/main/resources/static/module/index.js +++ b/zlt-web/layui-web/src/main/resources/static/module/index.js @@ -1,291 +1,291 @@ -//add by owen 修复 path 无法引用http://页面的问题 begin -String.prototype.startWith = function(str) { - if (str == null || str == "" || this.length == 0 - || str.length > this.length) - return false; - if (this.substr(0, str.length) == str) - return true; - else - return false; - return true; -} - - -function initIFrame() { - var $parent = $(".admin-iframe").parent(); - if ($parent.hasClass('layui-body')) { - $parent.addClass('admin-iframe-body'); - return; - } - if ($parent.hasClass('layui-tab-item')) { - $parent.css({'padding': '0', 'overflow-y': 'hidden'}); - } else { - $parent.css({'width': '100%', 'height': '100%'}); - } -} -//add by owen 修复 path 无法引用http://页面的问题 end - -layui.define(['config', 'admin', 'layer', 'laytpl', 'element', 'form'], function (exports) { - var $ = layui.$; - var config = layui.config; - var admin = layui.admin; - var layer = layui.layer; - var laytpl = layui.laytpl; - var element = layui.element; - var form = layui.form; - - var index = { - // 渲染左侧菜单栏 - initLeftNav: function () { - admin.req('api-user/menus/current', {}, function (data) { - //data = data[1]; - admin.putTempData("menus",data); - var menus = data; - // 判断权限 - for (var i = menus.length - 1; i >= 0; i--) { - var tempMenu = menus[i]; - if (tempMenu.auth && !admin.hasPerm(tempMenu.auth)) { - menus.splice(i, 1); - continue; - } - if (!tempMenu.subMenus) { - continue; - } - for (var j = tempMenu.subMenus.length - 1; j >= 0; j--) { - var jMenus = tempMenu.subMenus[j]; - if (jMenus.auth && !admin.hasPerm(jMenus.auth)) { - tempMenu.subMenus.splice(j, 1); - continue; - } - if (!jMenus.subMenus) { - continue; - } - for (var k = jMenus.subMenus.length - 1; k >= 0; k--) { - if (jMenus.subMenus[k].auth && !admin.hasPerm(jMenus.subMenus[k].auth)) { - jMenus.subMenus.splice(k, 1); - continue; - } - } - } - } - // 去除空的目录 - for (var i = menus.length - 1; i >= 0; i--) { - var tempMenu = menus[i]; - if (tempMenu.subMenus && tempMenu.subMenus.length <= 0) { - menus.splice(i, 1); - continue; - } - if (!tempMenu.subMenus) { - continue; - } - for (var j = tempMenu.subMenus.length - 1; j >= 0; j--) { - var jMenus = tempMenu.subMenus[j]; - if (jMenus.subMenus && jMenus.subMenus.length <= 0) { - tempMenu.splice(j, 1); - continue; - } - } - } - // 渲染 - $('.layui-layout-admin .layui-side').load('pages/side.html', function () { - laytpl(sideNav.innerHTML).render(menus, function (html) { - $('#sideNav').after(html); - }); - element.render('nav'); - admin.activeNav(Q.lash); - }); - - - }, 'GET'); - }, - // 路由注册 - initRouter: function () { - - index.regRouter(admin.getTempData("menus")); - // index.regRouter(config.menus); - Q.reg('console', function () { - var menuPath = 'pages/console.html' - index.loadView('console', menuPath, '主页'); - }); - - Q.init({ - index: 'console' - }); - }, - // 使用递归循环注册 - regRouter: function (menus) { - $.each(menus, function (i, data) { - if (data.url && data.url.indexOf('#!') == 0) { - Q.reg(data.url.substring(2), function () { - if (data.path.startWith("http://")) { - window.open(data.path); - } else { - //临时保存url - data.path.startWith("http://") ? admin.putTempData("params",data.path) : null ; - - var menuId = data.url.substring(2); - //add by owen 修复 path 无法引用http://页面的问题 - var menuPath = data.path.startWith("http://") ? 'pages/tpl/iframe.html' : 'pages/' + data.path - index.loadView(menuId, menuPath, data.name); - } - }); - } - if (data.subMenus) { - index.regRouter(data.subMenus); - } - }); - }, - // 路由加载组件 - loadView: function (menuId, menuPath, menuName) { - var contentDom = '.layui-layout-admin .layui-body'; - admin.showLoading('.layui-layout-admin .layui-body'); - var flag; // 选项卡是否添加 - flag = menuPath.startWith("http://") ? false : flag ; - // 判断是否开启了选项卡功能 - if (config.pageTabs) { - $('.layui-layout-admin .layui-body .layui-tab .layui-tab-title>li').each(function (index) { - if ($(this).attr('lay-id') === menuId) { - flag = true; - } - }); - if (!flag) { - element.tabAdd('admin-pagetabs', { - title: menuName, - //add by owen 修复 path 无法引用http://页面的问题 - content: menuPath.startWith("http://") ? '
' : '' , - id: menuId - }); - } - contentDom = '#' + menuId; - element.tabChange('admin-pagetabs', menuId); - admin.rollPage('auto'); - // 切换tab关闭表格内浮窗 - $('.layui-table-tips-c').trigger('click'); - // 解决切换tab滚动条时而消失的问题 - var $iframe = $('.layui-layout-admin .layui-body .layui-tab-content .layui-tab-item.layui-show .admin-iframe')[0]; - if ($iframe) { - $iframe.style.height = "99%"; - $iframe.scrollWidth; - $iframe.style.height = "100%"; - } - } - if (!flag || admin.isRefresh) { - $(contentDom).load(menuPath, function () { - admin.isRefresh = false; - element.render('breadcrumb'); - form.render('select'); - admin.removeLoading('.layui-layout-admin .layui-body'); - }); - } else { - admin.removeLoading('.layui-layout-admin .layui-body'); - } - admin.activeNav(Q.lash); - // 移动设备切换页面隐藏侧导航 - if (document.body.clientWidth <= 750) { - admin.flexible(true); - } - }, - // 从服务器获取登录用户的信息 - getUser: function (success) { - layer.load(2); - admin.req('api-user/users/current', {}, function (data) { - layer.closeAll('loading'); - if (data && data.resp_code === 0) { - let user = data.datas; - config.putUser(user); - admin.putTempData("permissions",user.permissions); - success(user); - } else { - layer.msg('获取用户失败', {icon: 2}); - config.removeToken(); - location.replace('login.html'); - } - }, 'GET'); - }, - //获取菜单 - getMenus: function () { - admin.req('api-user/menus/current', {}, function (data) { - admin.putTempData("menus",data); - }, 'GET'); - }, - // 页面元素绑定事件监听 - bindEvent: function () { - // 退出登录 - $('#btnLogout').click(function () { - layer.confirm('确定退出登录?', function () { - let token = config.getToken(); - let isExistsToken = false; - if (token) { - let accessToken = token.access_token; - config.removeToken(); - - if (accessToken) { - isExistsToken = true; - admin.req('api-uaa/oauth/check_token?token='+accessToken, {}, function (data) { - if (data.active) { - let loginPageUrl = window.location.protocol + '//' + window.location.host + '/login.html'; - window.location = config.base_server + 'api-uaa/oauth/remove/token?redirect_uri='+loginPageUrl+'&access_token='+accessToken; - } else { - location.replace('login.html'); - } - }, 'POST'); - } - } - if (!isExistsToken) { - location.replace('login.html'); - } - }); - }); - // 修改密码 - $('#setPsw').click(function () { - admin.popupRight('pages/tpl/password.html'); - }); - // 个人信息 - $('#setInfo').click(function () { - Q.go('myInfo'); - }); - // 消息 - $('#btnMessage').click(function () { - admin.popupRight('pages/tpl/message.html'); - }); - }, - // 检查多标签功能是否开启 - checkPageTabs: function () { - // 加载主页 - if (config.pageTabs) { - $('.layui-layout-admin').addClass('open-tab'); - element.tabAdd('admin-pagetabs', { - title: '', - content: '
', - id: 'console' - }); - $('#console').load('pages/console.html', function () { - }); - } else { - $('.layui-layout-admin').removeClass('open-tab'); - } - }, - // 打开新页面 - openNewTab: function (param) { - var url = param.url; - var title = param.title; - var menuId = param.menuId; - if (!menuId) { - menuId = url.replace(/[?:=&/]/g, '_'); - } - index.loadView(menuId, url, title); - }, - // 关闭选项卡 - closeTab: function (menuId) { - element.tabDelete('admin-pagetabs', menuId); - } - }; - - // tab选项卡切换监听 - element.on('tab(admin-pagetabs)', function (data) { - var layId = $(this).attr('lay-id'); - Q.go(layId); - }); - - exports('index', index); -}); +//add by owen 修复 path 无法引用http://页面的问题 begin +String.prototype.startWith = function(str) { + if (str == null || str == "" || this.length == 0 + || str.length > this.length) + return false; + if (this.substr(0, str.length) == str) + return true; + else + return false; + return true; +} + + +function initIFrame() { + var $parent = $(".admin-iframe").parent(); + if ($parent.hasClass('layui-body')) { + $parent.addClass('admin-iframe-body'); + return; + } + if ($parent.hasClass('layui-tab-item')) { + $parent.css({'padding': '0', 'overflow-y': 'hidden'}); + } else { + $parent.css({'width': '100%', 'height': '100%'}); + } +} +//add by owen 修复 path 无法引用http://页面的问题 end + +layui.define(['config', 'admin', 'layer', 'laytpl', 'element', 'form'], function (exports) { + var $ = layui.$; + var config = layui.config; + var admin = layui.admin; + var layer = layui.layer; + var laytpl = layui.laytpl; + var element = layui.element; + var form = layui.form; + + var index = { + // 渲染左侧菜单栏 + initLeftNav: function () { + admin.req('api-user/menus/current', {}, function (data) { + //data = data[1]; + admin.putTempData("menus",data); + var menus = data; + // 判断权限 + for (var i = menus.length - 1; i >= 0; i--) { + var tempMenu = menus[i]; + if (tempMenu.auth && !admin.hasPerm(tempMenu.auth)) { + menus.splice(i, 1); + continue; + } + if (!tempMenu.subMenus) { + continue; + } + for (var j = tempMenu.subMenus.length - 1; j >= 0; j--) { + var jMenus = tempMenu.subMenus[j]; + if (jMenus.auth && !admin.hasPerm(jMenus.auth)) { + tempMenu.subMenus.splice(j, 1); + continue; + } + if (!jMenus.subMenus) { + continue; + } + for (var k = jMenus.subMenus.length - 1; k >= 0; k--) { + if (jMenus.subMenus[k].auth && !admin.hasPerm(jMenus.subMenus[k].auth)) { + jMenus.subMenus.splice(k, 1); + continue; + } + } + } + } + // 去除空的目录 + for (var i = menus.length - 1; i >= 0; i--) { + var tempMenu = menus[i]; + if (tempMenu.subMenus && tempMenu.subMenus.length <= 0) { + menus.splice(i, 1); + continue; + } + if (!tempMenu.subMenus) { + continue; + } + for (var j = tempMenu.subMenus.length - 1; j >= 0; j--) { + var jMenus = tempMenu.subMenus[j]; + if (jMenus.subMenus && jMenus.subMenus.length <= 0) { + tempMenu.splice(j, 1); + continue; + } + } + } + // 渲染 + $('.layui-layout-admin .layui-side').load('pages/side.html', function () { + laytpl(sideNav.innerHTML).render(menus, function (html) { + $('#sideNav').after(html); + }); + element.render('nav'); + admin.activeNav(Q.lash); + }); + + + }, 'GET'); + }, + // 路由注册 + initRouter: function () { + + index.regRouter(admin.getTempData("menus")); + // index.regRouter(config.menus); + Q.reg('console', function () { + var menuPath = 'pages/console.html' + index.loadView('console', menuPath, '主页'); + }); + + Q.init({ + index: 'console' + }); + }, + // 使用递归循环注册 + regRouter: function (menus) { + $.each(menus, function (i, data) { + if (data.url && data.url.indexOf('#!') == 0) { + Q.reg(data.url.substring(2), function () { + if (data.path.startWith("http://")) { + window.open(data.path); + } else { + //临时保存url + data.path.startWith("http://") ? admin.putTempData("params",data.path) : null ; + + var menuId = data.url.substring(2); + //add by owen 修复 path 无法引用http://页面的问题 + var menuPath = data.path.startWith("http://") ? 'pages/tpl/iframe.html' : 'pages/' + data.path + index.loadView(menuId, menuPath, data.name); + } + }); + } + if (data.subMenus) { + index.regRouter(data.subMenus); + } + }); + }, + // 路由加载组件 + loadView: function (menuId, menuPath, menuName) { + var contentDom = '.layui-layout-admin .layui-body'; + admin.showLoading('.layui-layout-admin .layui-body'); + var flag; // 选项卡是否添加 + flag = menuPath.startWith("http://") ? false : flag ; + // 判断是否开启了选项卡功能 + if (config.pageTabs) { + $('.layui-layout-admin .layui-body .layui-tab .layui-tab-title>li').each(function (index) { + if ($(this).attr('lay-id') === menuId) { + flag = true; + } + }); + if (!flag) { + element.tabAdd('admin-pagetabs', { + title: menuName, + //add by owen 修复 path 无法引用http://页面的问题 + content: menuPath.startWith("http://") ? '
' : '' , + id: menuId + }); + } + contentDom = '#' + menuId; + element.tabChange('admin-pagetabs', menuId); + admin.rollPage('auto'); + // 切换tab关闭表格内浮窗 + $('.layui-table-tips-c').trigger('click'); + // 解决切换tab滚动条时而消失的问题 + var $iframe = $('.layui-layout-admin .layui-body .layui-tab-content .layui-tab-item.layui-show .admin-iframe')[0]; + if ($iframe) { + $iframe.style.height = "99%"; + $iframe.scrollWidth; + $iframe.style.height = "100%"; + } + } + if (!flag || admin.isRefresh) { + $(contentDom).load(menuPath, function () { + admin.isRefresh = false; + element.render('breadcrumb'); + form.render('select'); + admin.removeLoading('.layui-layout-admin .layui-body'); + }); + } else { + admin.removeLoading('.layui-layout-admin .layui-body'); + } + admin.activeNav(Q.lash); + // 移动设备切换页面隐藏侧导航 + if (document.body.clientWidth <= 750) { + admin.flexible(true); + } + }, + // 从服务器获取登录用户的信息 + getUser: function (success) { + layer.load(2); + admin.req('api-user/users/current', {}, function (data) { + layer.closeAll('loading'); + if (data && data.resp_code === 0) { + let user = data.datas; + config.putUser(user); + admin.putTempData("permissions",user.permissions); + success(user); + } else { + layer.msg('获取用户失败', {icon: 2}); + config.removeToken(); + location.replace('login.html'); + } + }, 'GET'); + }, + //获取菜单 + getMenus: function () { + admin.req('api-user/menus/current', {}, function (data) { + admin.putTempData("menus",data); + }, 'GET'); + }, + // 页面元素绑定事件监听 + bindEvent: function () { + // 退出登录 + $('#btnLogout').click(function () { + layer.confirm('确定退出登录?', function () { + let token = config.getToken(); + let isExistsToken = false; + if (token) { + let accessToken = token.access_token; + config.removeToken(); + + if (accessToken) { + isExistsToken = true; + admin.req('api-uaa/oauth/check_token?token='+accessToken, {}, function (data) { + if (data.active) { + let loginPageUrl = window.location.protocol + '//' + window.location.host + '/login.html'; + window.location = config.base_server + 'api-uaa/oauth/remove/token?redirect_uri='+loginPageUrl+'&access_token='+accessToken; + } else { + location.replace('login.html'); + } + }, 'POST'); + } + } + if (!isExistsToken) { + location.replace('login.html'); + } + }); + }); + // 修改密码 + $('#setPsw').click(function () { + admin.popupRight('pages/tpl/password.html'); + }); + // 个人信息 + $('#setInfo').click(function () { + Q.go('myInfo'); + }); + // 消息 + $('#btnMessage').click(function () { + admin.popupRight('pages/tpl/message.html'); + }); + }, + // 检查多标签功能是否开启 + checkPageTabs: function () { + // 加载主页 + if (config.pageTabs) { + $('.layui-layout-admin').addClass('open-tab'); + element.tabAdd('admin-pagetabs', { + title: '', + content: '
', + id: 'console' + }); + $('#console').load('pages/console.html', function () { + }); + } else { + $('.layui-layout-admin').removeClass('open-tab'); + } + }, + // 打开新页面 + openNewTab: function (param) { + var url = param.url; + var title = param.title; + var menuId = param.menuId; + if (!menuId) { + menuId = url.replace(/[?:=&/]/g, '_'); + } + index.loadView(menuId, url, title); + }, + // 关闭选项卡 + closeTab: function (menuId) { + element.tabDelete('admin-pagetabs', menuId); + } + }; + + // tab选项卡切换监听 + element.on('tab(admin-pagetabs)', function (data) { + var layId = $(this).attr('lay-id'); + Q.go(layId); + }); + + exports('index', index); +}); diff --git a/zlt-web/layui-web/src/main/resources/static/pages/attestation/app.html b/zlt-web/layui-web/src/main/resources/static/pages/attestation/app.html index d0a1978bedbd6511341a0f8aac5fc9c46016aa96..b87fd0d81cdb38ebd97f7e714c1f8b4ba72bee8a 100644 --- a/zlt-web/layui-web/src/main/resources/static/pages/attestation/app.html +++ b/zlt-web/layui-web/src/main/resources/static/pages/attestation/app.html @@ -1,237 +1,237 @@ -
-
-

应用管理

- - 首页 - 应用管理 - -
-
-
- 搜索:  - - -
- - -
-
-
- - - - - - - - - + + + + + + \ No newline at end of file diff --git a/zlt-web/layui-web/src/main/resources/static/pages/log/sysLog.html b/zlt-web/layui-web/src/main/resources/static/pages/log/sysLog.html index bf6f3ddca8c88d951c860d884c6ff93002723a24..204ae7e7882eca477a14ecfbcff7c972976e7b01 100644 --- a/zlt-web/layui-web/src/main/resources/static/pages/log/sysLog.html +++ b/zlt-web/layui-web/src/main/resources/static/pages/log/sysLog.html @@ -1,106 +1,106 @@ -
-
-

系统日志

- - 首页 - 系统日志 - -
-
-
- 搜索: -   -   - -
- -
-
-
- - \ No newline at end of file diff --git a/zlt-web/layui-web/src/main/resources/static/pages/log/traceLog.html b/zlt-web/layui-web/src/main/resources/static/pages/log/traceLog.html deleted file mode 100644 index 9b62f01a2a4c9f356723c7faa369e06152a6656f..0000000000000000000000000000000000000000 --- a/zlt-web/layui-web/src/main/resources/static/pages/log/traceLog.html +++ /dev/null @@ -1,45 +0,0 @@ - -
- - \ No newline at end of file diff --git a/zlt-web/layui-web/src/main/resources/static/pages/system/menus.html b/zlt-web/layui-web/src/main/resources/static/pages/system/menus.html index 2eea260cfcb4a60fdb348ad4279b2177f5d09179..23d3861eed7f81e89cdf98122d9500c48844fec0 100644 --- a/zlt-web/layui-web/src/main/resources/static/pages/system/menus.html +++ b/zlt-web/layui-web/src/main/resources/static/pages/system/menus.html @@ -1,188 +1,188 @@ -
-
-

菜单管理

- - 首页 - 菜单管理 - -
-
-
- 所属应用: -  搜索:  - - - - -
- - - -
-
- - - - - - + + + \ No newline at end of file diff --git a/zlt-web/layui-web/src/main/resources/static/pages/system/role.html b/zlt-web/layui-web/src/main/resources/static/pages/system/role.html index ba0f708434a7104c0d0debf68418cd68eecf4f2b..9c39bf88bcc232e889bbd9ac47247d09539cbe5c 100644 --- a/zlt-web/layui-web/src/main/resources/static/pages/system/role.html +++ b/zlt-web/layui-web/src/main/resources/static/pages/system/role.html @@ -44,6 +44,13 @@ lay-verify="required" required /> +
+ +
+ + +
+