keycloak-aplcache

[RHSSO-767] - Wrong implementation of Request.getRelativePath

2/9/2017 9:27:28 PM

Details

diff --git a/adapters/spi/servlet-adapter-spi/src/main/java/org/keycloak/adapters/servlet/ServletHttpFacade.java b/adapters/spi/servlet-adapter-spi/src/main/java/org/keycloak/adapters/servlet/ServletHttpFacade.java
index 6d99560..11e4f93 100755
--- a/adapters/spi/servlet-adapter-spi/src/main/java/org/keycloak/adapters/servlet/ServletHttpFacade.java
+++ b/adapters/spi/servlet-adapter-spi/src/main/java/org/keycloak/adapters/servlet/ServletHttpFacade.java
@@ -67,7 +67,15 @@ public class ServletHttpFacade implements HttpFacade {
 
         @Override
         public String getRelativePath() {
-            return request.getServletPath();
+            String uri = request.getRequestURI();
+            String contextPath = request.getContextPath();
+            String servletPath = uri.substring(uri.indexOf(contextPath) + contextPath.length());
+
+            if ("".equals(servletPath)) {
+                servletPath = "/";
+            }
+
+            return servletPath;
         }
 
         @Override
diff --git a/adapters/spi/tomcat-adapter-spi/src/main/java/org/keycloak/adapters/tomcat/CatalinaHttpFacade.java b/adapters/spi/tomcat-adapter-spi/src/main/java/org/keycloak/adapters/tomcat/CatalinaHttpFacade.java
index c472564..631474e 100755
--- a/adapters/spi/tomcat-adapter-spi/src/main/java/org/keycloak/adapters/tomcat/CatalinaHttpFacade.java
+++ b/adapters/spi/tomcat-adapter-spi/src/main/java/org/keycloak/adapters/tomcat/CatalinaHttpFacade.java
@@ -80,7 +80,15 @@ public class CatalinaHttpFacade implements HttpFacade {
 
         @Override
         public String getRelativePath() {
-            return request.getServletPath();
+            String uri = request.getRequestURI();
+            String contextPath = request.getContextPath();
+            String servletPath = uri.substring(uri.indexOf(contextPath) + contextPath.length());
+
+            if ("".equals(servletPath)) {
+                servletPath = "/";
+            }
+
+            return servletPath;
         }
 
         @Override