org.lionsoul
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/AsyncConfig.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/AsyncConfig.java
deleted file mode 100644
index cd01e33d..00000000
--- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/AsyncConfig.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package org.dromara.common.core.config;
-
-import cn.hutool.core.util.ArrayUtil;
-import org.dromara.common.core.exception.ServiceException;
-import org.dromara.common.core.utils.SpringUtils;
-import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
-import org.springframework.boot.autoconfigure.AutoConfiguration;
-import org.springframework.core.task.VirtualThreadTaskExecutor;
-import org.springframework.scheduling.annotation.AsyncConfigurer;
-
-import java.util.Arrays;
-import java.util.concurrent.Executor;
-
-/**
- * 异步配置
- *
- * 如果未使用虚拟线程则生效
- *
- * @author Lion Li
- */
-@AutoConfiguration
-public class AsyncConfig implements AsyncConfigurer {
-
- /**
- * 自定义 @Async 注解使用系统线程池
- */
- @Override
- public Executor getAsyncExecutor() {
- if(SpringUtils.isVirtual()) {
- return new VirtualThreadTaskExecutor("async-");
- }
- return SpringUtils.getBean("scheduledExecutorService");
- }
-
- /**
- * 异步执行异常处理
- */
- @Override
- public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
- return (throwable, method, objects) -> {
- throwable.printStackTrace();
- StringBuilder sb = new StringBuilder();
- sb.append("Exception message - ").append(throwable.getMessage())
- .append(", Method name - ").append(method.getName());
- if (ArrayUtil.isNotEmpty(objects)) {
- sb.append(", Parameter value - ").append(Arrays.toString(objects));
- }
- throw new ServiceException(sb.toString());
- };
- }
-
-}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-common/ruoyi-common-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index b82846e2..35882667 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/ruoyi-common/ruoyi-common-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -2,4 +2,3 @@ org.dromara.common.core.utils.SpringUtils
org.dromara.common.core.config.ApplicationConfig
org.dromara.common.core.config.ValidatorConfig
org.dromara.common.core.config.ThreadPoolConfig
-org.dromara.common.core.config.AsyncConfig
diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/config/ApiDecryptAutoConfiguration.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/config/ApiDecryptAutoConfiguration.java
index 098f6bc8..38b22f38 100644
--- a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/config/ApiDecryptAutoConfiguration.java
+++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/config/ApiDecryptAutoConfiguration.java
@@ -6,6 +6,7 @@ import org.dromara.common.encrypt.properties.ApiDecryptProperties;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.boot.web.servlet.FilterRegistration;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
@@ -20,13 +21,14 @@ import org.springframework.context.annotation.Bean;
public class ApiDecryptAutoConfiguration {
@Bean
- public FilterRegistrationBean cryptoFilterRegistration(ApiDecryptProperties properties) {
- FilterRegistrationBean registration = new FilterRegistrationBean<>();
- registration.setDispatcherTypes(DispatcherType.REQUEST);
- registration.setFilter(new CryptoFilter(properties));
- registration.addUrlPatterns("/*");
- registration.setName("cryptoFilter");
- registration.setOrder(FilterRegistrationBean.HIGHEST_PRECEDENCE);
- return registration;
+ @FilterRegistration(
+ name = "cryptoFilter",
+ urlPatterns = "/*",
+ order = FilterRegistrationBean.HIGHEST_PRECEDENCE,
+ dispatcherTypes = DispatcherType.REQUEST
+ )
+ public CryptoFilter cryptoFilter(ApiDecryptProperties properties) {
+ return new CryptoFilter(properties);
}
+
}
diff --git a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/FilterConfig.java b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/FilterConfig.java
index 1faf5931..52f946ea 100644
--- a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/FilterConfig.java
+++ b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/FilterConfig.java
@@ -6,6 +6,7 @@ import org.dromara.common.web.filter.XssFilter;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.boot.web.servlet.FilterRegistration;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
@@ -20,14 +21,14 @@ public class FilterConfig {
@Bean
@ConditionalOnProperty(value = "xss.enabled", havingValue = "true")
- public FilterRegistrationBean xssFilterRegistration() {
- FilterRegistrationBean registration = new FilterRegistrationBean<>();
- registration.setDispatcherTypes(DispatcherType.REQUEST);
- registration.setFilter(new XssFilter());
- registration.addUrlPatterns("/*");
- registration.setName("xssFilter");
- registration.setOrder(FilterRegistrationBean.HIGHEST_PRECEDENCE + 1);
- return registration;
+ @FilterRegistration(
+ name = "xssFilter",
+ urlPatterns = "/*",
+ order = FilterRegistrationBean.HIGHEST_PRECEDENCE + 1,
+ dispatcherTypes = DispatcherType.REQUEST
+ )
+ public XssFilter xssFilter() {
+ return new XssFilter();
}
}
diff --git a/ruoyi-gateway/pom.xml b/ruoyi-gateway/pom.xml
index bd51d931..de58ac0b 100644
--- a/ruoyi-gateway/pom.xml
+++ b/ruoyi-gateway/pom.xml
@@ -19,7 +19,7 @@
org.springframework.cloud
- spring-cloud-starter-gateway
+ spring-cloud-starter-gateway-server-webflux
diff --git a/ruoyi-modules/ruoyi-gen/pom.xml b/ruoyi-modules/ruoyi-gen/pom.xml
index 316848d5..a38d250a 100644
--- a/ruoyi-modules/ruoyi-gen/pom.xml
+++ b/ruoyi-modules/ruoyi-gen/pom.xml
@@ -69,12 +69,6 @@
ruoyi-common-security
-
- org.anyline
- anyline-environment-spring-data-jdbc
- ${anyline.version}
-
-
org.anyline
anyline-data-jdbc-mysql
diff --git a/ruoyi-visual/ruoyi-monitor/src/main/java/org/dromara/modules/monitor/config/WebSecurityConfigurer.java b/ruoyi-visual/ruoyi-monitor/src/main/java/org/dromara/modules/monitor/config/WebSecurityConfigurer.java
index 4261afdb..f55da9ea 100644
--- a/ruoyi-visual/ruoyi-monitor/src/main/java/org/dromara/modules/monitor/config/WebSecurityConfigurer.java
+++ b/ruoyi-visual/ruoyi-monitor/src/main/java/org/dromara/modules/monitor/config/WebSecurityConfigurer.java
@@ -12,6 +12,7 @@ import org.springframework.security.config.annotation.web.configurers.HeadersCon
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
import org.springframework.security.web.servlet.util.matcher.MvcRequestMatcher;
+import org.springframework.security.web.servlet.util.matcher.PathPatternRequestMatcher;
import org.springframework.web.servlet.handler.HandlerMappingIntrospector;
/**
@@ -30,7 +31,7 @@ public class WebSecurityConfigurer {
}
@Bean
- public SecurityFilterChain filterChain(HttpSecurity httpSecurity, MvcRequestMatcher.Builder mvc) throws Exception {
+ public SecurityFilterChain filterChain(HttpSecurity httpSecurity, PathPatternRequestMatcher.Builder mvc) throws Exception {
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("redirectTo");
successHandler.setDefaultTargetUrl(adminContextPath + "/");
@@ -40,8 +41,8 @@ public class WebSecurityConfigurer {
header.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable))
.authorizeHttpRequests((authorize) ->
authorize.requestMatchers(
- mvc.pattern(adminContextPath + "/assets/**"),
- mvc.pattern(adminContextPath + "/login")
+ mvc.matcher(adminContextPath + "/assets/**"),
+ mvc.matcher(adminContextPath + "/login")
).permitAll()
.anyRequest().authenticated())
.formLogin((formLogin) ->
diff --git a/script/config/nacos/application-common.yml b/script/config/nacos/application-common.yml
index ce19fa86..b56e67ae 100644
--- a/script/config/nacos/application-common.yml
+++ b/script/config/nacos/application-common.yml
@@ -44,6 +44,11 @@ spring:
# 开启虚拟线程 仅jdk21可用
virtual:
enabled: false
+ task:
+ execution:
+ # 从 springboot 3.5 开始 spring自带线程池
+ # 不再需要 AsyncConfig与ThreadPoolConfig 可直接注入线程池使用
+ thread-name-prefix: async-
# 资源信息
messages:
# 国际化资源文件路径
diff --git a/script/config/nacos/ruoyi-gateway.yml b/script/config/nacos/ruoyi-gateway.yml
index 038e98c5..3ca5d36b 100644
--- a/script/config/nacos/ruoyi-gateway.yml
+++ b/script/config/nacos/ruoyi-gateway.yml
@@ -22,62 +22,64 @@ spring:
gateway:
# 打印请求日志(自定义)
requestLog: true
- discovery:
- locator:
- lowerCaseServiceId: true
- enabled: true
- routes:
- # 认证中心
- - id: ruoyi-auth
- uri: lb://ruoyi-auth
- predicates:
- - Path=/auth/**
- filters:
- - StripPrefix=1
- # 代码生成
- - id: ruoyi-gen
- uri: lb://ruoyi-gen
- predicates:
- - Path=/tool/**
- filters:
- - StripPrefix=1
- # 系统模块
- - id: ruoyi-system
- uri: lb://ruoyi-system
- predicates:
- - Path=/system/**,/monitor/**
- filters:
- - StripPrefix=1
- # 资源服务
- - id: ruoyi-resource
- uri: lb://ruoyi-resource
- predicates:
- - Path=/resource/**
- filters:
- - StripPrefix=1
- # workflow服务
- - id: ruoyi-workflow
- uri: lb://ruoyi-workflow
- predicates:
- - Path=/workflow/**
- filters:
- - StripPrefix=1
- # warm-flow服务
- - id: warm-flow
- uri: lb://ruoyi-workflow
- predicates:
- - Path=/warm-flow-ui/**,/warm-flow/**
- # 演示服务
- - id: ruoyi-demo
- uri: lb://ruoyi-demo
- predicates:
- - Path=/demo/**
- filters:
- - StripPrefix=1
- # MQ演示服务
- - id: ruoyi-test-mq
- uri: lb://ruoyi-test-mq
- predicates:
- - Path=/test-mq/**
- filters:
- - StripPrefix=1
+ server:
+ webflux:
+ discovery:
+ locator:
+ lowerCaseServiceId: true
+ enabled: true
+ routes:
+ # 认证中心
+ - id: ruoyi-auth
+ uri: lb://ruoyi-auth
+ predicates:
+ - Path=/auth/**
+ filters:
+ - StripPrefix=1
+ # 代码生成
+ - id: ruoyi-gen
+ uri: lb://ruoyi-gen
+ predicates:
+ - Path=/tool/**
+ filters:
+ - StripPrefix=1
+ # 系统模块
+ - id: ruoyi-system
+ uri: lb://ruoyi-system
+ predicates:
+ - Path=/system/**,/monitor/**
+ filters:
+ - StripPrefix=1
+ # 资源服务
+ - id: ruoyi-resource
+ uri: lb://ruoyi-resource
+ predicates:
+ - Path=/resource/**
+ filters:
+ - StripPrefix=1
+ # workflow服务
+ - id: ruoyi-workflow
+ uri: lb://ruoyi-workflow
+ predicates:
+ - Path=/workflow/**
+ filters:
+ - StripPrefix=1
+ # warm-flow服务
+ - id: warm-flow
+ uri: lb://ruoyi-workflow
+ predicates:
+ - Path=/warm-flow-ui/**,/warm-flow/**
+ # 演示服务
+ - id: ruoyi-demo
+ uri: lb://ruoyi-demo
+ predicates:
+ - Path=/demo/**
+ filters:
+ - StripPrefix=1
+ # MQ演示服务
+ - id: ruoyi-test-mq
+ uri: lb://ruoyi-test-mq
+ predicates:
+ - Path=/test-mq/**
+ filters:
+ - StripPrefix=1