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 public class SendErrorFilter implements Filter {
42
43
44 public static final String STATUS_CODE = "statusCode";
45
46
47 public static final String IGNORE_PATH_PATTERN = "ignorePathPattern";
48
49
50 private int statusCode = HttpServletResponse.SC_FORBIDDEN;
51
52
53 private final List<Pattern> ignorePathPatterns = new ArrayList<Pattern>();
54
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 public void init(final FilterConfig config) throws ServletException {
108 final String statusCodeString = config.getInitParameter(STATUS_CODE);
109 if (statusCodeString != null) {
110 statusCode = Integer.parseInt(statusCodeString);
111 }
112 final String ignorePathPatternString = config
113 .getInitParameter(IGNORE_PATH_PATTERN);
114 if (!StringUtils.isEmpty(ignorePathPatternString)) {
115
116 for (final StringTokenizer tokenizer = new StringTokenizer(
117 ignorePathPatternString, ","); tokenizer.hasMoreTokens();) {
118 final String token = tokenizer.nextToken();
119 final Pattern pattern = Pattern.compile(token);
120 ignorePathPatterns.add(pattern);
121 }
122 }
123 }
124
125
126
127
128 public void destroy() {
129 }
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145 public void doFilter(final ServletRequest req, final ServletResponse res,
146 final FilterChain chain) throws IOException, ServletException {
147
148 final HttpServletRequest request = (HttpServletRequest) req;
149 final HttpServletResponse response = (HttpServletResponse) res;
150
151 if (isIgnore(request)) {
152 chain.doFilter(request, response);
153 } else {
154 response.sendError(statusCode);
155 }
156 }
157
158
159
160
161
162
163
164
165
166 private boolean isIgnore(final HttpServletRequest request) {
167 final String servletPath = request.getServletPath();
168 for (final Pattern ignorePattern : ignorePathPatterns) {
169 final Matcher matcher = ignorePattern.matcher(servletPath);
170 if (matcher.matches()) {
171 return true;
172 }
173 }
174 return false;
175 }
176
177 }