aboutsummaryrefslogtreecommitdiff
path: root/spss.slinterface/src/at/gv/egovernment/moa/spss/slinterface/URLRewriter.java
diff options
context:
space:
mode:
authorgregor <gregor@d688527b-c9ab-4aba-bd8d-4036d912da1d>2006-06-26 14:50:59 +0000
committergregor <gregor@d688527b-c9ab-4aba-bd8d-4036d912da1d>2006-06-26 14:50:59 +0000
commite06e1534392fadfd84c84fb403be56fa9c852fdb (patch)
tree8a924d4f5a5080dec1bd4e5d4ab53e0e8f6184f7 /spss.slinterface/src/at/gv/egovernment/moa/spss/slinterface/URLRewriter.java
parenta8c6c5e86da29a1e17d73f672b95bf58e8aa6de0 (diff)
downloadmoa-id-spss-e06e1534392fadfd84c84fb403be56fa9c852fdb.tar.gz
moa-id-spss-e06e1534392fadfd84c84fb403be56fa9c852fdb.tar.bz2
moa-id-spss-e06e1534392fadfd84c84fb403be56fa9c852fdb.zip
Verzeichnis verschoben nach /src
git-svn-id: https://joinup.ec.europa.eu/svn/moa-idspss/trunk@714 d688527b-c9ab-4aba-bd8d-4036d912da1d
Diffstat (limited to 'spss.slinterface/src/at/gv/egovernment/moa/spss/slinterface/URLRewriter.java')
-rw-r--r--spss.slinterface/src/at/gv/egovernment/moa/spss/slinterface/URLRewriter.java157
1 files changed, 157 insertions, 0 deletions
diff --git a/spss.slinterface/src/at/gv/egovernment/moa/spss/slinterface/URLRewriter.java b/spss.slinterface/src/at/gv/egovernment/moa/spss/slinterface/URLRewriter.java
new file mode 100644
index 000000000..683851ff9
--- /dev/null
+++ b/spss.slinterface/src/at/gv/egovernment/moa/spss/slinterface/URLRewriter.java
@@ -0,0 +1,157 @@
+/*
+ * Created on 15.12.2003
+ *
+ * (c) Stabsstelle IKT-Strategie des Bundes
+ */
+package at.gv.egovernment.moa.spss.slinterface;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Properties;
+
+import javax.servlet.http.HttpSession;
+
+import org.apache.log4j.Logger;
+
+/**
+ * @author Gregor Karlinger (mailto:gregor.karlinger@cio.gv.at)
+ */
+public class URLRewriter
+{
+ private static Logger logger_ = Logger.getLogger(Constants.LH_LISTENERS_);
+
+ Properties initProps_;
+
+ /**
+ * Flag indicating whether rewriting should take place or not.
+ */
+ boolean doRewrite_;
+
+ /**
+ * Class that manges the rewriting of URLs for the result pages. Necessary as workaround for the deploy-
+ * ment in the Federal Chancellory.
+ */
+ public URLRewriter(Properties initProps)
+ {
+ initProps_ = initProps;
+ doRewrite_ = Boolean.valueOf(initProps_.getProperty(Constants.IP_REW_)).booleanValue();
+ }
+
+ /**
+ * Rewrites the specified URL.
+ *
+ * @param url A URL relative to the root of the web application server containing MOA SL.
+ *
+ * @param session The session which will be considered in the rewritten URL.
+ *
+ * @return A URL fitting for the proxy component running at the Federal Chancellory.
+ */
+ public String rewrite(String url, HttpSession session)
+ {
+ if (doRewrite_)
+ {
+ // Get remote IP address and resolve to remote to remote domain name
+ String remoteAddr = (String)session.getAttribute("remoteAddr");
+ String remoteName = null;
+ if (remoteAddr != null)
+ {
+ remoteName = initProps_.getProperty(Constants.IP_REW_DNS_LOOKUP_PREFIX_ + remoteAddr);
+ logger_.debug("Remote address lookup succeeded for IP " + remoteAddr + ", using " + remoteName);
+ }
+ if (remoteName == null)
+ {
+ remoteName = initProps_.getProperty(Constants.IP_REW_DNS_LOOKUP_DEFAULT_);
+ logger_.debug("Remote address lookup failed for IP " + remoteAddr + ", using default: " + remoteName);
+ }
+
+ // Get proxy URL and replace proxy URL hostname placeholder with remote domain name
+ String proxyURLStr = initProps_.getProperty(Constants.IP_REW_PROXYURL_);
+ int pHStartIndex = proxyURLStr.indexOf(initProps_.getProperty(Constants.IP_REW_PROXYURL_HOSTDUMMY_));
+ proxyURLStr = proxyURLStr.substring(0, pHStartIndex)
+ + remoteName
+ + proxyURLStr.substring(pHStartIndex
+ + initProps_.getProperty(Constants.IP_REW_PROXYURL_HOSTDUMMY_).length());
+
+ String slInterfaceURLParamName = initProps_.getProperty(Constants.IP_REW_MOASL_URLPARAMNAME_);
+ String slInterfaceWebAppServURLStr = initProps_.getProperty(Constants.IP_REW_MOASL_WEBAPPSERV_URL_);
+
+ if (proxyURLStr == null ||
+ slInterfaceURLParamName == null ||
+ slInterfaceWebAppServURLStr == null ||
+ "".equals(proxyURLStr.trim()) ||
+ "".equals(slInterfaceURLParamName.trim()) ||
+ "".equals(slInterfaceWebAppServURLStr.trim()))
+ {
+ logger_.warn("Some params for URL rewriting are not available; rewriting disabled:" +
+ " proxyURL: \"" + proxyURLStr + "\"," +
+ " slInterfaceURLParamName: \"" + slInterfaceURLParamName + "\"," +
+ " slInterfaceWebAppServURLStr: \"" + slInterfaceWebAppServURLStr + "\"");
+ return url;
+ }
+
+ URL slInterfaceURL = null;
+ try
+ {
+ slInterfaceURL = new URL(slInterfaceWebAppServURLStr + url);
+ }
+ catch (MalformedURLException e)
+ {
+ logger_.warn("Parameter \"slInterfaceURL\" is not a valid URL: \"" + slInterfaceWebAppServURLStr + url + "\"");
+ return url;
+ }
+ URL proxyURL = null;
+ try
+ {
+ proxyURL = new URL(proxyURLStr);
+ }
+ catch (MalformedURLException e)
+ {
+ logger_.warn("Parameter \"proxyURL\" is not a valid URL: \"" + proxyURLStr + "\"");
+ return url;
+ }
+
+ String sessionId = session.getId();
+ String sessionIdParam = (sessionId != null) ? (";" + "jsessionid=" + sessionId) : "";
+ String returnValue =
+ proxyURL.getProtocol() +
+ "://" +
+ proxyURL.getHost() +
+ ((proxyURL.getPort() != -1) ? (":" + proxyURL.getPort()) : "") +
+ proxyURL.getPath() +
+ ((proxyURL.getQuery() != null) ? "?" + proxyURL.getQuery() + "&" : "?") +
+ slInterfaceURLParamName + "=" +
+ slInterfaceURL.getProtocol() +
+ "://" +
+ slInterfaceURL.getHost() +
+ ((slInterfaceURL.getPort() != -1) ? (":" + slInterfaceURL.getPort()) : "") +
+ slInterfaceURL.getPath() +
+ sessionIdParam +
+ ((slInterfaceURL.getQuery() != null) ? "?" + escapeQueryPart(slInterfaceURL.getQuery()) : "");
+
+ logger_.debug("Rewritten URL: " + returnValue);
+ return returnValue;
+ }
+ else
+ {
+ logger_.debug("URL rewriting disabled via configuration. URL \"" + url + "\" remains unchanged.");
+ return url;
+ }
+ }
+
+ private String escapeQueryPart(String query)
+ {
+ StringBuffer querySB = new StringBuffer();
+ for (int i = 0; i < query.length(); i++)
+ {
+ if (query.charAt(i) == '&')
+ {
+ querySB.append("%26");
+ }
+ else
+ {
+ querySB.append(query.charAt(i));
+ }
+ }
+ return querySB.toString();
+ }
+}