From 9c8ad6efb95fbdfcf9c734b3ecf542b36a031f15 Mon Sep 17 00:00:00 2001 From: gregor Date: Wed, 2 Feb 2005 11:08:33 +0000 Subject: Anpassung an neue Systemlandschaft im BKA: Dynamische Kodierung des Proxy-Hosts beim URL-Rewriting (Abfrage von Remote-Adresse aus dem Request) git-svn-id: https://joinup.ec.europa.eu/svn/moa-idspss/trunk@269 d688527b-c9ab-4aba-bd8d-4036d912da1d --- .../moa/spss/slinterface/Constants.java | 9 ++++- .../moa/spss/slinterface/URLRewriter.java | 44 +++++++++++++++++----- .../moa/spss/slinterface/beans/DataInfoBean.java | 11 +++--- .../moa/spss/slinterface/filters/SL2MOAFilter.java | 5 ++- spss.slinterface/pages/resultOverview.jsp | 8 ++-- .../res/resources/properties/init.properties | 18 ++++++++- 6 files changed, 71 insertions(+), 24 deletions(-) diff --git a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/Constants.java b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/Constants.java index 6e3a7c1b7..b35faa6d9 100644 --- a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/Constants.java +++ b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/Constants.java @@ -15,6 +15,7 @@ public class Constants "at.gv.egovernment.moa.spss.slinterface.PropertiesLocation"; // Init properties + public static final String IP_SL2MOA_STYLESHEET_ = "location.stylesheet.sl2moa"; public static final String IP_MOA2SL_STYLESHEET_ = "location.stylesheet.moa2sl"; public static final String IP_SL_SCHEMA_ = "location.schema.sl"; @@ -25,9 +26,13 @@ public class Constants public static final String IP_SP_TRUSTPROFILEID_ = "service.sp.trustProfileId"; public static final String IP_RES_SHOWETSI_ = "result.showetsi"; public static final String IP_RES_SHOWSLMAN_ = "result.showslmanifest"; - public static final String IP_REW_PROXYRUL_ = "rewrite.proxyURL"; + + public static final String IP_REW_PROXYURL_ = "rewrite.proxyURL"; + public static final String IP_REW_PROXYURL_HOSTDUMMY_ = "rewrite.proxyURL.proxyhostDummy"; + public static final String IP_REW_DNS_LOOKUP_PREFIX_ = "rewrite.dn."; + public static final String IP_REW_DNS_LOOKUP_DEFAULT_ = "rewrite.dn.default"; public static final String IP_REW_SLI_URLPARAMNAME_ = "rewrite.sliUrlParamName"; - public static final String IP_REW_SLIRUL_ = "result.sliUrl"; + public static final String IP_REW_SLI_WEBAPPSERV_URL_ = "rewrite.sliWebAppServUrl"; // Logging hierarchies diff --git a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/URLRewriter.java b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/URLRewriter.java index e1b8e77e5..a47192d69 100644 --- a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/URLRewriter.java +++ b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/URLRewriter.java @@ -9,6 +9,8 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.Properties; +import javax.servlet.http.HttpSession; + import org.apache.log4j.Logger; /** @@ -32,40 +34,61 @@ public class URLRewriter /** * Rewrites the specified URL. * - * @param url A URL relative to the context path of the serlet. + * @param url A URL relative to the root of the web application server containing MOA SL. * - * @param sessionId The session id which will be considered in the rewritten URL. + * @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, String sessionId) + public String rewrite(String url, HttpSession session) { - String proxyURLStr = initProps_.getProperty(Constants.IP_REW_PROXYRUL_); + // 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_SLI_URLPARAMNAME_); - String slInterfaceURLStr = initProps_.getProperty(Constants.IP_REW_SLIRUL_); + String slInterfaceWebAppServURLStr = initProps_.getProperty(Constants.IP_REW_SLI_WEBAPPSERV_URL_); if (proxyURLStr == null || slInterfaceURLParamName == null || - slInterfaceURLStr == null || + slInterfaceWebAppServURLStr == null || "".equals(proxyURLStr.trim()) || "".equals(slInterfaceURLParamName.trim()) || - "".equals(slInterfaceURLStr.trim())) + "".equals(slInterfaceWebAppServURLStr.trim())) { logger_.warn("Some params for URL rewriting are not available; rewriting disabled:" + " proxyURL: \"" + proxyURLStr + "\"," + " slInterfaceURLParamName: \"" + slInterfaceURLParamName + "\"," + - " slInterfaceURL: \"" + slInterfaceURLStr + "\""); + " slInterfaceWebAppServURLStr: \"" + slInterfaceWebAppServURLStr + "\""); return url; } URL slInterfaceURL = null; try { - slInterfaceURL = new URL(slInterfaceURLStr + url); + slInterfaceURL = new URL(slInterfaceWebAppServURLStr + url); } catch (MalformedURLException e) { - logger_.warn("Parameter \"slInterfaceURL\" is not a valid URL: \"" + slInterfaceURLStr + "\""); + logger_.warn("Parameter \"slInterfaceURL\" is not a valid URL: \"" + slInterfaceWebAppServURLStr + url + "\""); return url; } URL proxyURL = null; @@ -79,6 +102,7 @@ public class URLRewriter return url; } + String sessionId = session.getId(); String sessionIdParam = (sessionId != null) ? (";" + "jsessionid=" + sessionId) : ""; String returnValue = proxyURL.getProtocol() + diff --git a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/beans/DataInfoBean.java b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/beans/DataInfoBean.java index 76b06605b..3b58a8327 100644 --- a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/beans/DataInfoBean.java +++ b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/beans/DataInfoBean.java @@ -25,6 +25,7 @@ import java.util.Set; import java.util.StringTokenizer; import javax.servlet.ServletContext; +import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionBindingListener; @@ -81,7 +82,7 @@ public class DataInfoBean implements HttpSessionBindingListener ServletContext context_; String contextPath_; - String sessionId_; + HttpSession session_; Properties initProps_; @@ -94,12 +95,12 @@ public class DataInfoBean implements HttpSessionBindingListener /* ---------------------------------------------------------------------------------------------------- */ - public DataInfoBean(Document moaRequestDoc, Document moaResponseDoc, String contextPath, String sessionId, + public DataInfoBean(Document moaRequestDoc, Document moaResponseDoc, String contextPath, HttpSession session, ServletContext context) throws Exception { context_ = context; contextPath_ = contextPath; - sessionId_ = sessionId; + session_ = session; initProps_ = (Properties) context_.getAttribute(Constants.WSCP_INIT_PROPS_); hashInputDataInfos_ = new ArrayList(); @@ -120,7 +121,7 @@ public class DataInfoBean implements HttpSessionBindingListener for (int i = 0; i < hidElems.size(); i++) { // Open file for current hash input data - String currHidFileNameStr = tempDir + sessionId_ + "_" + System.currentTimeMillis() + "_" + + String currHidFileNameStr = tempDir + session_.getId() + "_" + System.currentTimeMillis() + "_" + random.nextLong(); currHidFileNameStr = context_.getRealPath(currHidFileNameStr); FileOutputStream currHidFOS; @@ -335,7 +336,7 @@ public class DataInfoBean implements HttpSessionBindingListener String tempDir = initProps.getProperty(Constants.IP_TEMP_DIR_); URLRewriter urlRewriter = (URLRewriter) context_.getAttribute(Constants.WSCP_URL_REWRITER_); String newSrcAttrValue = urlRewriter.rewrite( - contextPath_ + tempDir + currHidi.filename_.substring(slashPos + 1), sessionId_); + contextPath_ + tempDir + currHidi.filename_.substring(slashPos + 1), session_); srcAttr.setNodeValue(newSrcAttrValue); } diff --git a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/SL2MOAFilter.java b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/SL2MOAFilter.java index 28ceb7ac6..084633728 100644 --- a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/SL2MOAFilter.java +++ b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/SL2MOAFilter.java @@ -87,6 +87,9 @@ public class SL2MOAFilter implements Filter // Check if request is HTTP-POST checkHttpPost((HttpServletRequest) request); + // Remember remote IP address for later URL rewriting + session.setAttribute("remoteAddr", request.getRemoteAddr()); + // Get SL request from content of request SLRequest slRequest = parseRequest((HttpServletRequest) request); session.setAttribute("slRequest", slRequest); @@ -138,7 +141,7 @@ public class SL2MOAFilter implements Filter moaXMLRequestDoc, moaResponseDoc, ((HttpServletRequest) request).getContextPath(), - session.getId(), + session, config_.getServletContext()); session.setAttribute("dataInfo", dataInfo); } diff --git a/spss.slinterface/pages/resultOverview.jsp b/spss.slinterface/pages/resultOverview.jsp index 7d10e0d8d..388efa77e 100644 --- a/spss.slinterface/pages/resultOverview.jsp +++ b/spss.slinterface/pages/resultOverview.jsp @@ -28,7 +28,7 @@ <% out.print( "src=\"" + ((at.gv.egovernment.moa.spss.slinterface.URLRewriter) application.getAttribute(at.gv.egovernment.moa.spss.slinterface.Constants.WSCP_URL_REWRITER_)).rewrite( - request.getContextPath() + "/pages/images/aut-emb2.gif\"", null) + + request.getContextPath() + "/pages/images/aut-emb2.gif\"", request.getSession()) + " alt=\"Republik Österreich\""); %> > Bundeskanzleramt der Republik Österreich - Signaturprüfdienst @@ -39,7 +39,7 @@

