diff --git a/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java b/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java index 1348457ee..a3e163aab 100644 --- a/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java +++ b/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java @@ -35,6 +35,7 @@ import org.springframework.web.servlet.ModelAndView; import jakarta.validation.Valid; import org.springframework.web.servlet.mvc.support.RedirectAttributes; +import org.springframework.samples.petclinic.system.RateLimitInterceptor.*; /** * @author Juergen Hoeller diff --git a/src/main/java/org/springframework/samples/petclinic/system/WebConfiguration.java b/src/main/java/org/springframework/samples/petclinic/system/WebConfiguration.java index 1ef32e4dc..544bfea8c 100644 --- a/src/main/java/org/springframework/samples/petclinic/system/WebConfiguration.java +++ b/src/main/java/org/springframework/samples/petclinic/system/WebConfiguration.java @@ -24,8 +24,14 @@ import java.util.Locale; @SuppressWarnings("unused") public class WebConfiguration implements WebMvcConfigurer { + private final RateLimitInterceptor rateLimitInterceptor; + + public WebConfiguration(RateLimitInterceptor rateLimitInterceptor) { + this.rateLimitInterceptor = rateLimitInterceptor; + } + /** - * Uses session storage to remember the user’s language setting across requests. + * Uses session storage to remember the user's language setting across requests. * Defaults to English if nothing is specified. * @return session-based {@link LocaleResolver} */ @@ -49,12 +55,13 @@ public class WebConfiguration implements WebMvcConfigurer { } /** - * Registers the locale change interceptor so it can run on each request. + * Registers interceptors including locale change and rate limiting. * @param registry where interceptors are added */ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(localeChangeInterceptor()); + registry.addInterceptor(rateLimitInterceptor); } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 6ed985654..9b63e0b69 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -16,6 +16,11 @@ spring.messages.basename=messages/messages # Actuator management.endpoints.web.exposure.include=* +# Rate Limiting +rate-limit.max-requests=5 +rate-limit.window-size-minutes=1 +rate-limit.enabled=true + # Logging logging.level.org.springframework=INFO # logging.level.org.springframework.web=DEBUG