View Javadoc

1   package org.mortbay.jetty.handler.rewrite;
2   
3   import java.io.IOException;
4   
5   import javax.servlet.http.HttpServletRequest;
6   import javax.servlet.http.HttpServletResponse;
7   
8   /**
9    * Abstract rule that matches against request headers.
10   */
11  
12  public abstract class HeaderRule extends Rule
13  {
14      private String _header;
15      private String _headerValue;
16  
17      /* ------------------------------------------------------------ */
18      public String getHeader()
19      {
20          return _header;
21      }
22  
23      /* ------------------------------------------------------------ */
24      /**
25       * @param header
26       *                the header name to check for
27       */
28      public void setHeader(String header)
29      {
30          _header = header;
31      }
32  
33      /* ------------------------------------------------------------ */
34      public String getHeaderValue()
35      {
36          return _headerValue;
37      }
38  
39      /* ------------------------------------------------------------ */
40      /**
41       * @param headerValue
42       *                the header value to match against. If null, then the
43       *                presence of the header is enough to match
44       */
45      public void setHeaderValue(String headerValue)
46      {
47          _headerValue = headerValue;
48      }
49  
50      /* ------------------------------------------------------------ */
51      @Override
52      public String matchAndApply(String target, HttpServletRequest request,
53              HttpServletResponse response) throws IOException
54      {
55          String requestHeaderValue = request.getHeader(_header);
56          
57          if (requestHeaderValue != null)
58              if (_headerValue == null || _headerValue.equals(requestHeaderValue))
59                  apply(target, requestHeaderValue, request, response);
60          
61          return null;
62      }
63  
64      /* ------------------------------------------------------------ */
65      /**
66       * Apply the rule to the request
67       * 
68       * @param target
69       *                field to attempt match
70       * @param value 
71       *                header value found
72       * @param request
73       *                request object
74       * @param response
75       *                response object
76       * @return The target (possible updated)
77       * @throws IOException
78       *                 exceptions dealing with operating on request or response
79       *                 objects
80       */
81      protected abstract String apply(String target, String value, HttpServletRequest request, HttpServletResponse response) throws IOException;
82  
83      /* ------------------------------------------------------------ */
84      public String toString()
85      {
86          return super.toString() + "[" + _header + ":" + _headerValue + "]";
87      }
88  
89  }