From c9bf0919b0f3d9b3f2bfe38688b90cac56fdd20a Mon Sep 17 00:00:00 2001 From: jensp Date: Thu, 9 Nov 2017 07:26:00 +0000 Subject: [PATCH] Bugfix for ccm-navigation and redirect to language specific URL: If the URL points to a JSP (sitemap.jsp in particular) do no redirect. git-svn-id: https://svn.libreccm.org/ccm/trunk@5104 8810af33-2d31-482b-a856-94f89814c4df --- .../navigation/NavigationFileResolver.java | 117 ++++++++++-------- 1 file changed, 63 insertions(+), 54 deletions(-) diff --git a/ccm-navigation/src/com/arsdigita/navigation/NavigationFileResolver.java b/ccm-navigation/src/com/arsdigita/navigation/NavigationFileResolver.java index fae3323f6..7cdb30207 100755 --- a/ccm-navigation/src/com/arsdigita/navigation/NavigationFileResolver.java +++ b/ccm-navigation/src/com/arsdigita/navigation/NavigationFileResolver.java @@ -77,67 +77,76 @@ public class NavigationFileResolver extends DefaultApplicationFileResolver { s_log.debug("Resolving " + path); } - if (CMSConfig.getInstanceOf().getUseLanguageExtension() - && path.matches("(.*)/index\\.[a-zA-Z]{2}")) { + if (!path.endsWith(".jsp")) { + if (CMSConfig.getInstanceOf().getUseLanguageExtension() + && path.matches("(.*)/index\\.[a-zA-Z]{2}")) { - final String lang = path.substring(path.length() - 2); - path = path.substring(0, path.length() - "index.$$".length()); - GlobalizationHelper.setSelectedLocale(lang); - } else { - - String lang; - if (GlobalizationHelper.getSelectedLocale(sreq) == null) { - lang = GlobalizationHelper.getNegotiatedLocale().getLanguage(); + final String lang = path.substring(path.length() - 2); + path = path.substring(0, path.length() - "index.$$".length()); + GlobalizationHelper.setSelectedLocale(lang); } else { - lang = GlobalizationHelper.getSelectedLocale(sreq).getLanguage(); - } - 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()); - } - - //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(); - if (!langs.localizationExists(lang)) { - lang = KernelConfig.getConfig().getDefaultLanguage(); + String lang; + if (GlobalizationHelper.getSelectedLocale(sreq) == null) { + lang = GlobalizationHelper.getNegotiatedLocale() + .getLanguage(); + } else { + lang = GlobalizationHelper.getSelectedLocale(sreq) + .getLanguage(); } - } - redirectTo - .append("/ccm") - .append(app.getPath()) - .append(path) - .append("index.") - .append(lang); + final StringBuffer redirectTo = new StringBuffer(); - sresp.setHeader("Location", redirectTo.toString()); - try { - sresp.sendError(HttpServletResponse.SC_MOVED_PERMANENTLY); - } catch (IOException ex) { - throw new RuntimeException(ex); + 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(); + if (!langs.localizationExists(lang)) { + lang = KernelConfig.getConfig().getDefaultLanguage(); + } + } + + redirectTo + .append("/ccm") + .append(app.getPath()) + .append(path); + if (!path.endsWith("/")) { + redirectTo.append('/'); + } + redirectTo + .append("index.") + .append(lang); + + sresp.setHeader("Location", redirectTo.toString()); + try { + sresp.sendError(HttpServletResponse.SC_MOVED_PERMANENTLY); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + return null; } - return null; } if (path.equals("/category.jsp")) {