Class RewriteHandler

java.lang.Object
All Implemented Interfaces:
Handler, HandlerContainer, Container, Destroyable, Dumpable, Dumpable.DumpableContainer, LifeCycle

public class RewriteHandler extends HandlerWrapper

Rewrite handler is responsible for managing the rules. Its capabilities is not only limited for URL rewrites such as RewritePatternRule or RewriteRegexRule. There is also handling for cookies, headers, redirection, setting status or error codes whenever the rule finds a match.

The rules can be matched by the either: pattern matching of @ServletPathSpec (eg PatternRule), regular expressions (eg RegexRule) or certain conditions set (eg MsieSslRule - the requests must be in SSL mode).

The rules can be grouped into rule containers (class RuleContainer), and will only be applied if the request matches the conditions for their container (e.g., by virtual host name)

The list of predefined rules is:

Here is a typical jetty.xml configuration would be:

     <New id="RewriteHandler" class="org.eclipse.jetty.rewrite.handler.RewriteHandler">
       <Set name="rules">
         <Array type="org.eclipse.jetty.rewrite.handler.Rule">

           <Item>
             <New id="rewrite" class="org.eclipse.jetty.rewrite.handler.RewritePatternRule">
               <Set name="pattern">/*</Set>
               <Set name="replacement">/test</Set>
             </New>
           </Item>

           <Item>
             <New id="response" class="org.eclipse.jetty.rewrite.handler.ResponsePatternRule">
               <Set name="pattern">/session/</Set>
               <Set name="code">400</Set>
               <Set name="reason">Setting error code 400</Set>
             </New>
           </Item>

           <Item>
             <New id="header" class="org.eclipse.jetty.rewrite.handler.HeaderPatternRule">
               <Set name="pattern">*.jsp</Set>
               <Set name="name">server</Set>
               <Set name="value">dexter webserver</Set>
             </New>
           </Item>

           <Item>
             <New id="header" class="org.eclipse.jetty.rewrite.handler.HeaderPatternRule">
               <Set name="pattern">*.jsp</Set>
               <Set name="name">title</Set>
               <Set name="value">driven header purpose</Set>
             </New>
           </Item>

           <Item>
             <New id="redirect" class="org.eclipse.jetty.rewrite.handler.RedirectPatternRule">
               <Set name="pattern">/test/dispatch</Set>
               <Set name="location">http://jetty.eclipse.org</Set>
             </New>
           </Item>

           <Item>
             <New id="regexRewrite" class="org.eclipse.jetty.rewrite.handler.RewriteRegexRule">
               <Set name="regex">/test-jaas/$</Set>
               <Set name="replacement">/demo</Set>
             </New>
           </Item>

           <Item>
             <New id="forwardedHttps" class="org.eclipse.jetty.rewrite.handler.ForwardedSchemeHeaderRule">
               <Set name="header">X-Forwarded-Scheme</Set>
               <Set name="headerValue">https</Set>
               <Set name="scheme">https</Set>
             </New>
           </Item>

           <Item>
             <New id="virtualHost" class="org.eclipse.jetty.rewrite.handler.VirtualHostRuleContainer">

               <Set name="virtualHosts">
                 <Array type="java.lang.String">
                   <Item>eclipse.com</Item>
                   <Item>www.eclipse.com</Item>
                   <Item>eclipse.org</Item>
                   <Item>www.eclipse.org</Item>
                 </Array>
               </Set>

               <Call name="addRule">
                 <Arg>
                   <New class="org.eclipse.jetty.rewrite.handler.CookiePatternRule">
                     <Set name="pattern">/*</Set>
                     <Set name="name">CookiePatternRule</Set>
                     <Set name="value">1</Set>
                   </New>
                 </Arg>
               </Call>

             </New>
           </Item>

         </Array>
       </Set>
     </New>

     <Set name="handler">
       <Ref id="RewriteHandler"/>
         <Set name="handler">
           <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
             <Set name="handlers">
               <Array type="org.eclipse.jetty.server.Handler">
                 <Item>
                   <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
                 </Item>
                 <Item>
                   <New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
                 </Item>
               </Array>
             </Set>
           </New>
         </Set>
       </Ref>
     </Set>