diff options
Diffstat (limited to 'spss.slinterface/WEB-INF')
5 files changed, 233 insertions, 14 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 8dd6a87ff..6e3a7c1b7 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 @@ -25,6 +25,9 @@ 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_SLI_URLPARAMNAME_ = "rewrite.sliUrlParamName"; + public static final String IP_REW_SLIRUL_ = "result.sliUrl"; // Logging hierarchies @@ -41,6 +44,7 @@ public class Constants public static final String WSCP_SL2MOA_TRANSFORMER_ = "sl2MoaTransformer"; public static final String WSCP_MOA2SL_TRANSFORMER_ = "moa2SlTransformer"; public static final String WSCP_XMLPARSER_ = "xmlParser"; + public static final String WSCP_URL_REWRITER_ = "urlRewriter"; // Security-Layer constants 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 new file mode 100644 index 000000000..e1b8e77e5 --- /dev/null +++ b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/URLRewriter.java @@ -0,0 +1,119 @@ +/* + * 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 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_; + + /** + * 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; + } + + /** + * Rewrites the specified URL. + * + * @param url A URL relative to the context path of the serlet. + * + * @param sessionId The session id 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) + { + String proxyURLStr = initProps_.getProperty(Constants.IP_REW_PROXYRUL_); + String slInterfaceURLParamName = initProps_.getProperty(Constants.IP_REW_SLI_URLPARAMNAME_); + String slInterfaceURLStr = initProps_.getProperty(Constants.IP_REW_SLIRUL_); + + if (proxyURLStr == null || + slInterfaceURLParamName == null || + slInterfaceURLStr == null || + "".equals(proxyURLStr.trim()) || + "".equals(slInterfaceURLParamName.trim()) || + "".equals(slInterfaceURLStr.trim())) + { + logger_.warn("Some params for URL rewriting are not available; rewriting disabled:" + + " proxyURL: \"" + proxyURLStr + "\"," + + " slInterfaceURLParamName: \"" + slInterfaceURLParamName + "\"," + + " slInterfaceURL: \"" + slInterfaceURLStr + "\""); + return url; + } + + URL slInterfaceURL = null; + try + { + slInterfaceURL = new URL(slInterfaceURLStr + url); + } + catch (MalformedURLException e) + { + logger_.warn("Parameter \"slInterfaceURL\" is not a valid URL: \"" + slInterfaceURLStr + "\""); + 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 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; + } + + 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(); + } +} diff --git a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/listeners/ContextListener.java b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/listeners/ContextListener.java index 83b6e96dd..3fa3a90a2 100644 --- a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/listeners/ContextListener.java +++ b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/listeners/ContextListener.java @@ -24,6 +24,7 @@ import org.apache.xerces.xni.parser.XMLInputSource; import org.xml.sax.SAXException; import at.gv.egovernment.moa.spss.slinterface.Constants; +import at.gv.egovernment.moa.spss.slinterface.URLRewriter; /** * @author Gregor Karlinger (mailto:gregor.karlinger@cio.gv.at) @@ -81,6 +82,10 @@ public class ContextListener implements ServletContextListener logger_.error("Cannot load initialization properties from location \"" + initPropsLoc + "\".", e); } + // Put helper object for rewriting URLs in the result page into the context + URLRewriter urlRewriter = new URLRewriter((Properties)context.getAttribute(Constants.WSCP_INIT_PROPS_)); + context.setAttribute(Constants.WSCP_URL_REWRITER_, urlRewriter); + // Initialize XML parser SymbolTable symbolTable = new SymbolTable(BIG_PRIME); XMLGrammarPool grammarPool = new XMLGrammarPoolImpl(); diff --git a/spss.slinterface/WEB-INF/src/test/at/gv/egovernment/moa/spss/slinterface/RewriteServlet.java b/spss.slinterface/WEB-INF/src/test/at/gv/egovernment/moa/spss/slinterface/RewriteServlet.java new file mode 100644 index 000000000..46b1f793d --- /dev/null +++ b/spss.slinterface/WEB-INF/src/test/at/gv/egovernment/moa/spss/slinterface/RewriteServlet.java @@ -0,0 +1,73 @@ +/* + * Created on 15.12.2003 + * + * (c) Stabsstelle IKT-Strategie des Bundes + */ +package test.at.gv.egovernment.moa.spss.slinterface; + +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URL; +import java.net.URLConnection; +import java.util.Properties; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.log4j.Logger; + +import at.gv.egovernment.moa.spss.slinterface.Constants; +import at.gv.egovernment.moa.spss.slinterface.Utils; + +/** + * @author Gregor Karlinger (mailto:gregor.karlinger@cio.gv.at) + */ +public class RewriteServlet extends HttpServlet +{ + private static Logger logger_ = Logger.getLogger(Constants.LH_TEST_); + + public RewriteServlet() + { + super(); + } + + /* ---------------------------------------------------------------------------------------------------- */ + + public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException + { + // Read content form POST request + try + { + logger_.debug("Received GET request:"); + logger_.debug("Request URI: \"" + request.getRequestURL() + "\""); + + Properties initProps = (Properties) this.getServletContext().getAttribute(Constants.WSCP_INIT_PROPS_); + String paramName = (initProps != null) + ? initProps.getProperty(Constants.IP_REW_SLI_URLPARAMNAME_) + : null; + + if (paramName == null || "".equals(paramName)) + throw new ServletException("Could not get rewrite parameter name from init properties."); + + logger_.debug("SLInterface rewrite parameter : \"" + paramName + "\""); + + String slInterfaceURLStr = request.getParameter(paramName); + URL slInterfaceURL = new URL(slInterfaceURLStr); + URLConnection slInterfaceURLConn = slInterfaceURL.openConnection(); + + response.setContentType(slInterfaceURLConn.getContentType()); + + InputStream slInterfaceIS = slInterfaceURLConn.getInputStream(); + OutputStream responseOS = response.getOutputStream(); + Utils.transferStreams(slInterfaceIS, responseOS); + } + catch (Exception e) + { + String message = "Failed to get answer from SL interface."; + logger_.error(message, e); + throw new ServletException(message, e); + } + } +} diff --git a/spss.slinterface/WEB-INF/web.xml b/spss.slinterface/WEB-INF/web.xml index 6d282bd1c..da7d74f7b 100644 --- a/spss.slinterface/WEB-INF/web.xml +++ b/spss.slinterface/WEB-INF/web.xml @@ -32,15 +32,6 @@ </servlet> <servlet> - <servlet-name>DataURLServlet</servlet-name> - <display-name>DataURL test servlet</display-name> - <servlet-class> - test.at.gv.egovernment.moa.spss.slinterface.DataURLServlet - </servlet-class> - <load-on-startup>0</load-on-startup> - </servlet> - - <servlet> <servlet-name>HashInputDataServlet</servlet-name> <display-name>Displays a particular hash input data</display-name> <servlet-class> @@ -58,17 +49,32 @@ <load-on-startup>0</load-on-startup> </servlet> + <!-- For test purposes only --> + <servlet> + <servlet-name>DataURLServlet</servlet-name> + <display-name>DataURL test servlet</display-name> + <servlet-class> + test.at.gv.egovernment.moa.spss.slinterface.DataURLServlet + </servlet-class> + <load-on-startup>0</load-on-startup> + </servlet> + + <!-- For test purposes only --> + <servlet> + <servlet-name>RewriteServlet</servlet-name> + <display-name>URL rewriting test servlet</display-name> + <servlet-class> + test.at.gv.egovernment.moa.spss.slinterface.RewriteServlet + </servlet-class> + <load-on-startup>0</load-on-startup> + </servlet> + <servlet-mapping> <servlet-name>MOAServlet</servlet-name> <url-pattern>/http-security-layer-request</url-pattern> </servlet-mapping> <servlet-mapping> - <servlet-name>DataURLServlet</servlet-name> - <url-pattern>/dataurl</url-pattern> - </servlet-mapping> - - <servlet-mapping> <servlet-name>HashInputDataServlet</servlet-name> <url-pattern>/showdata</url-pattern> </servlet-mapping> @@ -78,4 +84,16 @@ <url-pattern>/return</url-pattern> </servlet-mapping> + <!-- For test purposes only --> + <servlet-mapping> + <servlet-name>DataURLServlet</servlet-name> + <url-pattern>/dataurl</url-pattern> + </servlet-mapping> + + <!-- For test purposes only --> + <servlet-mapping> + <servlet-name>RewriteServlet</servlet-name> + <url-pattern>/rewrite</url-pattern> + </servlet-mapping> + </web-app> |