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 @@
-
-
-
-
- 搜索:
-
- 全文搜索
- 日志信息
- 日志级别
- 应用名
- 类名
- 链路追踪id
-
-
- 搜索
-
-
-
-
-
-
-
\ 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 />
+