1
22
23 package com.liferay.portal.kernel.servlet;
24
25 import com.liferay.portal.kernel.log.Log;
26 import com.liferay.portal.kernel.log.LogFactoryUtil;
27 import com.liferay.portal.kernel.util.PortalClassLoaderUtil;
28 import com.liferay.portal.kernel.util.PortalInitable;
29 import com.liferay.portal.kernel.util.PortalInitableUtil;
30 import com.liferay.portal.kernel.util.StringUtil;
31
32 import java.io.IOException;
33
34 import javax.servlet.Filter;
35 import javax.servlet.FilterChain;
36 import javax.servlet.FilterConfig;
37 import javax.servlet.ServletException;
38 import javax.servlet.ServletRequest;
39 import javax.servlet.ServletResponse;
40
41
47 public class PortalClassLoaderFilter implements Filter, PortalInitable {
48
49 public void portalInit() {
50 try {
51 ClassLoader classLoader = PortalClassLoaderUtil.getClassLoader();
52
53 String filterClass = _config.getInitParameter("filter-class");
54
55 if (filterClass.startsWith("com.liferay.filters.")) {
56 filterClass = StringUtil.replace(
57 filterClass, "com.liferay.filters.",
58 "com.liferay.portal.servlet.filters.");
59 }
60
61 _filter = (Filter)classLoader.loadClass(filterClass).newInstance();
62
63 _filter.init(_config);
64 }
65 catch (Exception e) {
66 _log.error(e, e);
67 }
68 }
69
70 public void init(FilterConfig config) throws ServletException {
71 _config = config;
72
73 PortalInitableUtil.init(this);
74 }
75
76 public void doFilter(
77 ServletRequest req, ServletResponse res, FilterChain chain)
78 throws IOException, ServletException {
79
80 ClassLoader contextClassLoader =
81 Thread.currentThread().getContextClassLoader();
82
83 try {
84 Thread.currentThread().setContextClassLoader(
85 PortalClassLoaderUtil.getClassLoader());
86
87 _filter.doFilter(req, res, chain);
88 }
89 finally {
90 Thread.currentThread().setContextClassLoader(contextClassLoader);
91 }
92 }
93
94 public void destroy() {
95 ClassLoader contextClassLoader =
96 Thread.currentThread().getContextClassLoader();
97
98 try {
99 Thread.currentThread().setContextClassLoader(
100 PortalClassLoaderUtil.getClassLoader());
101
102 _filter.destroy();
103 }
104 finally {
105 Thread.currentThread().setContextClassLoader(contextClassLoader);
106 }
107 }
108
109 private static Log _log =
110 LogFactoryUtil.getLog(PortalClassLoaderFilter.class);
111
112 private Filter _filter;
113 private FilterConfig _config;
114
115 }