1 //
2 // ========================================================================
3 // Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd.
4 // ------------------------------------------------------------------------
5 // All rights reserved. This program and the accompanying materials
6 // are made available under the terms of the Eclipse Public License v1.0
7 // and Apache License v2.0 which accompanies this distribution.
8 //
9 // The Eclipse Public License is available at
10 // http://www.eclipse.org/legal/epl-v10.html
11 //
12 // The Apache License v2.0 is available at
13 // http://www.opensource.org/licenses/apache2.0.php
14 //
15 // You may elect to redistribute this code under either of these licenses.
16 // ========================================================================
17 //
18
19 package org.eclipse.jetty.rewrite.handler;
20
21 import java.io.IOException;
22 import java.util.regex.Matcher;
23
24 import javax.servlet.http.HttpServletRequest;
25 import javax.servlet.http.HttpServletResponse;
26
27 /**
28 * Redirects the response by matching with a regular expression.
29 * The replacement string may use $n" to replace the nth capture group.
30 */
31 public class RedirectRegexRule extends RegexRule
32 {
33 private String _replacement;
34
35 public RedirectRegexRule()
36 {
37 _handling = true;
38 _terminating = true;
39 }
40
41 /**
42 * Whenever a match is found, it replaces with this value.
43 *
44 * @param replacement the replacement string.
45 */
46 public void setReplacement(String replacement)
47 {
48 _replacement = replacement;
49 }
50
51 @Override
52 protected String apply(String target, HttpServletRequest request, HttpServletResponse response, Matcher matcher)
53 throws IOException
54 {
55 target=_replacement;
56 for (int g=1;g<=matcher.groupCount();g++)
57 {
58 String group = matcher.group(g);
59 target=target.replaceAll("\\$"+g,group);
60 }
61
62 response.sendRedirect(response.encodeRedirectURL(target));
63 return target;
64 }
65 }