Commit 0cc4790c authored by lihaipeng's avatar lihaipeng

gateway UnififiLimitResolver

parent d1f61698
package com.unififi.config;
import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import reactor.core.publisher.Mono;
/**
* @author lihaipeng
......@@ -113,9 +110,4 @@ public class GatewayConfiguration {
// GatewayRuleManager.loadRules(rules);
// }
@Bean
KeyResolver ipKeyResolver() {
return exchange -> Mono.just(exchange.getRequest().getRemoteAddress().getHostName());
}
}
\ No newline at end of file
package com.unififi.config;
import com.unififi.constant.Constants;
import com.unififi.util.ServletUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import reactor.core.publisher.Mono;
/**
* 限流解析器
*
* @author lihaipeng
* @date 2020-09-24
*/
@Configuration
public class UnififiLimitResolver {
@Value("${spring.application.name:unififi-gateway}")
private String applicationName;
@Primary
@Bean
public KeyResolver ipKeyResolver() {
return (exchange) -> {
String hostname = exchange.getRequest().getRemoteAddress().getHostName();
if (StringUtils.isEmpty(hostname)) {
return Mono.empty();
} else {
return Mono.just(applicationName + Constants.COLON + hostname);
}
};
}
@Bean
public KeyResolver userKeyResolver() {
return (exchange) -> {
String username = exchange.getRequest().getHeaders().getFirst(ServletUtils.HEADER_KEY_UNIFIFI_USERNAME);
if (StringUtils.isEmpty(username)) {
return Mono.empty();
} else {
return Mono.just(applicationName + Constants.COLON + username);
}
};
}
@Bean
KeyResolver apiKeyResolver() {
return (exchange) -> {
String path = exchange.getRequest().getPath().value();
if (StringUtils.isEmpty(path)) {
return Mono.empty();
} else {
return Mono.just(applicationName + Constants.COLON + path);
}
};
}
}
......@@ -126,4 +126,4 @@ unififi:
unififi-demo1-service-user-get: user:get
unififi-demo2-service-user-get: user:get
timezone:
enabled: true
\ No newline at end of file
enabled: false
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment