支持 #issues/I99KFB

This commit is contained in:
王帅 2024-06-15 18:43:34 +08:00
parent 345506d69a
commit 6727373057
3 changed files with 34 additions and 7 deletions

View File

@ -5,6 +5,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@ -61,6 +62,8 @@ import org.ssssssss.magicapi.datasource.web.MagicDataSourceController;
import org.ssssssss.magicapi.function.service.FunctionMagicDynamicRegistry;
import org.ssssssss.magicapi.jsr223.LanguageProvider;
import org.ssssssss.magicapi.modules.DynamicModule;
import org.ssssssss.magicapi.plugin.simple.interceptor.IpLimitRequestInterceptor;
import org.ssssssss.magicapi.servlet.jakarta.WebIPLimitRequestInterceptor;
import org.ssssssss.magicapi.utils.Mapping;
import org.ssssssss.magicapi.utils.WebUtils;
import org.ssssssss.script.MagicResourceLoader;
@ -87,7 +90,11 @@ import java.util.stream.Collectors;
@Configuration
@ConditionalOnClass({RequestMappingHandlerMapping.class})
@EnableConfigurationProperties(MagicAPIProperties.class)
@Import({MagicServletConfiguration.class, MagicJsonAutoConfiguration.class, ApplicationUriPrinter.class, MagicModuleConfiguration.class, MagicDynamicRegistryConfiguration.class})
@Import({MagicServletConfiguration.class,
MagicJsonAutoConfiguration.class,
ApplicationUriPrinter.class,
MagicModuleConfiguration.class,
MagicDynamicRegistryConfiguration.class})
@EnableWebSocket
@AutoConfigureAfter(MagicPluginConfiguration.class)
public class MagicAPIAutoConfiguration implements WebMvcConfigurer, WebSocketConfigurer {
@ -233,6 +240,27 @@ public class MagicAPIAutoConfiguration implements WebMvcConfigurer, WebSocketCon
return new DefaultMagicAPIService(resultProvider, properties.getInstanceId(), magicResourceService, requestMagicDynamicRegistry, functionMagicDynamicRegistry, properties.isThrowException(), properties.getPrefix() ,magicRequestContextHolder, applicationContext);
}
/**
* 注入API调用Service
*/
@Bean
@ConditionalOnProperty(prefix = "magic-api.web-iplimit", name = "enable", havingValue = "true", matchIfMissing = true)
public WebIPLimitRequestInterceptor webIPLimitRequestInterceptor(@Value("${magic-api.web-iplimit.whitelist: }") String whitelist,@Value("${magic-api.web-iplimit.blacklist: }") String blacklist ) {
WebIPLimitRequestInterceptor webIPLimitRequestInterceptor = new WebIPLimitRequestInterceptor();
webIPLimitRequestInterceptor.setBlacklist(blacklist);
webIPLimitRequestInterceptor.setWhitelist(whitelist);
return webIPLimitRequestInterceptor;
}
@Bean
@ConditionalOnProperty(prefix = "magic-api.api-iplimit", name = "enable", havingValue = "true", matchIfMissing = true)
public IpLimitRequestInterceptor ipLimitRequestInterceptor(@Value("${magic-api.api-iplimit.whitelist: }") String whitelist,@Value("${magic-api.api-iplimit.blacklist: }") String blacklist ) {
IpLimitRequestInterceptor ipLimitRequestInterceptor = new IpLimitRequestInterceptor();
ipLimitRequestInterceptor.setBlacklist(blacklist);
ipLimitRequestInterceptor.setWhitelist(whitelist);
return ipLimitRequestInterceptor;
}
/**
* 注册模块类型扩展
*/

View File

@ -6,7 +6,6 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;
import org.ssssssss.magicapi.servlet.javaee.MagicJavaEEServletConfiguration;
@Configuration
@AutoConfigureBefore(MagicAPIAutoConfiguration.class)
@ -31,10 +30,5 @@ public class MagicServletConfiguration {
}
@Configuration
@ConditionalOnClass(name = "javax.servlet.http.HttpServletRequest")
@Import(MagicJavaEEServletConfiguration.class)
static class JavaEEConfiguration{
}
}

View File

@ -22,6 +22,10 @@ public class IpUtils {
return ip == null ? processIp(remoteAddr) : ip;
}
public static String getIP(Function<String, String> getHeader) {
return getRealIP("", getHeader, null);
}
private static String processIp(String ip) {
if (ip != null) {
ip = ip.trim();
@ -45,4 +49,5 @@ public class IpUtils {
private static boolean isUnknown(String ip) {
return StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip.trim());
}
}