diff --git a/charon-spring-webmvc/src/main/java/com/github/mkopylec/charon/configuration/RequestMappingConfiguration.java b/charon-spring-webmvc/src/main/java/com/github/mkopylec/charon/configuration/RequestMappingConfiguration.java index c37194c9..5357bcde 100644 --- a/charon-spring-webmvc/src/main/java/com/github/mkopylec/charon/configuration/RequestMappingConfiguration.java +++ b/charon-spring-webmvc/src/main/java/com/github/mkopylec/charon/configuration/RequestMappingConfiguration.java @@ -19,6 +19,7 @@ public class RequestMappingConfiguration implements Valid { private String name; + private Pattern hostRegex; private Pattern pathRegex; private RestTemplateConfiguration restTemplateConfiguration; private List requestForwardingInterceptors; @@ -27,6 +28,7 @@ public class RequestMappingConfiguration implements Valid { RequestMappingConfiguration(String name) { this.name = name; + hostRegex = compile(".*"); pathRegex = compile("/.*"); requestForwardingInterceptors = new ArrayList<>(); unsetRequestForwardingInterceptors = new ArrayList<>(); @@ -41,6 +43,14 @@ public String getName() { return name; } + public Pattern getHostRegex() { + return hostRegex; + } + + void setHostRegex(String hostRegex) { + this.hostRegex = compile(hostRegex); + } + public Pattern getPathRegex() { return pathRegex; } diff --git a/charon-spring-webmvc/src/main/java/com/github/mkopylec/charon/configuration/RequestMappingConfigurer.java b/charon-spring-webmvc/src/main/java/com/github/mkopylec/charon/configuration/RequestMappingConfigurer.java index 6810de6e..d343b7b8 100644 --- a/charon-spring-webmvc/src/main/java/com/github/mkopylec/charon/configuration/RequestMappingConfigurer.java +++ b/charon-spring-webmvc/src/main/java/com/github/mkopylec/charon/configuration/RequestMappingConfigurer.java @@ -14,6 +14,11 @@ public static RequestMappingConfigurer requestMapping(String name) { return new RequestMappingConfigurer(name); } + public RequestMappingConfigurer hostRegex(String hostRegex) { + configuredObject.setHostRegex(hostRegex); + return this; + } + public RequestMappingConfigurer pathRegex(String pathRegex) { configuredObject.setPathRegex(pathRegex); return this; diff --git a/charon-spring-webmvc/src/main/java/com/github/mkopylec/charon/forwarding/RequestMappingResolver.java b/charon-spring-webmvc/src/main/java/com/github/mkopylec/charon/forwarding/RequestMappingResolver.java index 562afa00..aadfaefc 100644 --- a/charon-spring-webmvc/src/main/java/com/github/mkopylec/charon/forwarding/RequestMappingResolver.java +++ b/charon-spring-webmvc/src/main/java/com/github/mkopylec/charon/forwarding/RequestMappingResolver.java @@ -23,9 +23,12 @@ class RequestMappingResolver { } RequestMappingConfiguration resolveRequestMapping(HttpServletRequest request) { + final String serverName = request.getServerName(); String requestURI = request.getRequestURI(); List configurations = requestMappingConfigurations.stream() - .filter(configuration -> configuration.getPathRegex().matcher(requestURI).matches()) + .filter(configuration -> + configuration.getHostRegex().matcher(serverName).matches() && + configuration.getPathRegex().matcher(requestURI).matches()) .collect(toList()); if (configurations.isEmpty()) { log.debug("No request mapping matches {} incoming request", requestURI);