diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/support/AbstractSockJsService.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/support/AbstractSockJsService.java index a7ddc28d46cfa952f31a0d8923b386ff181cdaeb..47e3ba97d56776d92de6054de2377d4badcb7dca 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/support/AbstractSockJsService.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/support/AbstractSockJsService.java @@ -374,7 +374,7 @@ public abstract class AbstractSockJsService implements SockJsService { // Try SockJS prefix hints if (!this.validSockJsPrefixes.isEmpty()) { for (String prefix : this.validSockJsPrefixes) { - int index = path.indexOf(prefix); + int index = path.lastIndexOf(prefix); if (index != -1) { this.knownSockJsPrefixes.add(path.substring(0, index + prefix.length())); return path.substring(index + prefix.length()); diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/support/AbstractSockJsServiceTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/support/AbstractSockJsServiceTests.java index 6a947c56c6dbe6d7bdeb75d94bacad8446594a82..2614a6d505d55be4795887f14f02989b3e3bce43 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/support/AbstractSockJsServiceTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/support/AbstractSockJsServiceTests.java @@ -113,6 +113,17 @@ public class AbstractSockJsServiceTests extends AbstractHttpRequestTests { assertSame(this.handler, this.service.handler); } + // SPR-10923 + + @Test + public void getSockJsPathWithPartlyMatchingServletPath() throws Exception { + + this.service.setValidSockJsPrefixes("/snake"); + handleRequest("GET", "/snakedemo/snake/info", HttpStatus.OK); + + assertTrue(this.servletResponse.getContentAsString().startsWith("{\"entropy\":")); + } + @Test public void validateRequest() throws Exception { @@ -146,7 +157,7 @@ public class AbstractSockJsServiceTests extends AbstractHttpRequestTests { String body = this.servletResponse.getContentAsString(); assertEquals("{\"entropy\"", body.substring(0, body.indexOf(':'))); - assertEquals(",\"origins\":[\"*:*\"],\"cookie_needed\":false,\"websocket\":true}", + assertEquals(",\"origins\":[\"*:*\"],\"cookie_needed\":true,\"websocket\":true}", body.substring(body.indexOf(','))); this.service.setSessionCookieNeeded(false);