diff options
author | Thomas Becker | 2013-07-19 12:01:14 +0000 |
---|---|---|
committer | Thomas Becker | 2013-07-19 12:12:47 +0000 |
commit | ebfa3b97ba069c55b2205b104230635f1494f13b (patch) | |
tree | c39b9c3957747182942f43f4f64fcb1c64187eef /jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/RewritePatternRule.java | |
parent | ecd687db6d99728392f71f02b489964bae8c4a92 (diff) | |
download | org.eclipse.jetty.project-ebfa3b97ba069c55b2205b104230635f1494f13b.tar.gz org.eclipse.jetty.project-ebfa3b97ba069c55b2205b104230635f1494f13b.tar.xz org.eclipse.jetty.project-ebfa3b97ba069c55b2205b104230635f1494f13b.zip |
410800 Make RewritePatternRule queryString aware
Diffstat (limited to 'jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/RewritePatternRule.java')
-rw-r--r-- | jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/RewritePatternRule.java | 54 |
1 files changed, 43 insertions, 11 deletions
diff --git a/jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/RewritePatternRule.java b/jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/RewritePatternRule.java index 48047b8647..d6bd65d15e 100644 --- a/jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/RewritePatternRule.java +++ b/jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/RewritePatternRule.java @@ -19,20 +19,21 @@ package org.eclipse.jetty.rewrite.handler; import java.io.IOException; - import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.eclipse.jetty.http.HttpURI; import org.eclipse.jetty.http.PathMap; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.util.URIUtil; /** - * Rewrite the URI by replacing the matched {@link PathMap} path with a fixed string. + * Rewrite the URI by replacing the matched {@link PathMap} path with a fixed string. */ public class RewritePatternRule extends PatternRule implements Rule.ApplyURI { private String _replacement; + private String _query; /* ------------------------------------------------------------ */ public RewritePatternRule() @@ -44,32 +45,63 @@ public class RewritePatternRule extends PatternRule implements Rule.ApplyURI /* ------------------------------------------------------------ */ /** * Whenever a match is found, it replaces with this value. - * - * @param value the replacement string. + * + * @param replacement the replacement string. */ - public void setReplacement(String value) + public void setReplacement(String replacement) { - _replacement = value; + String[] split = replacement.split("\\?", 2); + _replacement = split[0]; + _query = split.length == 2 ? split[1] : null; } /* ------------------------------------------------------------ */ /* * (non-Javadoc) - * @see org.eclipse.jetty.server.handler.rules.RuleBase#apply(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) + * + * @see org.eclipse.jetty.server.handler.rules.RuleBase#apply(javax.servlet.http.HttpServletRequest, + * javax.servlet.http.HttpServletResponse) */ @Override public String apply(String target, HttpServletRequest request, HttpServletResponse response) throws IOException { - target = URIUtil.addPaths(_replacement, PathMap.pathInfo(_pattern,target)); + target = URIUtil.addPaths(_replacement, PathMap.pathInfo(_pattern, target)); return target; } /* ------------------------------------------------------------ */ + + /** + * This method will add _query to the requests's queryString and also combine it with existing queryStrings in + * the request. However it won't take care for duplicate. E.g. if request.getQueryString contains a parameter + * "param1 = true" and _query will contain "param1=false" the result will be param1=true¶m1=false. + * To cover this use case some more complex pattern matching is necessary. We can implement this if there's use + * cases. + * + * @param request + * @param oldTarget + * @param newTarget + * @throws IOException + */ @Override - public void applyURI(Request request, String oldTarget, String newTarget) throws IOException + public void applyURI(Request request, String oldTarget, String newTarget) throws IOException { - String uri = URIUtil.addPaths(_replacement, PathMap.pathInfo(_pattern,request.getRequestURI())); - request.setRequestURI(uri); + if (_query == null) + { + request.setRequestURI(newTarget); + } + else + { + String queryString = request.getQueryString(); + if (queryString != null) + queryString = queryString + "&" + _query; + else + queryString = _query; + HttpURI uri = new HttpURI(newTarget + "?" + queryString); + request.setUri(uri); + request.setRequestURI(newTarget); + request.setQueryString(queryString); + } } /* ------------------------------------------------------------ */ |