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 import org.mortbay.util.LazyList;
9
10
11
12
13
14
15
16
17 public class VirtualHostRuleContainer extends RuleContainer
18 {
19 private String[] _virtualHosts;
20
21
22
23
24
25
26 public void setVirtualHosts( String[] virtualHosts )
27 {
28 if ( virtualHosts == null )
29 {
30 _virtualHosts = virtualHosts;
31 }
32 else
33 {
34 _virtualHosts = new String[virtualHosts.length];
35 for ( int i = 0; i < virtualHosts.length; i++ )
36 _virtualHosts[i] = normalizeHostname( virtualHosts[i]);
37 }
38 }
39
40
41
42
43
44
45 public String[] getVirtualHosts()
46 {
47 return _virtualHosts;
48 }
49
50
51
52
53
54
55 public void addVirtualHost(String virtualHost)
56 {
57 _virtualHosts = (String[])LazyList.addToArray(_virtualHosts,virtualHost,String.class);
58 }
59
60
61
62
63
64
65
66 @Override
67 public String matchAndApply(String target, HttpServletRequest request, HttpServletResponse response) throws IOException
68 {
69 if(_virtualHosts != null && _virtualHosts.length > 0 )
70 {
71 String requestHost = normalizeHostname( request.getServerName() );
72 for( String ruleHost : _virtualHosts )
73 {
74 if(ruleHost == null || ruleHost.equalsIgnoreCase(requestHost)
75 || (ruleHost.startsWith("*.") && ruleHost.regionMatches(true,2,requestHost,requestHost.indexOf(".")+1,ruleHost.length()-2)))
76 return apply(target, request, response);
77 }
78 }
79 else
80 {
81 return apply(target, request, response);
82 }
83 return null;
84 }
85
86
87 private String normalizeHostname( String host )
88 {
89 if ( host == null )
90 return null;
91
92 if ( host.endsWith( "." ) )
93 return host.substring( 0, host.length() -1);
94
95 return host;
96 }
97
98 }