Procházet zdrojové kódy

update springboot 3.4.7 => 3.5.4
update springcloud 2024.0.0 => 2025.0.0
update springboot-admin 3.4.7 => 3.5.1
update springdoc 2.8.8 => 2.8.9
update lombok 1.18.36 => 1.18.38

疯狂的狮子Li před 11 měsíci
rodič
revize
4557bc30b6

+ 12 - 12
pom.xml

@@ -17,16 +17,16 @@
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
         <java.version>17</java.version>
-        <spring-boot.version>3.4.7</spring-boot.version>
-        <spring-cloud.version>2024.0.0</spring-cloud.version>
-        <spring-boot-admin.version>3.4.7</spring-boot-admin.version>
+        <spring-boot.version>3.5.4</spring-boot.version>
+        <spring-cloud.version>2025.0.0</spring-cloud.version>
+        <spring-boot-admin.version>3.5.1</spring-boot-admin.version>
         <mybatis.version>3.5.16</mybatis.version>
         <mybatis-plus.version>3.5.12</mybatis-plus.version>
         <p6spy.version>3.9.1</p6spy.version>
         <dynamic-ds.version>4.3.1</dynamic-ds.version>
         <velocity.version>2.3</velocity.version>
         <swagger.core.version>2.2.30</swagger.core.version>
-        <springdoc.version>2.8.8</springdoc.version>
+        <springdoc.version>2.8.9</springdoc.version>
         <therapi-javadoc.version>0.15.0</therapi-javadoc.version>
         <fastexcel.version>1.2.0</fastexcel.version>
         <hutool.version>5.8.38</hutool.version>
@@ -34,7 +34,7 @@
         <lock4j.version>2.2.7</lock4j.version>
         <snailjob.version>1.6.0</snailjob.version>
         <satoken.version>1.44.0</satoken.version>
-        <lombok.version>1.18.36</lombok.version>
+        <lombok.version>1.18.38</lombok.version>
         <logstash.version>7.4</logstash.version>
         <easy-es.version>3.0.0</easy-es.version>
         <skywalking-toolkit.version>9.3.0</skywalking-toolkit.version>
@@ -137,13 +137,6 @@
                 <scope>import</scope>
             </dependency>
 
-            <!-- JustAuth 的依赖配置-->
-            <dependency>
-                <groupId>me.zhyd.oauth</groupId>
-                <artifactId>JustAuth</artifactId>
-                <version>${justauth.version}</version>
-            </dependency>
-
             <!-- common 的依赖配置-->
             <dependency>
                 <groupId>org.dromara</groupId>
@@ -324,6 +317,13 @@
                 <version>${sms4j.version}</version>
             </dependency>
 
+            <!-- JustAuth 的依赖配置-->
+            <dependency>
+                <groupId>me.zhyd.oauth</groupId>
+                <artifactId>JustAuth</artifactId>
+                <version>${justauth.version}</version>
+            </dependency>
+
             <!-- 离线IP地址定位库 ip2region -->
             <dependency>
                 <groupId>org.lionsoul</groupId>

+ 0 - 52
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/AsyncConfig.java

@@ -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;
-
-/**
- * 异步配置
- * <p>
- * 如果未使用虚拟线程则生效
- *
- * @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());
-        };
-    }
-
-}

+ 0 - 1
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

+ 10 - 8
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<CryptoFilter> cryptoFilterRegistration(ApiDecryptProperties properties) {
-        FilterRegistrationBean<CryptoFilter> 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);
     }
+
 }

+ 9 - 8
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<XssFilter> xssFilterRegistration() {
-        FilterRegistrationBean<XssFilter> 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();
     }
 
 }

+ 1 - 1
ruoyi-gateway/pom.xml

@@ -19,7 +19,7 @@
         <!-- SpringCloud Gateway -->
         <dependency>
             <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-gateway</artifactId>
+            <artifactId>spring-cloud-starter-gateway-server-webflux</artifactId>
         </dependency>
 
         <dependency>

+ 0 - 6
ruoyi-modules/ruoyi-gen/pom.xml

@@ -69,12 +69,6 @@
             <artifactId>ruoyi-common-security</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>org.anyline</groupId>
-            <artifactId>anyline-environment-spring-data-jdbc</artifactId>
-            <version>${anyline.version}</version>
-        </dependency>
-
         <dependency>
             <groupId>org.anyline</groupId>
             <artifactId>anyline-data-jdbc-mysql</artifactId>

+ 4 - 3
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) ->

+ 5 - 0
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:
     # 国际化资源文件路径

+ 61 - 59
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