1
2
3
4
5
6
7
8
9
10
11
12
13
14 package org.eclipse.jetty.rewrite.handler;
15
16 import java.io.IOException;
17
18 import javax.servlet.http.HttpServletRequest;
19 import javax.servlet.http.HttpServletResponse;
20
21 import org.eclipse.jetty.http.PathMap;
22 import org.eclipse.jetty.server.HttpConnection;
23 import org.eclipse.jetty.server.Request;
24 import org.eclipse.jetty.util.LazyList;
25 import org.eclipse.jetty.util.log.Log;
26
27
28
29
30
31
32
33
34 public class RuleContainer extends Rule
35 {
36 protected Rule[] _rules;
37
38 protected String _originalPathAttribute;
39 protected boolean _rewriteRequestURI=true;
40 protected boolean _rewritePathInfo=true;
41
42 protected LegacyRule _legacy;
43
44
45 @Deprecated
46 public LegacyRule getLegacyRule()
47 {
48 if (_legacy==null)
49 {
50 _legacy= new LegacyRule();
51 addRule(_legacy);
52 }
53 return _legacy;
54 }
55
56
57
58
59
60
61
62
63
64 @Deprecated
65 public void setLegacyRule(LegacyRule legacyRule)
66 {
67 _legacy = legacyRule;
68 }
69
70
71
72
73
74
75 public Rule[] getRules()
76 {
77 return _rules;
78 }
79
80
81
82
83
84
85 public void setRules(Rule[] rules)
86 {
87 if (_legacy==null)
88 _rules = rules;
89 else
90 {
91 _rules=null;
92 addRule(_legacy);
93 if (rules!=null)
94 for (Rule rule:rules)
95 addRule(rule);
96 }
97 }
98
99
100
101
102
103
104 public void addRule(Rule rule)
105 {
106 _rules = (Rule[])LazyList.addToArray(_rules,rule,Rule.class);
107 }
108
109
110
111
112
113
114
115 public boolean isRewriteRequestURI()
116 {
117 return _rewriteRequestURI;
118 }
119
120
121
122
123
124
125 public void setRewriteRequestURI(boolean rewriteRequestURI)
126 {
127 _rewriteRequestURI=rewriteRequestURI;
128 }
129
130
131
132
133
134
135 public boolean isRewritePathInfo()
136 {
137 return _rewritePathInfo;
138 }
139
140
141
142
143
144
145 public void setRewritePathInfo(boolean rewritePathInfo)
146 {
147 _rewritePathInfo=rewritePathInfo;
148 }
149
150
151
152
153
154
155 public String getOriginalPathAttribute()
156 {
157 return _originalPathAttribute;
158 }
159
160
161
162
163
164
165 public void setOriginalPathAttribute(String originalPathAttribte)
166 {
167 _originalPathAttribute=originalPathAttribte;
168 }
169
170
171
172
173
174
175
176 @Override
177 public String matchAndApply(String target, HttpServletRequest request, HttpServletResponse response) throws IOException
178 {
179 return apply(target, request, response);
180 }
181
182
183
184
185
186
187
188 protected String apply(String target, HttpServletRequest request, HttpServletResponse response) throws IOException
189 {
190 boolean original_set=_originalPathAttribute==null;
191
192 for (Rule rule : _rules)
193 {
194 String applied=rule.matchAndApply(target,request, response);
195 if (applied!=null)
196 {
197 Log.debug("applied {}",rule);
198 if (!target.equals(applied))
199 {
200 Log.debug("rewrote {} to {}",target,applied);
201 if (!original_set)
202 {
203 original_set=true;
204 request.setAttribute(_originalPathAttribute, target);
205 }
206
207 if (_rewriteRequestURI)
208 ((Request)request).setRequestURI(applied);
209
210 if (_rewritePathInfo)
211 ((Request)request).setPathInfo(applied);
212
213 target=applied;
214 }
215
216 if (rule.isHandling())
217 {
218 Log.debug("handling {}",rule);
219 (request instanceof Request?(Request)request:HttpConnection.getCurrentConnection().getRequest()).setHandled(true);
220 }
221
222 if (rule.isTerminating())
223 {
224 Log.debug("terminating {}",rule);
225 break;
226 }
227 }
228 }
229
230 return target;
231 }
232 }