/* * 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(); } }