From ac05306908c5a1e462017e09b56d3603f4bd44c6 Mon Sep 17 00:00:00 2001 From: jensp Date: Sat, 21 Oct 2017 12:15:51 +0000 Subject: [PATCH] Some Browser are not interpreting a redirect URL without the server part correctly. git-svn-id: https://svn.libreccm.org/ccm/trunk@5069 8810af33-2d31-482b-a856-94f89814c4df --- .../PublicPersonalProfilesServlet.java | 13 +++++++++ .../arsdigita/cms/ContentSectionServlet.java | 27 ++++++++++++------ .../navigation/NavigationFileResolver.java | 28 ++++++++++++++----- .../navigation/ui/category/Hierarchy.java | 7 +++-- 4 files changed, 58 insertions(+), 17 deletions(-) diff --git a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesServlet.java b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesServlet.java index 2898020cb..4465b9c22 100644 --- a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesServlet.java +++ b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesServlet.java @@ -141,6 +141,19 @@ public class PublicPersonalProfilesServlet extends BaseApplicationServlet { final StringBuffer redirectTo = new StringBuffer(); + redirectTo + .append(DispatcherHelper.getRequest().getScheme()) + .append("://") + .append(DispatcherHelper.getRequest().getServerName()); + + if (DispatcherHelper.getRequest().getServerPort() != 80 + && DispatcherHelper.getRequest().getServerPort() != 443) { + redirectTo + .append(":") + .append(DispatcherHelper.getRequest().getServerPort()); + } + + if (DispatcherHelper.getWebappContext() != null && !DispatcherHelper.getWebappContext().trim().isEmpty()) { redirectTo.append(DispatcherHelper.getWebappContext()); diff --git a/ccm-cms/src/com/arsdigita/cms/ContentSectionServlet.java b/ccm-cms/src/com/arsdigita/cms/ContentSectionServlet.java index 47efee3c7..ab5812f68 100755 --- a/ccm-cms/src/com/arsdigita/cms/ContentSectionServlet.java +++ b/ccm-cms/src/com/arsdigita/cms/ContentSectionServlet.java @@ -299,13 +299,26 @@ public class ContentSectionServlet extends BaseApplicationServlet { .getSelectedLocale(sreq) .getLanguage(); } - + if (getItem(section, url, sreq, sresp) == null) { lang = KernelConfig.getConfig().getDefaultLanguage(); } - + // try { final StringBuffer redirectTo = new StringBuffer(); + + redirectTo + .append(DispatcherHelper.getRequest().getScheme()) + .append("://") + .append(DispatcherHelper.getRequest().getServerName()); + + if (DispatcherHelper.getRequest().getServerPort() != 80 + && DispatcherHelper.getRequest().getServerPort() != 443) { + redirectTo + .append(":") + .append(DispatcherHelper.getRequest().getServerPort()); + } + if (DispatcherHelper.getWebappContext() != null && !DispatcherHelper.getWebappContext().trim() .isEmpty()) { @@ -320,16 +333,14 @@ public class ContentSectionServlet extends BaseApplicationServlet { .append(section.getPath()); if (pathInfo.endsWith("/")) { redirectTo - // .append("/") .append(pathInfo.substring(0, pathInfo.length() - 1)); } else { - redirectTo - // .append("/") - .append(pathInfo); + redirectTo.append(pathInfo); } redirectTo - .append(".").append(lang); + .append(".") + .append(lang); sresp.setHeader("Location", redirectTo.toString()); sresp.sendError(HttpServletResponse.SC_MOVED_PERMANENTLY); @@ -352,7 +363,7 @@ public class ContentSectionServlet extends BaseApplicationServlet { sreq, sresp, itemResolver); - + Assert.exists(pathInfo, "String pathInfo"); if (pathInfo.length() > 1 && pathInfo.endsWith("/")) { diff --git a/ccm-navigation/src/com/arsdigita/navigation/NavigationFileResolver.java b/ccm-navigation/src/com/arsdigita/navigation/NavigationFileResolver.java index bb23e8e72..fae3323f6 100755 --- a/ccm-navigation/src/com/arsdigita/navigation/NavigationFileResolver.java +++ b/ccm-navigation/src/com/arsdigita/navigation/NavigationFileResolver.java @@ -93,30 +93,44 @@ public class NavigationFileResolver extends DefaultApplicationFileResolver { } final StringBuffer redirectTo = new StringBuffer(); - if (DispatcherHelper.getWebappContext() != null - && !DispatcherHelper.getWebappContext().trim().isEmpty()) { + + redirectTo + .append(DispatcherHelper.getRequest().getScheme()) + .append("://") + .append(DispatcherHelper.getRequest().getServerName()); + + if (DispatcherHelper.getRequest().getServerPort() != 80 + && DispatcherHelper.getRequest().getServerPort() != 443) { + redirectTo + .append(":") + .append(DispatcherHelper.getRequest().getServerPort()); + } + + if (DispatcherHelper.getWebappContext() != null + && !DispatcherHelper.getWebappContext().trim().isEmpty()) { redirectTo.append(DispatcherHelper.getWebappContext()); } - + //Is category available in lang? If not change lang to default language final Category[] cats = resolvePath(getRootCategory(), path); if (cats == null) { lang = KernelConfig.getConfig().getDefaultLanguage(); } else { - final CategoryLocalizationCollection langs = cats[cats.length - 1].getCategoryLocalizationCollection(); + final CategoryLocalizationCollection langs = cats[cats.length + - 1] + .getCategoryLocalizationCollection(); if (!langs.localizationExists(lang)) { lang = KernelConfig.getConfig().getDefaultLanguage(); } } - + redirectTo .append("/ccm") .append(app.getPath()) .append(path) .append("index.") .append(lang); - - + sresp.setHeader("Location", redirectTo.toString()); try { sresp.sendError(HttpServletResponse.SC_MOVED_PERMANENTLY); diff --git a/ccm-navigation/src/com/arsdigita/navigation/ui/category/Hierarchy.java b/ccm-navigation/src/com/arsdigita/navigation/ui/category/Hierarchy.java index 450ddaa8b..c11ce0173 100755 --- a/ccm-navigation/src/com/arsdigita/navigation/ui/category/Hierarchy.java +++ b/ccm-navigation/src/com/arsdigita/navigation/ui/category/Hierarchy.java @@ -26,16 +26,17 @@ import com.arsdigita.persistence.Filter; import com.arsdigita.persistence.OID; import com.arsdigita.persistence.SessionManager; import com.arsdigita.xml.Element; + import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Set; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + import org.apache.log4j.Logger; /** @@ -56,11 +57,13 @@ public class Hierarchy extends AbstractTree { * If set to true, the widget will output items as well as categories. It * will only output items in the category returned by getItemsRootCategory() * and its subcategories. Set to false by default. + * @param showItems */ public void setShowItems( boolean showItems ) { m_showItems = showItems; } + @Override public Element generateXML(HttpServletRequest request, HttpServletResponse response) { Category rootCategory = getModel().getRootCategory();