diff --git a/pom.xml b/pom.xml index be42b048..9a15147f 100644 --- a/pom.xml +++ b/pom.xml @@ -17,16 +17,16 @@ UTF-8 UTF-8 17 - 3.4.7 - 2024.0.0 - 3.4.7 + 3.5.4 + 2025.0.0 + 3.5.1 3.5.16 3.5.12 3.9.1 4.3.1 2.3 2.2.30 - 2.8.8 + 2.8.9 0.15.0 1.2.0 5.8.38 @@ -34,7 +34,7 @@ 2.2.7 1.6.0 1.44.0 - 1.18.36 + 1.18.38 7.4 3.0.0 9.3.0 @@ -137,13 +137,6 @@ import - - - me.zhyd.oauth - JustAuth - ${justauth.version} - - org.dromara @@ -324,6 +317,13 @@ ${sms4j.version} + + + me.zhyd.oauth + JustAuth + ${justauth.version} + + 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