diff options
Diffstat (limited to 'spss.slinterface/WEB-INF/src')
4 files changed, 201 insertions, 0 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);  +    } +  } +} | 
