mirror of
https://gitee.com/dromara/RuoYi-Cloud-Plus.git
synced 2025-10-14 06:00:23 +00:00
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
This commit is contained in:
24
pom.xml
24
pom.xml
@@ -17,16 +17,16 @@
|
|||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||||
<java.version>17</java.version>
|
<java.version>17</java.version>
|
||||||
<spring-boot.version>3.4.7</spring-boot.version>
|
<spring-boot.version>3.5.4</spring-boot.version>
|
||||||
<spring-cloud.version>2024.0.0</spring-cloud.version>
|
<spring-cloud.version>2025.0.0</spring-cloud.version>
|
||||||
<spring-boot-admin.version>3.4.7</spring-boot-admin.version>
|
<spring-boot-admin.version>3.5.1</spring-boot-admin.version>
|
||||||
<mybatis.version>3.5.16</mybatis.version>
|
<mybatis.version>3.5.16</mybatis.version>
|
||||||
<mybatis-plus.version>3.5.12</mybatis-plus.version>
|
<mybatis-plus.version>3.5.12</mybatis-plus.version>
|
||||||
<p6spy.version>3.9.1</p6spy.version>
|
<p6spy.version>3.9.1</p6spy.version>
|
||||||
<dynamic-ds.version>4.3.1</dynamic-ds.version>
|
<dynamic-ds.version>4.3.1</dynamic-ds.version>
|
||||||
<velocity.version>2.3</velocity.version>
|
<velocity.version>2.3</velocity.version>
|
||||||
<swagger.core.version>2.2.30</swagger.core.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>
|
<therapi-javadoc.version>0.15.0</therapi-javadoc.version>
|
||||||
<fastexcel.version>1.2.0</fastexcel.version>
|
<fastexcel.version>1.2.0</fastexcel.version>
|
||||||
<hutool.version>5.8.38</hutool.version>
|
<hutool.version>5.8.38</hutool.version>
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
<lock4j.version>2.2.7</lock4j.version>
|
<lock4j.version>2.2.7</lock4j.version>
|
||||||
<snailjob.version>1.6.0</snailjob.version>
|
<snailjob.version>1.6.0</snailjob.version>
|
||||||
<satoken.version>1.44.0</satoken.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>
|
<logstash.version>7.4</logstash.version>
|
||||||
<easy-es.version>3.0.0</easy-es.version>
|
<easy-es.version>3.0.0</easy-es.version>
|
||||||
<skywalking-toolkit.version>9.3.0</skywalking-toolkit.version>
|
<skywalking-toolkit.version>9.3.0</skywalking-toolkit.version>
|
||||||
@@ -137,13 +137,6 @@
|
|||||||
<scope>import</scope>
|
<scope>import</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- JustAuth 的依赖配置-->
|
|
||||||
<dependency>
|
|
||||||
<groupId>me.zhyd.oauth</groupId>
|
|
||||||
<artifactId>JustAuth</artifactId>
|
|
||||||
<version>${justauth.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- common 的依赖配置-->
|
<!-- common 的依赖配置-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.dromara</groupId>
|
<groupId>org.dromara</groupId>
|
||||||
@@ -324,6 +317,13 @@
|
|||||||
<version>${sms4j.version}</version>
|
<version>${sms4j.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- JustAuth 的依赖配置-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>me.zhyd.oauth</groupId>
|
||||||
|
<artifactId>JustAuth</artifactId>
|
||||||
|
<version>${justauth.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- 离线IP地址定位库 ip2region -->
|
<!-- 离线IP地址定位库 ip2region -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.lionsoul</groupId>
|
<groupId>org.lionsoul</groupId>
|
||||||
|
@@ -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());
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -2,4 +2,3 @@ org.dromara.common.core.utils.SpringUtils
|
|||||||
org.dromara.common.core.config.ApplicationConfig
|
org.dromara.common.core.config.ApplicationConfig
|
||||||
org.dromara.common.core.config.ValidatorConfig
|
org.dromara.common.core.config.ValidatorConfig
|
||||||
org.dromara.common.core.config.ThreadPoolConfig
|
org.dromara.common.core.config.ThreadPoolConfig
|
||||||
org.dromara.common.core.config.AsyncConfig
|
|
||||||
|
@@ -6,6 +6,7 @@ import org.dromara.common.encrypt.properties.ApiDecryptProperties;
|
|||||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
|
import org.springframework.boot.web.servlet.FilterRegistration;
|
||||||
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
|
|
||||||
@@ -20,13 +21,14 @@ import org.springframework.context.annotation.Bean;
|
|||||||
public class ApiDecryptAutoConfiguration {
|
public class ApiDecryptAutoConfiguration {
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public FilterRegistrationBean<CryptoFilter> cryptoFilterRegistration(ApiDecryptProperties properties) {
|
@FilterRegistration(
|
||||||
FilterRegistrationBean<CryptoFilter> registration = new FilterRegistrationBean<>();
|
name = "cryptoFilter",
|
||||||
registration.setDispatcherTypes(DispatcherType.REQUEST);
|
urlPatterns = "/*",
|
||||||
registration.setFilter(new CryptoFilter(properties));
|
order = FilterRegistrationBean.HIGHEST_PRECEDENCE,
|
||||||
registration.addUrlPatterns("/*");
|
dispatcherTypes = DispatcherType.REQUEST
|
||||||
registration.setName("cryptoFilter");
|
)
|
||||||
registration.setOrder(FilterRegistrationBean.HIGHEST_PRECEDENCE);
|
public CryptoFilter cryptoFilter(ApiDecryptProperties properties) {
|
||||||
return registration;
|
return new CryptoFilter(properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -6,6 +6,7 @@ import org.dromara.common.web.filter.XssFilter;
|
|||||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
|
import org.springframework.boot.web.servlet.FilterRegistration;
|
||||||
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
|
|
||||||
@@ -20,14 +21,14 @@ public class FilterConfig {
|
|||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@ConditionalOnProperty(value = "xss.enabled", havingValue = "true")
|
@ConditionalOnProperty(value = "xss.enabled", havingValue = "true")
|
||||||
public FilterRegistrationBean<XssFilter> xssFilterRegistration() {
|
@FilterRegistration(
|
||||||
FilterRegistrationBean<XssFilter> registration = new FilterRegistrationBean<>();
|
name = "xssFilter",
|
||||||
registration.setDispatcherTypes(DispatcherType.REQUEST);
|
urlPatterns = "/*",
|
||||||
registration.setFilter(new XssFilter());
|
order = FilterRegistrationBean.HIGHEST_PRECEDENCE + 1,
|
||||||
registration.addUrlPatterns("/*");
|
dispatcherTypes = DispatcherType.REQUEST
|
||||||
registration.setName("xssFilter");
|
)
|
||||||
registration.setOrder(FilterRegistrationBean.HIGHEST_PRECEDENCE + 1);
|
public XssFilter xssFilter() {
|
||||||
return registration;
|
return new XssFilter();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -19,7 +19,7 @@
|
|||||||
<!-- SpringCloud Gateway -->
|
<!-- SpringCloud Gateway -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.cloud</groupId>
|
<groupId>org.springframework.cloud</groupId>
|
||||||
<artifactId>spring-cloud-starter-gateway</artifactId>
|
<artifactId>spring-cloud-starter-gateway-server-webflux</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@@ -69,12 +69,6 @@
|
|||||||
<artifactId>ruoyi-common-security</artifactId>
|
<artifactId>ruoyi-common-security</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.anyline</groupId>
|
|
||||||
<artifactId>anyline-environment-spring-data-jdbc</artifactId>
|
|
||||||
<version>${anyline.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.anyline</groupId>
|
<groupId>org.anyline</groupId>
|
||||||
<artifactId>anyline-data-jdbc-mysql</artifactId>
|
<artifactId>anyline-data-jdbc-mysql</artifactId>
|
||||||
|
@@ -12,6 +12,7 @@ import org.springframework.security.config.annotation.web.configurers.HeadersCon
|
|||||||
import org.springframework.security.web.SecurityFilterChain;
|
import org.springframework.security.web.SecurityFilterChain;
|
||||||
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
|
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
|
||||||
import org.springframework.security.web.servlet.util.matcher.MvcRequestMatcher;
|
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;
|
import org.springframework.web.servlet.handler.HandlerMappingIntrospector;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -30,7 +31,7 @@ public class WebSecurityConfigurer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@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();
|
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
|
||||||
successHandler.setTargetUrlParameter("redirectTo");
|
successHandler.setTargetUrlParameter("redirectTo");
|
||||||
successHandler.setDefaultTargetUrl(adminContextPath + "/");
|
successHandler.setDefaultTargetUrl(adminContextPath + "/");
|
||||||
@@ -40,8 +41,8 @@ public class WebSecurityConfigurer {
|
|||||||
header.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable))
|
header.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable))
|
||||||
.authorizeHttpRequests((authorize) ->
|
.authorizeHttpRequests((authorize) ->
|
||||||
authorize.requestMatchers(
|
authorize.requestMatchers(
|
||||||
mvc.pattern(adminContextPath + "/assets/**"),
|
mvc.matcher(adminContextPath + "/assets/**"),
|
||||||
mvc.pattern(adminContextPath + "/login")
|
mvc.matcher(adminContextPath + "/login")
|
||||||
).permitAll()
|
).permitAll()
|
||||||
.anyRequest().authenticated())
|
.anyRequest().authenticated())
|
||||||
.formLogin((formLogin) ->
|
.formLogin((formLogin) ->
|
||||||
|
@@ -44,6 +44,11 @@ spring:
|
|||||||
# 开启虚拟线程 仅jdk21可用
|
# 开启虚拟线程 仅jdk21可用
|
||||||
virtual:
|
virtual:
|
||||||
enabled: false
|
enabled: false
|
||||||
|
task:
|
||||||
|
execution:
|
||||||
|
# 从 springboot 3.5 开始 spring自带线程池
|
||||||
|
# 不再需要 AsyncConfig与ThreadPoolConfig 可直接注入线程池使用
|
||||||
|
thread-name-prefix: async-
|
||||||
# 资源信息
|
# 资源信息
|
||||||
messages:
|
messages:
|
||||||
# 国际化资源文件路径
|
# 国际化资源文件路径
|
||||||
|
@@ -22,62 +22,64 @@ spring:
|
|||||||
gateway:
|
gateway:
|
||||||
# 打印请求日志(自定义)
|
# 打印请求日志(自定义)
|
||||||
requestLog: true
|
requestLog: true
|
||||||
discovery:
|
server:
|
||||||
locator:
|
webflux:
|
||||||
lowerCaseServiceId: true
|
discovery:
|
||||||
enabled: true
|
locator:
|
||||||
routes:
|
lowerCaseServiceId: true
|
||||||
# 认证中心
|
enabled: true
|
||||||
- id: ruoyi-auth
|
routes:
|
||||||
uri: lb://ruoyi-auth
|
# 认证中心
|
||||||
predicates:
|
- id: ruoyi-auth
|
||||||
- Path=/auth/**
|
uri: lb://ruoyi-auth
|
||||||
filters:
|
predicates:
|
||||||
- StripPrefix=1
|
- Path=/auth/**
|
||||||
# 代码生成
|
filters:
|
||||||
- id: ruoyi-gen
|
- StripPrefix=1
|
||||||
uri: lb://ruoyi-gen
|
# 代码生成
|
||||||
predicates:
|
- id: ruoyi-gen
|
||||||
- Path=/tool/**
|
uri: lb://ruoyi-gen
|
||||||
filters:
|
predicates:
|
||||||
- StripPrefix=1
|
- Path=/tool/**
|
||||||
# 系统模块
|
filters:
|
||||||
- id: ruoyi-system
|
- StripPrefix=1
|
||||||
uri: lb://ruoyi-system
|
# 系统模块
|
||||||
predicates:
|
- id: ruoyi-system
|
||||||
- Path=/system/**,/monitor/**
|
uri: lb://ruoyi-system
|
||||||
filters:
|
predicates:
|
||||||
- StripPrefix=1
|
- Path=/system/**,/monitor/**
|
||||||
# 资源服务
|
filters:
|
||||||
- id: ruoyi-resource
|
- StripPrefix=1
|
||||||
uri: lb://ruoyi-resource
|
# 资源服务
|
||||||
predicates:
|
- id: ruoyi-resource
|
||||||
- Path=/resource/**
|
uri: lb://ruoyi-resource
|
||||||
filters:
|
predicates:
|
||||||
- StripPrefix=1
|
- Path=/resource/**
|
||||||
# workflow服务
|
filters:
|
||||||
- id: ruoyi-workflow
|
- StripPrefix=1
|
||||||
uri: lb://ruoyi-workflow
|
# workflow服务
|
||||||
predicates:
|
- id: ruoyi-workflow
|
||||||
- Path=/workflow/**
|
uri: lb://ruoyi-workflow
|
||||||
filters:
|
predicates:
|
||||||
- StripPrefix=1
|
- Path=/workflow/**
|
||||||
# warm-flow服务
|
filters:
|
||||||
- id: warm-flow
|
- StripPrefix=1
|
||||||
uri: lb://ruoyi-workflow
|
# warm-flow服务
|
||||||
predicates:
|
- id: warm-flow
|
||||||
- Path=/warm-flow-ui/**,/warm-flow/**
|
uri: lb://ruoyi-workflow
|
||||||
# 演示服务
|
predicates:
|
||||||
- id: ruoyi-demo
|
- Path=/warm-flow-ui/**,/warm-flow/**
|
||||||
uri: lb://ruoyi-demo
|
# 演示服务
|
||||||
predicates:
|
- id: ruoyi-demo
|
||||||
- Path=/demo/**
|
uri: lb://ruoyi-demo
|
||||||
filters:
|
predicates:
|
||||||
- StripPrefix=1
|
- Path=/demo/**
|
||||||
# MQ演示服务
|
filters:
|
||||||
- id: ruoyi-test-mq
|
- StripPrefix=1
|
||||||
uri: lb://ruoyi-test-mq
|
# MQ演示服务
|
||||||
predicates:
|
- id: ruoyi-test-mq
|
||||||
- Path=/test-mq/**
|
uri: lb://ruoyi-test-mq
|
||||||
filters:
|
predicates:
|
||||||
- StripPrefix=1
|
- Path=/test-mq/**
|
||||||
|
filters:
|
||||||
|
- StripPrefix=1
|
||||||
|
Reference in New Issue
Block a user