Skip to content

Commit

Permalink
Minor refactor and upgrade version
Browse files Browse the repository at this point in the history
  • Loading branch information
marcosbarbero committed Sep 13, 2017
1 parent 43c7ee1 commit 79df8f3
Show file tree
Hide file tree
Showing 18 changed files with 69 additions and 38 deletions.
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Add the dependency on pom.xml
<dependency>
<groupId>com.marcosbarbero.cloud</groupId>
<artifactId>spring-cloud-zuul-ratelimit</artifactId>
<version>1.3.1.RELEASE</version>
<version>1.3.2.RELEASE</version>
</dependency>
```

Expand Down Expand Up @@ -110,11 +110,11 @@ Further Customization
---

If your application needs to control the key strategy beyond the options offered by the type property then you can
supply a custom `RateLimitKeyer` implementation adding further qualifiers or something entirely different:
supply a custom `RateLimitKeyGenerator` implementation adding further qualifiers or something entirely different:

@Bean
public RateLimitKeyer customRateLimitKeyer(final RateLimitProperties properties) {
return new DefaultRateLimitKeyer(properties) {
public RateLimitKeyGenerator rateLimitKeyGenerator(final RateLimitProperties properties) {
return new DefaultRateLimitKeyGenerator(properties) {
@Override
public String key(HttpServletRequest request, Route route, RateLimitProperties.Policy policy) {
return super.key(request, route, policy) + ":" + request.getMethod();
Expand Down
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
]]>
</description>
<url>https://github.com/marcosbarbero/spring-cloud-zuul-ratelimit</url>
<version>1.3.1.RELEASE</version>
<version>1.3.2.RELEASE</version>

<licenses>
<license>
Expand All @@ -34,7 +34,7 @@
<maven.compiler.source>1.8</maven.compiler.source>
<java.version>1.8</java.version>
<nexus-staging-maven-plugin.version>1.6.3</nexus-staging-maven-plugin.version>
<global.version>1.3.1.RELEASE</global.version>
<global.version>1.3.2.RELEASE</global.version>
<jacoco.version>0.7.9</jacoco.version>
<jacoco.it.execution.data.file>
${project.build.directory}/coverage-reports/jacoco.exec
Expand Down
2 changes: 1 addition & 1 deletion spring-cloud-starter-zuul-ratelimit/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>spring-cloud-zuul-ratelimit-parent</artifactId>
<groupId>com.marcosbarbero.cloud</groupId>
<version>1.3.1.RELEASE</version>
<version>1.3.2.RELEASE</version>
<relativePath>..</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
Expand Down
2 changes: 1 addition & 1 deletion spring-cloud-zuul-ratelimit-core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.marcosbarbero.cloud</groupId>
<artifactId>spring-cloud-zuul-ratelimit-parent</artifactId>
<version>1.3.1.RELEASE</version>
<version>1.3.2.RELEASE</version>
<relativePath>..</relativePath>
</parent>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.repository.ConsulRateLimiter;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.repository.InMemoryRateLimiter;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.repository.RedisRateLimiter;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.repository.springdata.IRateLimiterRepository;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.repository.springdata.SpringDataRateLimiter;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.repository.springdata.JpaRateLimiter;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.repository.springdata.RateLimiterRepository;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.filters.RateLimitFilter;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
Expand Down Expand Up @@ -63,7 +63,7 @@ public RateLimitFilter rateLimiterFilter(final RateLimiter rateLimiter,

@Bean
@ConditionalOnMissingBean(RateLimitKeyGenerator.class)
public RateLimitKeyGenerator rateLimitIdentifier(final RateLimitProperties properties) {
public RateLimitKeyGenerator ratelimitKeyGenerator(final RateLimitProperties properties) {
return new DefaultRateLimitKeyGenerator(properties);
}

Expand Down Expand Up @@ -102,8 +102,8 @@ public RateLimiter consultRateLimiter(final ConsulClient consulClient, final Obj
public static class SpringDataConfiguration {

@Bean
public RateLimiter springDataRateLimiter(IRateLimiterRepository rateLimiterRepository) {
return new SpringDataRateLimiter(rateLimiterRepository);
public RateLimiter springDataRateLimiter(RateLimiterRepository rateLimiterRepository) {
return new JpaRateLimiter(rateLimiterRepository);
}

}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,28 @@
package com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config;

import com.google.common.net.HttpHeaders;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.properties.RateLimitProperties;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.properties.RateLimitProperties.Policy.Type;
import lombok.RequiredArgsConstructor;

import org.springframework.cloud.netflix.zuul.filters.Route;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.StringJoiner;

import javax.servlet.http.HttpServletRequest;

import lombok.RequiredArgsConstructor;

import static com.google.common.net.HttpHeaders.X_FORWARDED_FOR;


@RequiredArgsConstructor
public class DefaultRateLimitKeyGenerator implements RateLimitKeyGenerator {

private static final String ANONYMOUS_USER = "anonymous";

private final RateLimitProperties properties;

@Override
public String key(final HttpServletRequest request, final Route route, final RateLimitProperties.Policy policy) {
final List<Type> types = policy.getType();
final StringJoiner joiner = new StringJoiner(":");
Expand All @@ -37,8 +43,8 @@ public String key(final HttpServletRequest request, final Route route, final Rat
}

private String getRemoteAddr(final HttpServletRequest request) {
if (properties.isBehindProxy() && request.getHeader(HttpHeaders.X_FORWARDED_FOR) != null) {
return request.getHeader(HttpHeaders.X_FORWARDED_FOR);
if (properties.isBehindProxy() && request.getHeader(X_FORWARDED_FOR) != null) {
return request.getHeader(X_FORWARDED_FOR);
}
return request.getRemoteAddr();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,25 @@
package com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config;

import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.properties.RateLimitProperties;

import org.springframework.cloud.netflix.zuul.filters.Route;

import javax.servlet.http.HttpServletRequest;

/**
* Key generator for rate limit control.
*/
public interface RateLimitKeyGenerator {

/**
* Returns a key based on {@link HttpServletRequest}, {@link Route} and
* {@link com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.properties.RateLimitProperties.Policy}
*
* @param request The {@link HttpServletRequest}
* @param route The {@link Route}
* @param policy The
* {@link com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.properties.RateLimitProperties.Policy}
* @return Generated key
*/
String key(HttpServletRequest request, Route route, RateLimitProperties.Policy policy);
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@
* @since 2017-06-23
*/
@RequiredArgsConstructor
public class SpringDataRateLimiter extends AbstractRateLimiter {
public class JpaRateLimiter extends AbstractRateLimiter {

private final IRateLimiterRepository repository;
private final RateLimiterRepository repository;

@Override
protected Rate getRate(String key) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.repository.springdata;

import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.Rate;

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface IRateLimiterRepository extends CrudRepository<Rate, String> {
public interface RateLimiterRepository extends CrudRepository<Rate, String> {

}
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
package com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit;

import static com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.properties.RateLimitProperties.PREFIX;

import com.ecwid.consul.v1.ConsulClient;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.DefaultRateLimitKeyGenerator;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.RateLimitKeyGenerator;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.RateLimiter;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.repository.ConsulRateLimiter;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.repository.InMemoryRateLimiter;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.repository.RedisRateLimiter;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.filters.RateLimitFilter;

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
Expand All @@ -21,6 +22,8 @@
import org.springframework.mock.web.MockServletContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;

import static com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.properties.RateLimitProperties.PREFIX;

/**
* @author Marcos Barbero
* @since 2017-06-28
Expand Down Expand Up @@ -89,6 +92,14 @@ public void testInMemoryRateLimiterByProperty() {
Assert.assertTrue(this.context.getBean(RateLimiter.class) instanceof InMemoryRateLimiter);
}

@Test
public void testDefaultRateLimitKeyGenerator() {
this.context.refresh();

Assert.assertTrue(this.context.getBean(RateLimiter.class) instanceof InMemoryRateLimiter);
Assert.assertTrue(this.context.getBean(RateLimitKeyGenerator.class) instanceof DefaultRateLimitKeyGenerator);
}

@Configuration
public static class Conf {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@
import static org.mockito.Mockito.when;

import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.Rate;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.repository.springdata.IRateLimiterRepository;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.repository.springdata.SpringDataRateLimiter;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.repository.springdata.JpaRateLimiter;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.repository.springdata.RateLimiterRepository;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.junit.Before;
Expand All @@ -15,13 +16,13 @@
* @author Marcos Barbero
* @since 2017-06-30
*/
public class SpringDataLimitFilterTest extends BaseRateLimitFilterTest {
public class JpaLimitFilterTest extends BaseRateLimitFilterTest {

@Before
@Override
public void setUp() {
Map<String, Rate> repository = new ConcurrentHashMap<>();
IRateLimiterRepository rateLimiterRepository = mock(IRateLimiterRepository.class);
RateLimiterRepository rateLimiterRepository = mock(RateLimiterRepository.class);
when(rateLimiterRepository.save(any(Rate.class))).thenAnswer(invocationOnMock -> {
Rate rate = invocationOnMock.getArgument(0);
repository.put(rate.getKey(), rate);
Expand All @@ -31,7 +32,7 @@ public void setUp() {
String key = invocationOnMock.getArgument(0);
return repository.get(key);
});
this.setRateLimiter(new SpringDataRateLimiter(rateLimiterRepository));
this.setRateLimiter(new JpaRateLimiter(rateLimiterRepository));
super.setUp();
}
}
2 changes: 1 addition & 1 deletion spring-cloud-zuul-ratelimit-coverage/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>spring-cloud-zuul-ratelimit-parent</artifactId>
<groupId>com.marcosbarbero.cloud</groupId>
<version>1.3.1.RELEASE</version>
<version>1.3.2.RELEASE</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion spring-cloud-zuul-ratelimit-dependencies/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

<groupId>com.marcosbarbero.cloud</groupId>
<artifactId>spring-cloud-zuul-ratelimit-dependencies</artifactId>
<version>1.3.1.RELEASE</version>
<version>1.3.2.RELEASE</version>
<packaging>pom</packaging>
<url>https://github.com/marcosbarbero/spring-cloud-zuul-ratelimit</url>

Expand Down
2 changes: 1 addition & 1 deletion spring-cloud-zuul-ratelimit-tests/consul/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>spring-cloud-zuul-ratelimit-parent</artifactId>
<groupId>com.marcosbarbero.cloud</groupId>
<version>1.3.1.RELEASE</version>
<version>1.3.2.RELEASE</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
Expand Down
2 changes: 1 addition & 1 deletion spring-cloud-zuul-ratelimit-tests/inmemory/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<artifactId>spring-cloud-zuul-ratelimit-parent</artifactId>
<groupId>com.marcosbarbero.cloud</groupId>
<version>1.3.1.RELEASE</version>
<version>1.3.2.RELEASE</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion spring-cloud-zuul-ratelimit-tests/redis/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>spring-cloud-zuul-ratelimit-parent</artifactId>
<groupId>com.marcosbarbero.cloud</groupId>
<version>1.3.1.RELEASE</version>
<version>1.3.2.RELEASE</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion spring-cloud-zuul-ratelimit-tests/springdata/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<artifactId>spring-cloud-zuul-ratelimit-parent</artifactId>
<groupId>com.marcosbarbero.cloud</groupId>
<version>1.3.1.RELEASE</version>
<version>1.3.2.RELEASE</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.RateLimiter;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.properties.RateLimitProperties;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.repository.springdata.SpringDataRateLimiter;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.repository.springdata.JpaRateLimiter;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.filters.RateLimitFilter;
import com.marcosbarbero.tests.SpringDataApplication;
import java.util.UUID;
Expand Down Expand Up @@ -44,7 +44,7 @@ public class SpringDataApplicationTestIT {
@Test
public void testSpringDataRateLimiter() {
RateLimiter rateLimiter = context.getBean(RateLimiter.class);
assertTrue("SpringDataRateLimiter", rateLimiter instanceof SpringDataRateLimiter);
assertTrue("JpaRateLimiter", rateLimiter instanceof JpaRateLimiter);
}

@Test
Expand Down

0 comments on commit 79df8f3

Please sign in to comment.