You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@knox.apache.org by lm...@apache.org on 2016/12/18 19:25:05 UTC
knox git commit: KNOX-820 - Knox query processing: If the originalUrl
value has "ampersand"(&) in it, the value after ampersand is ignored.
Repository: knox
Updated Branches:
refs/heads/master 7287e3559 -> 29538657c
KNOX-820 - Knox query processing: If the originalUrl value has "ampersand"(&) in it, the value after ampersand is ignored.
Project: http://git-wip-us.apache.org/repos/asf/knox/repo
Commit: http://git-wip-us.apache.org/repos/asf/knox/commit/29538657
Tree: http://git-wip-us.apache.org/repos/asf/knox/tree/29538657
Diff: http://git-wip-us.apache.org/repos/asf/knox/diff/29538657
Branch: refs/heads/master
Commit: 29538657c2c1e89dbcc75fa41128b995dc0724a8
Parents: 7287e35
Author: Larry McCay <lm...@hortonworks.com>
Authored: Sun Dec 18 14:24:54 2016 -0500
Committer: Larry McCay <lm...@hortonworks.com>
Committed: Sun Dec 18 14:24:54 2016 -0500
----------------------------------------------------------------------
.../gateway/service/knoxsso/WebSSOResource.java | 33 +++++++++++++++++++-
.../apache/hadoop/gateway/util/UrlsTest.java | 7 +++++
2 files changed, 39 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/knox/blob/29538657/gateway-service-knoxsso/src/main/java/org/apache/hadoop/gateway/service/knoxsso/WebSSOResource.java
----------------------------------------------------------------------
diff --git a/gateway-service-knoxsso/src/main/java/org/apache/hadoop/gateway/service/knoxsso/WebSSOResource.java b/gateway-service-knoxsso/src/main/java/org/apache/hadoop/gateway/service/knoxsso/WebSSOResource.java
index 20c6534..7f2114a 100644
--- a/gateway-service-knoxsso/src/main/java/org/apache/hadoop/gateway/service/knoxsso/WebSSOResource.java
+++ b/gateway-service-knoxsso/src/main/java/org/apache/hadoop/gateway/service/knoxsso/WebSSOResource.java
@@ -22,6 +22,7 @@ import java.net.URI;
import java.net.URISyntaxException;
import java.security.Principal;
import java.util.ArrayList;
+import java.util.Map;
import javax.annotation.PostConstruct;
import javax.servlet.ServletContext;
@@ -159,7 +160,7 @@ public class WebSSOResource {
// in the case where there are no SAML redirects done before here
// we need to get it from the request parameters
removeOriginalUrlCookie = false;
- original = request.getParameter(ORIGINAL_URL_REQUEST_PARAM);
+ original = getOriginalUrlFromQueryParams();
if (original == null) {
log.originalURLNotFound();
throw new WebApplicationException("Original URL not found in the request.", Response.Status.BAD_REQUEST);
@@ -228,6 +229,36 @@ public class WebSSOResource {
return Response.seeOther(location).entity("{ \"redirectTo\" : " + original + " }").build();
}
+ private String getOriginalUrlFromQueryParams() {
+ String original = request.getParameter(ORIGINAL_URL_REQUEST_PARAM);
+ StringBuffer buf = new StringBuffer(original);
+
+ // Add any other query params.
+ // Probably not ideal but will not break existing integrations by requiring
+ // some encoding.
+ Map<String, String[]> params = request.getParameterMap();
+ for (String name : params.keySet()) {
+ if (!ORIGINAL_URL_REQUEST_PARAM.equals(name)
+ && !original.contains(name + "=")) {
+ buf.append("&").append(name);
+ String[] values = params.get(name);
+ if (values.length > 0 && values[0] != null) {
+ buf.append("=");
+ }
+ for (int i = 0; i < values.length; i++) {
+ if (values[0] != null) {
+ buf.append(values[i]);
+ if (i < values.length-1) {
+ buf.append("&").append(name).append("=");
+ }
+ }
+ }
+ }
+ }
+
+ return buf.toString();
+ }
+
private long getExpiry() {
long expiry = 0l;
if (tokenTTL == -1) {
http://git-wip-us.apache.org/repos/asf/knox/blob/29538657/gateway-util-common/src/test/java/org/apache/hadoop/gateway/util/UrlsTest.java
----------------------------------------------------------------------
diff --git a/gateway-util-common/src/test/java/org/apache/hadoop/gateway/util/UrlsTest.java b/gateway-util-common/src/test/java/org/apache/hadoop/gateway/util/UrlsTest.java
index ac6ce93..3b1e9cc 100644
--- a/gateway-util-common/src/test/java/org/apache/hadoop/gateway/util/UrlsTest.java
+++ b/gateway-util-common/src/test/java/org/apache/hadoop/gateway/util/UrlsTest.java
@@ -82,4 +82,11 @@ public class UrlsTest {
assertEquals( "x/y/z", Urls.trimLeadingAndTrailingSlashJoin( "x", "y", "z" ) );
}
+ @Test
+ public void testURLEncoding() throws Exception {
+ assertEquals( "%26", Urls.encode( "&" ) );
+ assertEquals( "&query=hive_table", Urls.decode( "%26query=hive_table" ) );
+ assertEquals( "%3F", Urls.encode( "?" ) );
+ }
+
}