use of com.giffing.bucket4j.spring.boot.starter.context.properties.Bucket4JConfiguration in project bucket4j-spring-boot-starter by MarcGiffing.
the class Bucket4JAutoConfigurationZuul method createZuulFilter.
private ZuulFilter createZuulFilter(int position) {
Integer filterCount = 0;
if (properties.getFilters().size() >= (position + 1)) {
Bucket4JConfiguration filter = properties.getFilters().get(position);
filterCount++;
FilterConfiguration filterConfig = buildFilterConfig(filter, cacheManager, zuulExpressionParser(), beanFactory);
zuulConfigurationHolder().addFilterConfiguration(filter);
log.info("create-zuul-filter;{};{};{}", position, filter.getCacheName(), filter.getUrl());
return new ZuulRateLimitFilter(filterConfig);
}
return null;
}
use of com.giffing.bucket4j.spring.boot.starter.context.properties.Bucket4JConfiguration in project bucket4j-spring-boot-starter by MarcGiffing.
the class Bucket4JBaseConfiguration method buildFilterConfig.
public FilterConfiguration buildFilterConfig(Bucket4JConfiguration config, CacheManager cacheManager, ExpressionParser expressionParser, BeanFactory beanFactory) {
FilterConfiguration filterConfig = new FilterConfiguration();
filterConfig.setUrl(config.getUrl());
filterConfig.setOrder(config.getFilterOrder());
filterConfig.setStrategy(config.getStrategy());
filterConfig.setHttpResponseBody(config.getHttpResponseBody());
ProxyManager<String> buckets = Bucket4j.extension(JCache.class).proxyManagerForCache(jCache(config.getCacheName(), cacheManager));
config.getRateLimits().forEach(rl -> {
ConfigurationBuilder<?> configBuilder = Bucket4j.configurationBuilder();
for (BandWidthConfig bandWidth : rl.getBandwidths()) {
configBuilder = configBuilder.addLimit(Bandwidth.simple(bandWidth.getCapacity(), Duration.of(bandWidth.getTime(), bandWidth.getUnit())));
}
;
final ConfigurationBuilder<?> configBuilderToUse = configBuilder;
RateLimitCheck rlc = (servletRequest) -> {
boolean skipRateLimit = false;
if (rl.getSkipCondition() != null) {
skipRateLimit = skipCondition(rl, expressionParser, beanFactory).evalute(servletRequest);
}
if (rl.getExecuteCondition() != null && !skipRateLimit) {
skipRateLimit = !executeCondition(rl, expressionParser, beanFactory).evalute(servletRequest);
}
if (!skipRateLimit) {
String key = getKeyFilter(filterConfig.getUrl(), rl, expressionParser, beanFactory).key(servletRequest);
Bucket bucket = buckets.getProxy(key, () -> configBuilderToUse.buildConfiguration());
ConsumptionProbe probe = bucket.tryConsumeAndReturnRemaining(1);
return probe;
}
return null;
};
filterConfig.getRateLimitChecks().add(rlc);
});
return filterConfig;
}
use of com.giffing.bucket4j.spring.boot.starter.context.properties.Bucket4JConfiguration in project bucket4j-spring-boot-starter by MarcGiffing.
the class Bucket4JAutoConfigurationServletFilter method getFilterRegistrationBean.
private FilterRegistrationBean getFilterRegistrationBean(int position) {
Integer filterCount = 0;
if (properties.getFilters().size() >= (position + 1)) {
Bucket4JConfiguration filter = properties.getFilters().get(position);
filterCount++;
FilterConfiguration filterConfig = buildFilterConfig(filter, cacheManager, servletFilterExpressionParser(), beanFactory);
servletConfigurationHolder().addFilterConfiguration(filter);
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setName("bucket4JRequestFilter" + position);
registration.setFilter(new ServletRequestFilter(filterConfig));
registration.addUrlPatterns(filter.getUrl());
registration.setOrder(filter.getFilterOrder());
log.info("create-servlet-filter;{};{};{}", position, filter.getCacheName(), filter.getUrl());
return registration;
}
return null;
}
Aggregations