1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.filter;
17
18 import java.io.IOException;
19 import java.util.ArrayList;
20 import java.util.List;
21 import java.util.StringTokenizer;
22 import java.util.regex.Pattern;
23
24 import javax.servlet.Filter;
25 import javax.servlet.FilterChain;
26 import javax.servlet.FilterConfig;
27 import javax.servlet.ServletException;
28 import javax.servlet.ServletRequest;
29 import javax.servlet.ServletResponse;
30 import javax.servlet.http.HttpServletRequest;
31 import javax.servlet.http.HttpServletResponse;
32
33 import org.seasar.cubby.internal.controller.RequestProcessor;
34 import org.seasar.cubby.internal.controller.impl.RequestProcessorImpl;
35 import org.seasar.cubby.internal.routing.Router;
36 import org.seasar.cubby.internal.routing.impl.RouterImpl;
37 import org.seasar.cubby.internal.util.StringUtils;
38 import org.seasar.cubby.routing.PathInfo;
39
40
41
42
43
44
45
46
47
48
49
50 public class CubbyFilter implements Filter {
51
52
53 public static final String IGNORE_PATH_PATTERN = "ignorePathPattern";
54
55
56 private final List<Pattern> ignorePathPatterns = new ArrayList<Pattern>();
57
58
59 private final Router router = new RouterImpl();
60
61
62 private final RequestProcessor requestProcessor = new RequestProcessorImpl();
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96 public void init(final FilterConfig config) throws ServletException {
97 final String ignorePathPatternString = config
98 .getInitParameter(IGNORE_PATH_PATTERN);
99 if (!StringUtils.isEmpty(ignorePathPatternString)) {
100
101 for (final StringTokenizer tokenizer = new StringTokenizer(
102 ignorePathPatternString, ","); tokenizer.hasMoreTokens();) {
103 final String token = tokenizer.nextToken();
104 final Pattern pattern = Pattern.compile(token);
105 ignorePathPatterns.add(pattern);
106 }
107 }
108 }
109
110
111
112
113 public void destroy() {
114 }
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137 public void doFilter(final ServletRequest req, final ServletResponse res,
138 final FilterChain chain) throws IOException, ServletException {
139 final HttpServletRequest request = (HttpServletRequest) req;
140 final HttpServletResponse response = (HttpServletResponse) res;
141 final PathInfo pathInfo = router.routing(request, response,
142 ignorePathPatterns);
143 if (pathInfo != null) {
144 try {
145 requestProcessor.process(request, response, pathInfo);
146 } catch (final Exception e) {
147 if (e instanceof IOException) {
148 throw (IOException) e;
149 } else if (e instanceof ServletException) {
150 throw (ServletException) e;
151 } else {
152 throw new ServletException(e);
153 }
154 }
155 } else {
156 chain.doFilter(request, response);
157 }
158 }
159
160 }