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.framework.util.StringUtil;
35
36
37
38
39
40
41
42 public class SendErrorFilter implements Filter {
43
44
45 private static final String STATUS_CODE = "statusCode";
46
47
48 private 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 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 (!StringUtil.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 public void doFilter(final ServletRequest req, final ServletResponse res,
135 final FilterChain chain) throws IOException, ServletException {
136
137 final HttpServletRequest request = (HttpServletRequest) req;
138 final HttpServletResponse response = (HttpServletResponse) res;
139
140 if (isIgnore(request)) {
141 chain.doFilter(request, response);
142 } else {
143 response.sendError(statusCode);
144 }
145 }
146
147
148
149
150
151
152
153
154
155 private boolean isIgnore(final HttpServletRequest request) {
156 for (final Pattern ignorePattern : ignorePathPatterns) {
157 final String servletPath = request.getServletPath();
158 final Matcher matcher = ignorePattern.matcher(servletPath);
159 if (matcher.matches()) {
160 return true;
161 }
162 }
163 return false;
164 }
165
166 }