1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.cms.filters;
35
36 import java.io.IOException;
37 import javax.servlet.Filter;
38 import javax.servlet.FilterChain;
39 import javax.servlet.FilterConfig;
40 import javax.servlet.ServletContext;
41 import javax.servlet.ServletException;
42 import javax.servlet.ServletRequest;
43 import javax.servlet.ServletResponse;
44 import javax.servlet.http.HttpServletRequest;
45 import javax.servlet.http.HttpServletResponse;
46
47 import org.slf4j.Logger;
48 import org.slf4j.LoggerFactory;
49
50 import info.magnolia.context.MgnlContext;
51 import info.magnolia.objectfactory.Components;
52
53
54
55
56
57
58
59
60
61
62 public class MgnlMainFilter implements Filter {
63
64 private static final Logger log = LoggerFactory.getLogger(MgnlMainFilter.class);
65
66
67
68
69 public static final String SERVER_FILTERS = FilterManager.SERVER_FILTERS;
70
71
72
73
74 private static MgnlMainFilter instance;
75
76 private FilterManager filterManager;
77
78 @Override
79 public void init(FilterConfig filterConfig) throws ServletException {
80 instance = this;
81 filterManager = getFilterManager(filterConfig.getServletContext());
82 filterManager.init(filterConfig);
83 }
84
85 @Override
86 public void destroy() {
87 if (filterManager != null) {
88 filterManager.destroy();
89 }
90 }
91
92 @Override
93 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
94 doFilter((HttpServletRequest) request, (HttpServletResponse) response, chain);
95 }
96
97 public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
98 log.debug("Handling URI: {} - Path info: {}", request.getRequestURI(), request.getPathInfo());
99
100
101 boolean contextUpdated = false;
102 if (MgnlContext.hasInstance()) {
103 MgnlContext.push(request, response);
104 contextUpdated = true;
105 }
106
107 try {
108 filterManager.getFilterDispatcher().doDispatch(request, response, chain);
109 } finally {
110 if (contextUpdated && MgnlContext.hasInstance()) {
111 MgnlContext.pop();
112 }
113 }
114 }
115
116
117
118
119 public MgnlFilter getRootFilter() {
120 return filterManager.getFilterDispatcher().getTargetFilter();
121 }
122
123 protected FilterManager getFilterManager(ServletContext servletContext) {
124 return Components.getComponent(FilterManager.class);
125 }
126
127
128
129
130 public static MgnlMainFilter getInstance() {
131 return instance;
132 }
133
134 }