Commit cd5e6319d90454c5b0d9f7da020de7d19a9812c8

Authored by YunaiV
1 parent c1df35d3

【增强】一键改包:支持 site、org 等包

yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/YudaoMybatisAutoConfiguration.java
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.mybatis.config; @@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.mybatis.config;
3 import cn.hutool.core.util.StrUtil; 3 import cn.hutool.core.util.StrUtil;
4 import cn.iocoder.yudao.framework.mybatis.core.handler.DefaultDBFieldHandler; 4 import cn.iocoder.yudao.framework.mybatis.core.handler.DefaultDBFieldHandler;
5 import com.baomidou.mybatisplus.annotation.DbType; 5 import com.baomidou.mybatisplus.annotation.DbType;
  6 +import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
6 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; 7 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
7 import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator; 8 import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator;
8 import com.baomidou.mybatisplus.extension.incrementer.*; 9 import com.baomidou.mybatisplus.extension.incrementer.*;
@@ -20,7 +21,7 @@ import org.springframework.core.env.ConfigurableEnvironment; @@ -20,7 +21,7 @@ import org.springframework.core.env.ConfigurableEnvironment;
20 * 21 *
21 * @author 芋道源码 22 * @author 芋道源码
22 */ 23 */
23 -@AutoConfiguration 24 +@AutoConfiguration(before = MybatisPlusAutoConfiguration.class) // 目的:先于 MyBatis Plus 自动配置,避免 @MapperScan 可能扫描不到 Mapper 打印 warn 日志
24 @MapperScan(value = "${yudao.info.base-package}", annotationClass = Mapper.class, 25 @MapperScan(value = "${yudao.info.base-package}", annotationClass = Mapper.class,
25 lazyInitialization = "${mybatis.lazy-initialization:false}") // Mapper 懒加载,目前仅用于单元测试 26 lazyInitialization = "${mybatis.lazy-initialization:false}") // Mapper 懒加载,目前仅用于单元测试
26 public class YudaoMybatisAutoConfiguration { 27 public class YudaoMybatisAutoConfiguration {
yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/config/YudaoRedisAutoConfiguration.java
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.redis.config; @@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.redis.config;
3 import cn.hutool.core.util.ReflectUtil; 3 import cn.hutool.core.util.ReflectUtil;
4 import com.fasterxml.jackson.databind.ObjectMapper; 4 import com.fasterxml.jackson.databind.ObjectMapper;
5 import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; 5 import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
  6 +import org.redisson.spring.starter.RedissonAutoConfigurationV2;
6 import org.springframework.boot.autoconfigure.AutoConfiguration; 7 import org.springframework.boot.autoconfigure.AutoConfiguration;
7 import org.springframework.context.annotation.Bean; 8 import org.springframework.context.annotation.Bean;
8 import org.springframework.data.redis.connection.RedisConnectionFactory; 9 import org.springframework.data.redis.connection.RedisConnectionFactory;
@@ -12,7 +13,7 @@ import org.springframework.data.redis.serializer.RedisSerializer; @@ -12,7 +13,7 @@ import org.springframework.data.redis.serializer.RedisSerializer;
12 /** 13 /**
13 * Redis 配置类 14 * Redis 配置类
14 */ 15 */
15 -@AutoConfiguration 16 +@AutoConfiguration(before = RedissonAutoConfigurationV2.class) // 目的:使用自己定义的 RedisTemplate Bean
16 public class YudaoRedisAutoConfiguration { 17 public class YudaoRedisAutoConfiguration {
17 18
18 /** 19 /**
yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java
@@ -10,8 +10,10 @@ import cn.iocoder.yudao.framework.security.core.service.SecurityFrameworkService @@ -10,8 +10,10 @@ import cn.iocoder.yudao.framework.security.core.service.SecurityFrameworkService
10 import cn.iocoder.yudao.framework.web.core.handler.GlobalExceptionHandler; 10 import cn.iocoder.yudao.framework.web.core.handler.GlobalExceptionHandler;
11 import cn.iocoder.yudao.module.system.api.oauth2.OAuth2TokenApi; 11 import cn.iocoder.yudao.module.system.api.oauth2.OAuth2TokenApi;
12 import cn.iocoder.yudao.module.system.api.permission.PermissionApi; 12 import cn.iocoder.yudao.module.system.api.permission.PermissionApi;
  13 +import jakarta.annotation.Resource;
13 import org.springframework.beans.factory.config.MethodInvokingFactoryBean; 14 import org.springframework.beans.factory.config.MethodInvokingFactoryBean;
14 import org.springframework.boot.autoconfigure.AutoConfiguration; 15 import org.springframework.boot.autoconfigure.AutoConfiguration;
  16 +import org.springframework.boot.autoconfigure.AutoConfigureOrder;
15 import org.springframework.boot.context.properties.EnableConfigurationProperties; 17 import org.springframework.boot.context.properties.EnableConfigurationProperties;
16 import org.springframework.context.annotation.Bean; 18 import org.springframework.context.annotation.Bean;
17 import org.springframework.security.core.context.SecurityContextHolder; 19 import org.springframework.security.core.context.SecurityContextHolder;
@@ -20,8 +22,6 @@ import org.springframework.security.crypto.password.PasswordEncoder; @@ -20,8 +22,6 @@ import org.springframework.security.crypto.password.PasswordEncoder;
20 import org.springframework.security.web.AuthenticationEntryPoint; 22 import org.springframework.security.web.AuthenticationEntryPoint;
21 import org.springframework.security.web.access.AccessDeniedHandler; 23 import org.springframework.security.web.access.AccessDeniedHandler;
22 24
23 -import jakarta.annotation.Resource;  
24 -  
25 /** 25 /**
26 * Spring Security 自动配置类,主要用于相关组件的配置 26 * Spring Security 自动配置类,主要用于相关组件的配置
27 * 27 *
@@ -31,6 +31,7 @@ import jakarta.annotation.Resource; @@ -31,6 +31,7 @@ import jakarta.annotation.Resource;
31 * @author 芋道源码 31 * @author 芋道源码
32 */ 32 */
33 @AutoConfiguration 33 @AutoConfiguration
  34 +@AutoConfigureOrder(-1) // 目的:先于 Spring Security 自动配置,避免一键改包后,org.* 基础包无法生效
34 @EnableConfigurationProperties(SecurityProperties.class) 35 @EnableConfigurationProperties(SecurityProperties.class)
35 public class YudaoSecurityAutoConfiguration { 36 public class YudaoSecurityAutoConfiguration {
36 37
yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java
@@ -5,14 +5,16 @@ import cn.iocoder.yudao.framework.security.core.filter.TokenAuthenticationFilter @@ -5,14 +5,16 @@ import cn.iocoder.yudao.framework.security.core.filter.TokenAuthenticationFilter
5 import cn.iocoder.yudao.framework.web.config.WebProperties; 5 import cn.iocoder.yudao.framework.web.config.WebProperties;
6 import com.google.common.collect.HashMultimap; 6 import com.google.common.collect.HashMultimap;
7 import com.google.common.collect.Multimap; 7 import com.google.common.collect.Multimap;
  8 +import jakarta.annotation.Resource;
  9 +import jakarta.annotation.security.PermitAll;
8 import org.springframework.boot.autoconfigure.AutoConfiguration; 10 import org.springframework.boot.autoconfigure.AutoConfiguration;
  11 +import org.springframework.boot.autoconfigure.AutoConfigureOrder;
9 import org.springframework.context.ApplicationContext; 12 import org.springframework.context.ApplicationContext;
10 import org.springframework.context.annotation.Bean; 13 import org.springframework.context.annotation.Bean;
11 import org.springframework.http.HttpMethod; 14 import org.springframework.http.HttpMethod;
12 import org.springframework.security.authentication.AuthenticationManager; 15 import org.springframework.security.authentication.AuthenticationManager;
13 import org.springframework.security.config.Customizer; 16 import org.springframework.security.config.Customizer;
14 import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; 17 import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
15 -import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;  
16 import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; 18 import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
17 import org.springframework.security.config.annotation.web.builders.HttpSecurity; 19 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
18 import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; 20 import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
@@ -27,8 +29,6 @@ import org.springframework.web.method.HandlerMethod; @@ -27,8 +29,6 @@ import org.springframework.web.method.HandlerMethod;
27 import org.springframework.web.servlet.mvc.method.RequestMappingInfo; 29 import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
28 import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; 30 import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
29 31
30 -import jakarta.annotation.Resource;  
31 -import jakarta.annotation.security.PermitAll;  
32 import java.util.List; 32 import java.util.List;
33 import java.util.Map; 33 import java.util.Map;
34 import java.util.Set; 34 import java.util.Set;
@@ -39,6 +39,7 @@ import java.util.Set; @@ -39,6 +39,7 @@ import java.util.Set;
39 * @author 芋道源码 39 * @author 芋道源码
40 */ 40 */
41 @AutoConfiguration 41 @AutoConfiguration
  42 +@AutoConfigureOrder(-1) // 目的:先于 Spring Security 自动配置,避免一键改包后,org.* 基础包无法生效
42 @EnableMethodSecurity(securedEnabled = true) 43 @EnableMethodSecurity(securedEnabled = true)
43 public class YudaoWebSecurityConfigurerAdapter { 44 public class YudaoWebSecurityConfigurerAdapter {
44 45
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/swagger/config/YudaoSwaggerAutoConfiguration.java
@@ -23,6 +23,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -23,6 +23,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
23 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 23 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
24 import org.springframework.boot.context.properties.EnableConfigurationProperties; 24 import org.springframework.boot.context.properties.EnableConfigurationProperties;
25 import org.springframework.context.annotation.Bean; 25 import org.springframework.context.annotation.Bean;
  26 +import org.springframework.context.annotation.Primary;
26 import org.springframework.http.HttpHeaders; 27 import org.springframework.http.HttpHeaders;
27 28
28 import java.util.HashMap; 29 import java.util.HashMap;
@@ -91,6 +92,7 @@ public class YudaoSwaggerAutoConfiguration { @@ -91,6 +92,7 @@ public class YudaoSwaggerAutoConfiguration {
91 * 自定义 OpenAPI 处理器 92 * 自定义 OpenAPI 处理器
92 */ 93 */
93 @Bean 94 @Bean
  95 + @Primary // 目的:以我们创建的 OpenAPIService Bean 为主,避免一键改包后,启动报错!
94 public OpenAPIService openApiBuilder(Optional<OpenAPI> openAPI, 96 public OpenAPIService openApiBuilder(Optional<OpenAPI> openAPI,
95 SecurityService securityParser, 97 SecurityService securityParser,
96 SpringDocConfigProperties springDocConfigProperties, 98 SpringDocConfigProperties springDocConfigProperties,
@@ -98,7 +100,6 @@ public class YudaoSwaggerAutoConfiguration { @@ -98,7 +100,6 @@ public class YudaoSwaggerAutoConfiguration {
98 Optional<List<OpenApiBuilderCustomizer>> openApiBuilderCustomizers, 100 Optional<List<OpenApiBuilderCustomizer>> openApiBuilderCustomizers,
99 Optional<List<ServerBaseUrlCustomizer>> serverBaseUrlCustomizers, 101 Optional<List<ServerBaseUrlCustomizer>> serverBaseUrlCustomizers,
100 Optional<JavadocProvider> javadocProvider) { 102 Optional<JavadocProvider> javadocProvider) {
101 -  
102 return new OpenAPIService(openAPI, securityParser, springDocConfigProperties, 103 return new OpenAPIService(openAPI, securityParser, springDocConfigProperties,
103 propertyResolverUtils, openApiBuilderCustomizers, serverBaseUrlCustomizers, javadocProvider); 104 propertyResolverUtils, openApiBuilderCustomizers, serverBaseUrlCustomizers, javadocProvider);
104 } 105 }
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/YudaoWebAutoConfiguration.java
@@ -9,6 +9,7 @@ import cn.iocoder.yudao.framework.web.core.handler.GlobalResponseBodyHandler; @@ -9,6 +9,7 @@ import cn.iocoder.yudao.framework.web.core.handler.GlobalResponseBodyHandler;
9 import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; 9 import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
10 import org.springframework.beans.factory.annotation.Value; 10 import org.springframework.beans.factory.annotation.Value;
11 import org.springframework.boot.autoconfigure.AutoConfiguration; 11 import org.springframework.boot.autoconfigure.AutoConfiguration;
  12 +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
12 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 13 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
13 import org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration; 14 import org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration;
14 import org.springframework.boot.context.properties.EnableConfigurationProperties; 15 import org.springframework.boot.context.properties.EnableConfigurationProperties;
@@ -122,7 +123,9 @@ public class YudaoWebAutoConfiguration implements WebMvcConfigurer { @@ -122,7 +123,9 @@ public class YudaoWebAutoConfiguration implements WebMvcConfigurer {
122 * @param restTemplateBuilder {@link RestTemplateAutoConfiguration#restTemplateBuilder} 123 * @param restTemplateBuilder {@link RestTemplateAutoConfiguration#restTemplateBuilder}
123 */ 124 */
124 @Bean 125 @Bean
  126 + @ConditionalOnMissingBean
125 public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) { 127 public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
126 return restTemplateBuilder.build(); 128 return restTemplateBuilder.build();
127 } 129 }
  130 +
128 } 131 }
yudao-server/src/test/java/cn/iocoder/yudao/ProjectReactor.java
@@ -34,7 +34,8 @@ public class ProjectReactor { @@ -34,7 +34,8 @@ public class ProjectReactor {
34 * 白名单文件,不进行重写,避免出问题 34 * 白名单文件,不进行重写,避免出问题
35 */ 35 */
36 private static final Set<String> WHITE_FILE_TYPES = SetUtils.asSet("gif", "jpg", "svg", "png", // 图片 36 private static final Set<String> WHITE_FILE_TYPES = SetUtils.asSet("gif", "jpg", "svg", "png", // 图片
37 - "eot", "woff2", "ttf", "woff"); // 字体 37 + "eot", "woff2", "ttf", "woff", // 字体
  38 + "xdb"); // IP 库
38 39
39 public static void main(String[] args) { 40 public static void main(String[] args) {
40 long start = System.currentTimeMillis(); 41 long start = System.currentTimeMillis();