@@ -28,7 +28,6 @@ import io.github.resilience4j.ratelimiter.internal.AtomicRateLimiter.AtomicRateL
2828import io.micronaut.cache.SyncCache
2929import io.micronaut.context.annotation.Context
3030import io.micronaut.context.annotation.Requires
31- import io.micronaut.core.annotation.Nullable
3231import io.micronaut.http.HttpHeaders
3332import io.micronaut.http.HttpRequest
3433import io.micronaut.http.HttpResponse
@@ -72,7 +71,6 @@ class RateLimiterFilter implements HttpServerFilter {
7271 private final SyncCache<AtomicRateLimiter > limiters
7372
7473 @Inject
75- @Nullable
7674 private HttpClientAddressResolver addressResolver
7775
7876 /**
@@ -129,13 +127,13 @@ class RateLimiterFilter implements HttpServerFilter {
129127 }
130128
131129 private String getKey (HttpRequest<?> request ) {
132- // When addressResolver is available (alb profile enabled), use it to trust X-Forwarded-For from ALB.
133- final address = addressResolver
134- ? addressResolver . resolve(request)
135- : request . getRemoteAddress() . getAddress() . getHostAddress( )
130+ // Use HttpClientAddressResolver which:
131+ // - In default mode: returns socket address (secure, ignores headers)
132+ // - In ALB mode (when client-address-header configured): trusts X-Forwarded-For from ALB
133+ final address = addressResolver . resolve(request )
136134
137135 if ( log. isTraceEnabled() ) {
138- log. trace " Filter request\n - uri: ${ request.getUri()} \n - address: ${ address} \n - resolver: ${ addressResolver ? 'enabled' : 'disabled' } \n - headers: ${ request.getHeaders().asMap()} "
136+ log. trace " Filter request\n - uri: ${ request.getUri()} \n - address: ${ address} \n - headers: ${ request.getHeaders().asMap()} "
139137 }
140138 return address
141139 }
0 commit comments