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.Matcher;
23 import java.util.regex.Pattern;
24
25 import javax.servlet.Filter;
26 import javax.servlet.FilterChain;
27 import javax.servlet.FilterConfig;
28 import javax.servlet.ServletException;
29 import javax.servlet.ServletRequest;
30 import javax.servlet.ServletResponse;
31 import javax.servlet.http.HttpServletRequest;
32 import javax.servlet.http.HttpServletResponse;
33
34 import org.seasar.cubby.internal.util.StringUtils;
35
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
109
110 public void init(final FilterConfig config) throws ServletException {
111 final String statusCodeString = config.getInitParameter(STATUS_CODE);
112 if (statusCodeString != null) {
113 statusCode = Integer.parseInt(statusCodeString);
114 }
115 final String ignorePathPatternString = config
116 .getInitParameter(IGNORE_PATH_PATTERN);
117 if (!StringUtils.isEmpty(ignorePathPatternString)) {
118
119 for (final StringTokenizer tokenizer = new StringTokenizer(
120 ignorePathPatternString, ","); tokenizer.hasMoreTokens();) {
121 final String token = tokenizer.nextToken();
122 final Pattern pattern = Pattern.compile(token);
123 ignorePathPatterns.add(pattern);
124 }
125 }
126 }
127
128
129
130
131 public void destroy() {
132 }
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148 public void doFilter(final ServletRequest req, final ServletResponse res,
149 final FilterChain chain) throws IOException, ServletException {
150
151 final HttpServletRequest request = (HttpServletRequest) req;
152 final HttpServletResponse response = (HttpServletResponse) res;
153
154 if (isIgnore(request)) {
155 chain.doFilter(request, response);
156 } else {
157 response.sendError(statusCode);
158 }
159 }
160
161
162
163
164
165
166
167
168
169 private boolean isIgnore(final HttpServletRequest request) {
170 final String servletPath = request.getServletPath();
171 for (final Pattern ignorePattern : ignorePathPatterns) {
172 final Matcher matcher = ignorePattern.matcher(servletPath);
173 if (matcher.matches()) {
174 return true;
175 }
176 }
177 return false;
178 }
179
180 }