Author: ajamtli
Date: 2006-03-31 12:40:20 +0200 (Fri, 31 Mar 2006)
New Revision: 2680
Added:
trunk/src/java/no/schibstedsok/front/searchportal/util/QueryStringHelper.java
Modified:
trunk/src/java/no/schibstedsok/front/searchportal/query/run/QueryFactoryImpl.java
trunk/src/java/no/schibstedsok/front/searchportal/servlet/SearchServlet.java
Log:
Added class for safe handling of query string. Checks that a parameter is
decoded correctly. Supports ISO-8859-1 (ex: %E5) and UTF-8 (ex: %C3%A5) encoded
URLs.
Modified:
trunk/src/java/no/schibstedsok/front/searchportal/query/run/QueryFactoryImpl.java
===================================================================
---
trunk/src/java/no/schibstedsok/front/searchportal/query/run/QueryFactoryImpl.java
2006-03-31 10:38:28 UTC (rev 2679)
+++
trunk/src/java/no/schibstedsok/front/searchportal/query/run/QueryFactoryImpl.java
2006-03-31 10:40:20 UTC (rev 2680)
@@ -7,6 +7,7 @@
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import no.schibstedsok.front.searchportal.query.*;
+import no.schibstedsok.front.searchportal.util.QueryStringHelper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -57,7 +58,7 @@
query = new RunningWebQuery(cxt, q, request, response);
} else {
- final String q = request.getParameter("q");
+ final String q = QueryStringHelper.safeGetParameter(request, "q");
query = new RunningWebQuery(cxt, q, request, response);
Modified:
trunk/src/java/no/schibstedsok/front/searchportal/servlet/SearchServlet.java
===================================================================
---
trunk/src/java/no/schibstedsok/front/searchportal/servlet/SearchServlet.java
2006-03-31 10:38:28 UTC (rev 2679)
+++
trunk/src/java/no/schibstedsok/front/searchportal/servlet/SearchServlet.java
2006-03-31 10:40:20 UTC (rev 2680)
@@ -8,6 +8,7 @@
import no.schibstedsok.front.searchportal.configuration.SearchTabs;
import no.schibstedsok.front.searchportal.configuration.loader.DocumentLoader;
import no.schibstedsok.front.searchportal.site.Site;
+import no.schibstedsok.front.searchportal.util.QueryStringHelper;
import no.schibstedsok.front.searchportal.configuration.XMLSearchTabsCreator;
import
no.schibstedsok.front.searchportal.configuration.loader.PropertiesLoader;
import
no.schibstedsok.front.searchportal.configuration.loader.UrlResourceLoader;
@@ -157,7 +158,8 @@
}
if (httpServletRequest.getParameter("q") != null) {
- httpServletRequest.setAttribute("q",
httpServletRequest.getParameter("q"));
+ httpServletRequest.setAttribute("q",
+ QueryStringHelper.safeGetParameter(httpServletRequest, "q"));
}
httpServletRequest.setAttribute("c", searchModeKey);
@@ -172,10 +174,8 @@
stopWatch.stop();
LOG.info("doGet(): Search took " + stopWatch + " " +
query.getQueryString());
}
-
-
}
-
+
private SearchTabs loadSearchTabs(final Site site) {
return XMLSearchTabsCreator.valueOf(site).getSearchTabs();
}
Added:
trunk/src/java/no/schibstedsok/front/searchportal/util/QueryStringHelper.java
===================================================================
---
trunk/src/java/no/schibstedsok/front/searchportal/util/QueryStringHelper.java
(rev 0)
+++
trunk/src/java/no/schibstedsok/front/searchportal/util/QueryStringHelper.java
2006-03-31 10:40:20 UTC (rev 2680)
@@ -0,0 +1,52 @@
+// Copyright (2006) Schibsted Søk AS
+package no.schibstedsok.front.searchportal.util;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.util.StringTokenizer;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * Helper for parsing query string.
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Anders Johan Jamtli</a>
+ */
+public class QueryStringHelper {
+ /** A safer way to get parameters for the query string.
+ * Handles ISO-8859-1 and UTF-8 URL encodings.
+ *
+ * @param req The servlet request we are processing
+ * @param parameter The parameter to retrieve
+ * @return The correct decoded parameter
+ */
+ public static String safeGetParameter(HttpServletRequest req, String
parameter){
+ StringTokenizer st = new StringTokenizer(req.getQueryString(), "&");
+ String reqValue = req.getParameter(parameter);
+ String queryStringValue = null;
+
+ parameter += "=";
+ while(st.hasMoreTokens()) {
+ String tmp = st.nextToken();
+ if (tmp.startsWith(parameter)) {
+ queryStringValue = tmp.substring(parameter.length());
+ break;
+ }
+ }
+
+ if (reqValue == null) {
+ return null;
+ }
+
+ try {
+ String encodedReqValue = URLEncoder.encode(reqValue, "UTF-8");
+ if (!queryStringValue.equals(encodedReqValue)){
+ reqValue = URLDecoder.decode(queryStringValue,
"ISO-8859-1");
+ }
+ } catch (UnsupportedEncodingException e) {
+ /* IGNORED */
+ }
+ return reqValue;
+ }
+}
_______________________________________________
Kernel-commits mailing list
[email protected]
http://sesat.no/mailman/listinfo/kernel-commits