// // ======================================================================== // Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd. // ------------------------------------------------------------------------ // All rights reserved. This program and the accompanying materials // are made available under the terms of the Eclipse Public License v1.0 // and Apache License v2.0 which accompanies this distribution. // // The Eclipse Public License is available at // http://www.eclipse.org/legal/epl-v10.html // // The Apache License v2.0 is available at // http://www.opensource.org/licenses/apache2.0.php // // You may elect to redistribute this code under either of these licenses. // ======================================================================== // package org.eclipse.jetty.rewrite.handler; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpStatus; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.AbstractHandler; import org.junit.Before; import org.junit.Test; public class TerminatingRegexRuleTest extends AbstractRuleTestCase { private RewriteHandler rewriteHandler; @Before public void init() throws Exception { rewriteHandler = new RewriteHandler(); rewriteHandler.setServer(_server); rewriteHandler.setHandler(new AbstractHandler() { @Override public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setStatus(HttpStatus.CREATED_201); request.setAttribute("target",target); request.setAttribute("URI",request.getRequestURI()); request.setAttribute("info",request.getPathInfo()); } }); rewriteHandler.start(); TerminatingRegexRule rule1 = new TerminatingRegexRule(); rule1.setRegex("^/login.jsp$"); rewriteHandler.addRule(rule1); RedirectRegexRule rule2 = new RedirectRegexRule(); rule2.setRegex("^/login.*$"); rule2.setReplacement("http://login.company.com/"); rewriteHandler.addRule(rule2); start(false); } private void assertIsRedirect(int expectedStatus, String expectedLocation) { assertThat("Response Status",_response.getStatus(),is(expectedStatus)); assertThat("Response Location Header",_response.getHeader(HttpHeader.LOCATION.asString()),is(expectedLocation)); } private void assertIsRequest(String expectedRequestPath) { assertThat("Response Status",_response.getStatus(),is(HttpStatus.CREATED_201)); assertThat("Request Target",_request.getAttribute("target"),is(expectedRequestPath)); } @Test public void testTerminatingEarly() throws IOException, ServletException { rewriteHandler.handle("/login.jsp",_request,_request,_response); assertIsRequest("/login.jsp"); } @Test public void testNoTerminationDo() throws IOException, ServletException { rewriteHandler.handle("/login.do",_request,_request,_response); assertIsRedirect(HttpStatus.MOVED_TEMPORARILY_302,"http://login.company.com/"); } @Test public void testNoTerminationDir() throws IOException, ServletException { rewriteHandler.handle("/login/",_request,_request,_response); assertIsRedirect(HttpStatus.MOVED_TEMPORARILY_302,"http://login.company.com/"); } }