diff --git a/README.md b/README.md
index e666cf33..10bdedbc 100644
--- a/README.md
+++ b/README.md
@@ -196,8 +196,8 @@ Star走势图
* 17.支持SAAS服务模式,提供SaaS多租户架构方案。
* 18.分布式文件服务,集成minio、阿里OSS等优秀的第三方,提供便捷的文件上传与管理,同时也支持本地存储。
* 19.主流数据库兼容,一套代码完全兼容Mysql、Postgresql、Oracle、Sqlserver、MariaDB、达梦等主流数据库。
-* 20.集成工作流activiti、flowable,并实现了只需在页面配置流程转向,可极大的简化bpm工作流的开发;用bpm的流程设计器画出了流程走向,一个工作流基本就完成了,只需写很少量的java代码;
-* 21.低代码能力:在线流程设计,采用开源Activiti流程引擎,实现在线画流程,自定义表单,表单挂靠,业务流转
+* 20.集成工作流flowable、activiti,并实现了只需在页面配置流程转向,可极大的简化bpm工作流的开发;用bpm的流程设计器画出了流程走向,一个工作流基本就完成了,只需写很少量的java代码;
+* 21.低代码能力:在线流程设计,采用开源flowable、activiti流程引擎,实现在线画流程,自定义表单,表单挂靠,业务流转
* 22.多数据源:及其简易的使用方式,在线配置数据源配置,便捷的从其他数据抓取数据;
* 23.提供单点登录CAS集成方案,项目中已经提供完善的对接代码
* 24.低代码能力:表单设计器,支持用户自定义表单布局,支持单表,一对多表单、支持select、radio、checkbox、textarea、date、popup、列表、宏等控件
diff --git a/jeecg-boot-base-core/pom.xml b/jeecg-boot-base-core/pom.xml
index 168dd94f..54498efd 100644
--- a/jeecg-boot-base-core/pom.xml
+++ b/jeecg-boot-base-core/pom.xml
@@ -82,7 +82,7 @@
commons-io
commons-io
- ${commons.version}
+ ${commons-io.version}
commons-lang
@@ -183,9 +183,14 @@
-
+
+
+ com.github.xiaoymin
+ knife4j-openapi2-spring-boot-starter
${knife4j-spring-boot-starter.version}
diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/CommonUtils.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/CommonUtils.java
index b99df5f2..9294a5c2 100644
--- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/CommonUtils.java
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/CommonUtils.java
@@ -348,8 +348,11 @@ public class CommonUtils {
//返回 host domain
String baseDomainPath = null;
- int length = 80;
- if(length == serverPort){
+ //update-begin---author:wangshuai---date:2024-03-15---for:【QQYUN-8561】企业微信登陆请求接口设置上下文不一致,导致接口404---
+ int httpPort = 80;
+ int httpsPort = 443;
+ if(httpPort == serverPort || httpsPort == serverPort){
+ //update-end---author:wangshuai---date:2024-03-15---for:【QQYUN-8561】企业微信登陆请求接口设置上下文不一致,导致接口404---~
baseDomainPath = scheme + "://" + serverName + contextPath ;
}else{
baseDomainPath = scheme + "://" + serverName + ":" + serverPort + contextPath ;
diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/sqlInjection/parse/ConstAnalyzer.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/sqlInjection/parse/ConstAnalyzer.java
index 7ec118e2..50551e40 100644
--- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/sqlInjection/parse/ConstAnalyzer.java
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/sqlInjection/parse/ConstAnalyzer.java
@@ -1,55 +1,6 @@
package org.jeecg.common.util.sqlInjection.parse;
-import net.sf.jsqlparser.expression.AllValue;
-import net.sf.jsqlparser.expression.AnalyticExpression;
-import net.sf.jsqlparser.expression.AnyComparisonExpression;
-import net.sf.jsqlparser.expression.ArrayConstructor;
-import net.sf.jsqlparser.expression.ArrayExpression;
-import net.sf.jsqlparser.expression.BinaryExpression;
-import net.sf.jsqlparser.expression.CaseExpression;
-import net.sf.jsqlparser.expression.CastExpression;
-import net.sf.jsqlparser.expression.CollateExpression;
-import net.sf.jsqlparser.expression.ConnectByRootOperator;
-import net.sf.jsqlparser.expression.DateTimeLiteralExpression;
-import net.sf.jsqlparser.expression.DateValue;
-import net.sf.jsqlparser.expression.DoubleValue;
-import net.sf.jsqlparser.expression.Expression;
-import net.sf.jsqlparser.expression.ExpressionVisitor;
-import net.sf.jsqlparser.expression.ExtractExpression;
-import net.sf.jsqlparser.expression.Function;
-import net.sf.jsqlparser.expression.HexValue;
-import net.sf.jsqlparser.expression.IntervalExpression;
-import net.sf.jsqlparser.expression.JdbcNamedParameter;
-import net.sf.jsqlparser.expression.JdbcParameter;
-import net.sf.jsqlparser.expression.JsonAggregateFunction;
-import net.sf.jsqlparser.expression.JsonExpression;
-import net.sf.jsqlparser.expression.JsonFunction;
-import net.sf.jsqlparser.expression.JsonFunctionExpression;
-import net.sf.jsqlparser.expression.KeepExpression;
-import net.sf.jsqlparser.expression.LongValue;
-import net.sf.jsqlparser.expression.MySQLGroupConcat;
-import net.sf.jsqlparser.expression.NextValExpression;
-import net.sf.jsqlparser.expression.NotExpression;
-import net.sf.jsqlparser.expression.NullValue;
-import net.sf.jsqlparser.expression.NumericBind;
-import net.sf.jsqlparser.expression.OracleHierarchicalExpression;
-import net.sf.jsqlparser.expression.OracleHint;
-import net.sf.jsqlparser.expression.OracleNamedFunctionParameter;
-import net.sf.jsqlparser.expression.Parenthesis;
-import net.sf.jsqlparser.expression.RowConstructor;
-import net.sf.jsqlparser.expression.RowGetExpression;
-import net.sf.jsqlparser.expression.SignedExpression;
-import net.sf.jsqlparser.expression.StringValue;
-import net.sf.jsqlparser.expression.TimeKeyExpression;
-import net.sf.jsqlparser.expression.TimeValue;
-import net.sf.jsqlparser.expression.TimestampValue;
-import net.sf.jsqlparser.expression.TimezoneExpression;
-import net.sf.jsqlparser.expression.TryCastExpression;
-import net.sf.jsqlparser.expression.UserVariable;
-import net.sf.jsqlparser.expression.ValueListExpression;
-import net.sf.jsqlparser.expression.VariableAssignment;
-import net.sf.jsqlparser.expression.WhenClause;
-import net.sf.jsqlparser.expression.XMLSerializeExpr;
+import net.sf.jsqlparser.expression.*;
import net.sf.jsqlparser.expression.operators.arithmetic.Addition;
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseAnd;
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseLeftShift;
@@ -215,6 +166,23 @@ public class ConstAnalyzer implements ExpressionVisitor, ItemsListVisitor {
expr.getBetweenExpressionEnd().accept(this);
}
+// /**
+// * 用于处理 OverlapsCondition 类型的表达式
+// * @param overlapsCondition
+// */
+// @Override
+// public void visit(OverlapsCondition overlapsCondition) {
+// constFlag.set(false);
+// }
+// /**
+// * 用于处理 SafeCastExpression 类型的表达式。
+// * @param safeCastExpression
+// */
+// @Override
+// public void visit(SafeCastExpression safeCastExpression) {
+// constFlag.set(false);
+// }
+
@Override
public void visit(EqualsTo expr) {
visitBinaryExpression(expr);
diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/config/Swagger2Config.java b/jeecg-boot-base-core/src/main/java/org/jeecg/config/Swagger2Config.java
index 92e962e1..5723f1be 100644
--- a/jeecg-boot-base-core/src/main/java/org/jeecg/config/Swagger2Config.java
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/config/Swagger2Config.java
@@ -1,7 +1,6 @@
package org.jeecg.config;
-import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.constant.CommonConstant;
import org.springframework.beans.BeansException;
@@ -19,15 +18,13 @@ import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
-import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
-import springfox.documentation.spring.web.plugins.WebFluxRequestHandlerProvider;
import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider;
-import springfox.documentation.swagger2.annotations.EnableSwagger2;
+import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
import java.lang.reflect.Field;
import java.util.ArrayList;
@@ -39,8 +36,7 @@ import java.util.stream.Collectors;
* @Author scott
*/
@Configuration
-@EnableSwagger2 //开启 Swagger2
-@EnableKnife4j //开启 knife4j,可以不写
+@EnableSwagger2WebMvc
@Import(BeanValidatorPluginsConfiguration.class)
public class Swagger2Config implements WebMvcConfigurer {
@@ -152,7 +148,7 @@ public class Swagger2Config implements WebMvcConfigurer {
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
- if (bean instanceof WebMvcRequestHandlerProvider || bean instanceof WebFluxRequestHandlerProvider) {
+ if (bean instanceof WebMvcRequestHandlerProvider) {
customizeSpringfoxHandlerMappings(getHandlerMappings(bean));
}
return bean;
diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java b/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java
index 76cd0cdd..602259a8 100644
--- a/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java
@@ -173,6 +173,7 @@ public class ShiroConfig {
// 企业微信证书排除
filterChainDefinitionMap.put("/WW_verify*", "anon");
+
// 通过注解免登录url
List ignoreAuthUrlList = collectIgnoreAuthUrl();
if (!CollectionUtils.isEmpty(ignoreAuthUrlList)) {
@@ -181,6 +182,7 @@ public class ShiroConfig {
}
}
+
// 添加自己的过滤器并且取名为jwt
Map filterMap = new HashMap(1);
//如果cloudServer为空 则说明是单体 需要加载跨域配置【微服务跨域切换】
diff --git a/jeecg-module-system/jeecg-system-start/pom.xml b/jeecg-module-system/jeecg-system-start/pom.xml
index f04e8794..3499e865 100644
--- a/jeecg-module-system/jeecg-system-start/pom.xml
+++ b/jeecg-module-system/jeecg-system-start/pom.xml
@@ -43,11 +43,10 @@
${dm8.version}
-
+
org.flywaydb
flyway-core
- 7.15.0
diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/config/flyway/FlywayConfig.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/config/flyway/FlywayConfig.java
new file mode 100644
index 00000000..adc8e86d
--- /dev/null
+++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/config/flyway/FlywayConfig.java
@@ -0,0 +1,136 @@
+package org.jeecg.config.flyway;
+
+import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
+import lombok.extern.slf4j.Slf4j;
+import org.flywaydb.core.Flyway;
+import org.flywaydb.core.api.FlywayException;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
+
+import javax.sql.DataSource;
+import java.util.Map;
+
+/**
+* @Description: 初始化flyway配置 修改之后支持多数据源,当出现异常时打印日志,不影响项目启动
+*
+* @author: wangshuai
+* @date: 2024/3/12 10:03
+*/
+@Slf4j
+@Configuration
+public class FlywayConfig {
+
+ @Autowired
+ private DataSource dataSource;
+
+ @Autowired
+ private Environment environment;
+
+ /**
+ * 是否开启flyway
+ */
+ @Value("${spring.flyway.enabled:false}")
+ private Boolean enabled;
+
+ /**
+ * 编码格式,默认UTF-8
+ */
+ @Value("${spring.flyway.encoding:UTF-8}")
+ private String encoding;
+
+ /**
+ * 迁移sql脚本文件存放路径,官方默认db/migration
+ */
+ @Value("${spring.flyway.locations:}")
+ private String locations;
+
+ /**
+ * 迁移sql脚本文件名称的前缀,默认V
+ */
+ @Value("${spring.flyway.sql-migration-prefix:V}")
+ private String sqlMigrationPrefix;
+
+ /**
+ * 迁移sql脚本文件名称的分隔符,默认2个下划线__
+ */
+ @Value("${spring.flyway.sql-migration-separator:__}")
+ private String sqlMigrationSeparator;
+
+ /**
+ * 文本前缀
+ */
+ @Value("${spring.flyway.placeholder-prefix:#(}")
+ private String placeholderPrefix;
+
+ /**
+ * 文本后缀
+ */
+ @Value("${spring.flyway.placeholder-suffix:)}")
+ private String placeholderSuffix;
+
+ /**
+ * 迁移sql脚本文件名称的后缀
+ */
+ @Value("${spring.flyway.sql-migration-suffixes:.sql}")
+ private String sqlMigrationSuffixes;
+
+ /**
+ * 迁移时是否进行校验,默认true
+ */
+ @Value("${spring.flyway.validate-on-migrate:true}")
+ private Boolean validateOnMigrate;
+
+ /**
+ * 当迁移发现数据库非空且存在没有元数据的表时,自动执行基准迁移,新建schema_version表
+ */
+ @Value("${spring.flyway.baseline-on-migrate:true}")
+ private Boolean baselineOnMigrate;
+
+ /**
+ * 是否关闭要清除已有库下的表功能,生产环境必须为true,否则会删库,非常重要!!!
+ */
+ @Value("${spring.flyway.clean-disabled:true}")
+ private Boolean cleanDisabled;
+
+ @Bean
+ public void migrate() {
+ if(!enabled){
+ return;
+ }
+
+ DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource;
+ Map dataSources = ds.getDataSources();
+ dataSources.forEach((k, v) -> {
+ if("master".equals(k)){
+ String databaseType = environment.getProperty("spring.datasource.dynamic.datasource." + k + ".url");
+ if (databaseType != null && databaseType.contains("mysql")) {
+ try {
+ Flyway flyway = Flyway.configure()
+ .dataSource(v)
+ .locations(locations)
+ .encoding(encoding)
+ .sqlMigrationPrefix(sqlMigrationPrefix)
+ .sqlMigrationSeparator(sqlMigrationSeparator)
+ .placeholderPrefix(placeholderPrefix)
+ .placeholderSuffix(placeholderSuffix)
+ .sqlMigrationSuffixes(sqlMigrationSuffixes)
+ .validateOnMigrate(validateOnMigrate)
+ .baselineOnMigrate(baselineOnMigrate)
+ .cleanDisabled(cleanDisabled)
+ .load();
+ flyway.migrate();
+ log.info("【升级提示】平台集成了MySQL库的Flyway,数据库版本自动升级! ");
+ } catch (FlywayException e) {
+ log.error("【升级提示】flyway执行sql脚本失败", e);
+ }
+ } else {
+ log.warn("【升级提示】平台只集成了MySQL库的Flyway,实现了数据库版本自动升级! 其他类型的数据库,您可以考虑手工升级~");
+ }
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git a/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml b/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml
index 783ec60a..3acf0b05 100644
--- a/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml
+++ b/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml
@@ -118,7 +118,9 @@ spring:
resource:
static-locations: classpath:/static/,classpath:/public/
autoconfigure:
- exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
+ exclude:
+ - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
+ - org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration
datasource:
druid:
stat-view-servlet:
@@ -261,7 +263,7 @@ jeecg:
password:
type: STANDALONE
enabled: true
- # ChartGPT对接配置
+ # ai-chat
ai-chat:
# 是否开启;必须。
enabled: false
diff --git a/jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml b/jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml
index 720c4437..0003ed03 100644
--- a/jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml
+++ b/jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml
@@ -118,7 +118,9 @@ spring:
resource:
static-locations: classpath:/static/,classpath:/public/
autoconfigure:
- exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
+ exclude:
+ - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
+ - org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration
datasource:
druid:
stat-view-servlet:
diff --git a/jeecg-module-system/jeecg-system-start/src/main/resources/application-test.yml b/jeecg-module-system/jeecg-system-start/src/main/resources/application-test.yml
index 9aa6f4e1..29970031 100644
--- a/jeecg-module-system/jeecg-system-start/src/main/resources/application-test.yml
+++ b/jeecg-module-system/jeecg-system-start/src/main/resources/application-test.yml
@@ -118,7 +118,9 @@ spring:
resource:
static-locations: classpath:/static/,classpath:/public/
autoconfigure:
- exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
+ exclude:
+ - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
+ - org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration
datasource:
druid:
stat-view-servlet:
diff --git a/jeecg-server-cloud/jeecg-cloud-gateway/pom.xml b/jeecg-server-cloud/jeecg-cloud-gateway/pom.xml
index 48ec3b01..38398678 100644
--- a/jeecg-server-cloud/jeecg-cloud-gateway/pom.xml
+++ b/jeecg-server-cloud/jeecg-cloud-gateway/pom.xml
@@ -73,9 +73,14 @@
com.github.xiaoymin
- knife4j-spring-boot-starter
+ knife4j-openapi2-spring-boot-starter
${knife4j-spring-boot-starter.version}
+
+ org.apache.commons
+ commons-lang3
+ 3.12.0
+
diff --git a/pom.xml b/pom.xml
index 93b3f7e7..90d46a27 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,8 +40,7 @@
2.2.0
1.2.83
1.6.0
- 3.0.3
- 2.0.9
+ 4.4.0
42.2.25
11.2.0.3
@@ -55,10 +54,11 @@
3.5.3.1
4.1.3
1.2.19
- 1.9.5
+ 1.9.6
1.7.2-beta
+ 2.11.0
2.6
2.1.0
3.11.2
@@ -66,10 +66,10 @@
1.12.0
3.11.0
3.2.2
- 1.4.6
+ 1.4.7
1.4.7
8.0.3
- 1.3.4
+ 1.4.0
1.6.1
7.4.0
@@ -365,6 +365,18 @@
commons-lang
commons-lang
+
+ commons-collections
+ commons-collections
+
+
+ commons-logging
+ commons-logging
+
+
+ commons-io
+ commons-io
+
@@ -394,7 +406,15 @@
org.jeecgframework.boot
jeecg-boot-starter-chatgpt
- ${jeecgboot.version}
+ ${jeecgboot.version}
+
+
+
+
+
+ org.flywaydb
+ flyway-core
+ 7.15.0