@Override public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; forwardPaths = buildRewritePathsMap(filterConfig.getInitParameter("forwardPaths")); redirectPaths = buildRewritePathsMap(filterConfig.getInitParameter("redirectPaths")); }
@Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { if (!handleRewriteUris(servletRequest, servletResponse)) { LOG.debug("No rewrite or forward path found, "); filterChain.doFilter(servletRequest, servletResponse); } }
private String findRewritePath(String reqPath, Map<String, String> map) { for (Map.Entry<String, String> entry : map.entrySet()) { String path = entry.getKey(); if (matchesPath(reqPath, path)) { return entry.getValue(); } } return null; }
private void doTestForwardRedirectPaths(String[] paths, boolean filterChainShouldBeInvoked) throws ServletException, IOException { RewriteUriFilter rewriteUriFilter = new RewriteUriFilter(); FilterConfig filterConfig = Mockito.mock(FilterConfig.class); Mockito.when(filterConfig.getInitParameter("forwardPaths")).thenReturn("/api/v1/confluent,/subjects/*,/schemas/ids/*"); Mockito.when(filterConfig.getInitParameter("redirectPaths")).thenReturn("/ui/,/"); rewriteUriFilter.init(filterConfig); for (String requestPath : paths) { LOG.info("Received path [{}]", requestPath); HttpServletRequest servletRequest = Mockito.mock(HttpServletRequest.class); Mockito.when(servletRequest.getRequestURI()).thenReturn(requestPath); RequestDispatcher requestDispatcher = Mockito.mock(RequestDispatcher.class); Mockito.when(servletRequest.getRequestDispatcher(Mockito.anyString())) .thenReturn(requestDispatcher); HttpServletResponse servletResponse = Mockito.mock(HttpServletResponse.class); MyFilterChain filterChain = new MyFilterChain(); rewriteUriFilter.doFilter(servletRequest, servletResponse, filterChain); if(filterChainShouldBeInvoked) { Assert.assertTrue("Filter chain should have been invoked", filterChain.isFilterChainInvoked()); } else { Assert.assertFalse("Filter chain should not have been invoked", filterChain.isFilterChainInvoked()); } } }
private boolean handleRewriteUris(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { String reqPath = ((HttpServletRequest) servletRequest).getRequestURI(); String redirectPath = findRewritePath(reqPath, redirectPaths); LOG.debug("request path [{}], redirectPath [{}]", reqPath, redirectPath); if(redirectPath != null) { LOG.info("Redirecting request [{}] to [{}]", servletRequest, redirectPath); ((HttpServletResponse) servletResponse).sendRedirect(redirectPath); return true; } else { String forwardPath = findRewritePath(reqPath, forwardPaths); LOG.debug("request path [{}], forwardPath [{}]", reqPath, forwardPath); if (forwardPath != null) { LOG.info("Forwarding request [{}] to [{}]", servletRequest, forwardPath); servletRequest.getRequestDispatcher(forwardPath + reqPath) .forward(servletRequest, servletResponse); return true; } } return false; }
private boolean handleRewriteUris(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { String reqPath = ((HttpServletRequest) servletRequest).getRequestURI(); String redirectPath = findRewritePath(reqPath, redirectPaths); LOG.debug("request path [{}], redirectPath [{}]", reqPath, redirectPath); if(redirectPath != null) { LOG.info("Redirecting request [{}] to [{}]", servletRequest, redirectPath); ((HttpServletResponse) servletResponse).sendRedirect(redirectPath); return true; } else { String forwardPath = findRewritePath(reqPath, forwardPaths); LOG.debug("request path [{}], forwardPath [{}]", reqPath, forwardPath); if (forwardPath != null) { LOG.info("Forwarding request [{}] to [{}]", servletRequest, forwardPath); servletRequest.getRequestDispatcher(forwardPath + reqPath) .forward(servletRequest, servletResponse); return true; } } return false; }
@Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { if (!handleRewriteUris(servletRequest, servletResponse)) { LOG.debug("No rewrite or forward path found, "); filterChain.doFilter(servletRequest, servletResponse); } }
private String findRewritePath(String reqPath, Map<String, String> map) { for (Map.Entry<String, String> entry : map.entrySet()) { String path = entry.getKey(); if (matchesPath(reqPath, path)) { return entry.getValue(); } } return null; }
@Override public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; forwardPaths = buildRewritePathsMap(filterConfig.getInitParameter("forwardPaths")); redirectPaths = buildRewritePathsMap(filterConfig.getInitParameter("redirectPaths")); }