"> + request.getContextPath() + "/return", request.getSession()));%>"> Zurück zur Anwendung ...

@@ -233,7 +233,7 @@ out.print( " "> + request.getContextPath() + "/return", request.getSession()));%>"> Zurück zur Anwendung ...

diff --git a/spss.slinterface/res/resources/properties/init.properties b/spss.slinterface/res/resources/properties/init.properties index a2361840c..359cd2aa5 100644 --- a/spss.slinterface/res/resources/properties/init.properties +++ b/spss.slinterface/res/resources/properties/init.properties @@ -13,10 +13,24 @@ service.sp.trustProfileId = E-Recht result.showetsi = false result.showslmanifest = false -rewrite.proxyURL = http://localhost:8080/moa-spss-sl/rewrite +# URL des Proxys zu MOA SL +rewrite.proxyURL = http://proxyhost:8080/moa-spss-sl/rewrite + +# Platzhalter für den Hostnamen des Proxys zu MOA SL +rewrite.proxyURL.proxyhostDummy = proxyhost + +# Tabelle für Reverse DNS Lookup zum Herausfinden des Hostnamens des Proxys zu MOA SL +rewrite.dn.127.0.0.1 = localhost +rewrite.dn.129.27.142.210 = localhost +rewrite.dn.default = localhost + +# Name des Parameters in der Proxy-URL, dessen Wert die übersetzte URL für den Aufruf +# von MOA SL enthält rewrite.sliUrlParamName = targetURL -result.sliUrl = http://localhost:8080 +# URL, wie der Webapplikations-Server mit MOA SL vom Proxy aus erreicht werden kann +# (ohne abschließenden /) +rewrite.sliWebAppServUrl = http://localhost:8080 \ No newline at end of file -- cgit v1.2.3