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.Pattern;
23
24 import javax.servlet.Filter;
25 import javax.servlet.FilterChain;
26 import javax.servlet.FilterConfig;
27 import javax.servlet.RequestDispatcher;
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.routing.InternalForwardInfo;
35 import org.seasar.cubby.routing.Router;
36 import org.seasar.framework.container.SingletonS2Container;
37 import org.seasar.framework.log.Logger;
38 import org.seasar.framework.util.StringUtil;
39
40
41
42
43
44
45
46
47
48
49
50 public class RequestRoutingFilter implements Filter {
51
52
53 private static final Logger logger = Logger
54 .getLogger(RequestRoutingFilter.class);
55
56
57 public static final String IGNORE_PATH_PATTERN = "ignorePathPattern";
58
59
60 private final List<Pattern> ignorePathPatterns = new ArrayList<Pattern>();
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 public void init(final FilterConfig config) throws ServletException {
93 final String ignorePathPatternString = config
94 .getInitParameter(IGNORE_PATH_PATTERN);
95 if (!StringUtil.isEmpty(ignorePathPatternString)) {
96
97 for (final StringTokenizer tokenizer = new StringTokenizer(
98 ignorePathPatternString, ","); tokenizer.hasMoreTokens();) {
99 final String token = tokenizer.nextToken();
100 final Pattern pattern = Pattern.compile(token);
101 ignorePathPatterns.add(pattern);
102 }
103 }
104 }
105
106
107
108
109 public void destroy() {
110 }
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133 public void doFilter(final ServletRequest request,
134 final ServletResponse response, final FilterChain chain)
135 throws IOException, ServletException {
136
137 final Router router = SingletonS2Container.getComponent(Router.class);
138
139 final InternalForwardInfo internalForwardInfo = router.routing(
140 (HttpServletRequest) request, (HttpServletResponse) response,
141 ignorePathPatterns);
142 if (internalForwardInfo != null) {
143 final String internalForwardPath = internalForwardInfo
144 .getInternalForwardPath();
145 if (logger.isDebugEnabled()) {
146 logger.log("DCUB0001", new Object[] { internalForwardPath });
147 }
148 final RequestDispatcher requestDispatcher = request
149 .getRequestDispatcher(internalForwardPath);
150 requestDispatcher.forward(request, response);
151 } else {
152 chain.doFilter(request, response);
153 }
154 }
155
156 }