1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.struts2.dispatcher.ng.filter;
22
23 import org.apache.struts2.StrutsStatics;
24 import org.apache.struts2.dispatcher.Dispatcher;
25 import org.apache.struts2.dispatcher.ng.PrepareOperations;
26 import org.apache.struts2.dispatcher.ng.InitOperations;
27
28 import javax.servlet.*;
29 import javax.servlet.http.HttpServletRequest;
30 import javax.servlet.http.HttpServletResponse;
31 import java.io.IOException;
32
33 /***
34 * Prepares the request for execution by a later {@link org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter} filter instance.
35 */
36 public class StrutsPrepareFilter implements StrutsStatics, Filter {
37 private PrepareOperations prepare;
38
39 public void init(FilterConfig filterConfig) throws ServletException {
40 InitOperations init = new InitOperations();
41 try {
42 FilterHostConfig config = new FilterHostConfig(filterConfig);
43 init.initLogging(config);
44 Dispatcher dispatcher = init.initDispatcher(config);
45
46 prepare = new PrepareOperations(filterConfig.getServletContext(), dispatcher);
47 } finally {
48 init.cleanup();
49 }
50
51 }
52
53 public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
54
55 HttpServletRequest request = (HttpServletRequest) req;
56 HttpServletResponse response = (HttpServletResponse) res;
57
58 try {
59 prepare.createActionContext(request, response);
60 prepare.assignDispatcherToThread();
61 prepare.setEncodingAndLocale(request, response);
62 request = prepare.wrapRequest(request);
63 prepare.findActionMapping(request, response);
64
65 chain.doFilter(request, response);
66 } finally {
67 prepare.cleanupRequest(request);
68 }
69 }
70
71 public void destroy() {
72 prepare.cleanupDispatcher();
73 }
74 }