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