diff --git a/ccm-shortcuts/src/main/java/org/libreccm/shortcuts/ShortcutFilter.java b/ccm-shortcuts/src/main/java/org/libreccm/shortcuts/ShortcutsFilter.java similarity index 80% rename from ccm-shortcuts/src/main/java/org/libreccm/shortcuts/ShortcutFilter.java rename to ccm-shortcuts/src/main/java/org/libreccm/shortcuts/ShortcutsFilter.java index 991c71ad3..e6c4464b2 100644 --- a/ccm-shortcuts/src/main/java/org/libreccm/shortcuts/ShortcutFilter.java +++ b/ccm-shortcuts/src/main/java/org/libreccm/shortcuts/ShortcutsFilter.java @@ -31,6 +31,7 @@ import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; +import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -38,10 +39,11 @@ import javax.servlet.http.HttpServletResponse; * * @author Jens Pelzetter */ -public class ShortcutFilter implements Filter { +@WebFilter(urlPatterns = {"/*"}) +public class ShortcutsFilter implements Filter { private final static Logger LOGGER = LogManager.getLogger( - ShortcutFilter.class); + ShortcutsFilter.class); @Inject private ShortcutRepository shortcutRepository; @@ -77,15 +79,14 @@ public class ShortcutFilter implements Filter { } final Optional shortcut = shortcutRepository.findByUrlKey( - path); + cleanUrlKey(httpRequest, path)); if (shortcut.isPresent()) { LOGGER.debug("Found Shortcut for path {}: {}", path, shortcut.toString()); final StringBuffer targetBuffer = new StringBuffer(shortcut - .get() - .getRedirect()); + .get().getRedirect()); final String queryString = httpRequest.getQueryString(); if (queryString != null && !queryString.isEmpty()) { @@ -114,6 +115,29 @@ public class ShortcutFilter implements Filter { } } + private String cleanUrlKey(final HttpServletRequest request, + final String requestUri) { + String urlKey; + if (request.getContextPath() == null + || request.getContextPath().isEmpty()) { + urlKey = requestUri; + } else if (requestUri.startsWith(request.getContextPath())) { + urlKey = requestUri.substring(request.getContextPath().length()); + } else { + urlKey = requestUri; + } + + if (!urlKey.startsWith("/")) { + urlKey = String.join("", "/", urlKey); + } + + if (!urlKey.endsWith("/")) { + urlKey = String.join("", urlKey, "/"); + } + + return urlKey; + } + @Override public void destroy() { //Nothing