1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.seasar.cubby.filter;
18
19 import java.io.IOException;
20 import java.util.ArrayList;
21 import java.util.List;
22 import java.util.StringTokenizer;
23 import java.util.regex.Matcher;
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.util.StringUtils;
36
37
38
39
40
41
42 public class SendErrorFilter implements Filter {
43
44
45 public static final String STATUS_CODE = "statusCode";
46
47
48 public static final String IGNORE_PATH_PATTERN = "ignorePathPattern";
49
50
51 private int statusCode = HttpServletResponse.SC_FORBIDDEN;
52
53
54 private final List<Pattern> ignorePathPatterns = new ArrayList<Pattern>();
55
56
57
58
59
60
61
62
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
97
98
99
100
101
102
103
104
105
106
107
108 public void init(final FilterConfig config) throws ServletException {
109 final String statusCodeString = config.getInitParameter(STATUS_CODE);
110 if (statusCodeString != null) {
111 statusCode = Integer.parseInt(statusCodeString);
112 }
113 final String ignorePathPatternString = config
114 .getInitParameter(IGNORE_PATH_PATTERN);
115 if (!StringUtils.isEmpty(ignorePathPatternString)) {
116
117 for (final StringTokenizer tokenizer = new StringTokenizer(
118 ignorePathPatternString, ","); tokenizer.hasMoreTokens();) {
119 final String token = tokenizer.nextToken();
120 final Pattern pattern = Pattern.compile(token);
121 ignorePathPatterns.add(pattern);
122 }
123 }
124 }
125
126
127
128
129 public void destroy() {
130 }
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146 public void doFilter(final ServletRequest req, final ServletResponse res,
147 final FilterChain chain) throws IOException, ServletException {
148
149 final HttpServletRequest request = (HttpServletRequest) req;
150 final HttpServletResponse response = (HttpServletResponse) res;
151
152 if (isIgnore(request)) {
153 chain.doFilter(request, response);
154 } else {
155 response.sendError(statusCode);
156 }
157 }
158
159
160
161
162
163
164
165
166
167 private boolean isIgnore(final HttpServletRequest request) {
168 final String servletPath = request.getServletPath();
169 for (final Pattern ignorePattern : ignorePathPatterns) {
170 final Matcher matcher = ignorePattern.matcher(servletPath);
171 if (matcher.matches()) {
172 return true;
173 }
174 }
175 return false;
176 }
177
178 }