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 destroy() {
50 ClassLoader contextClassLoader =
51 Thread.currentThread().getContextClassLoader();
52
53 try {
54 Thread.currentThread().setContextClassLoader(
55 PortalClassLoaderUtil.getClassLoader());
56
57 _filter.destroy();
58 }
59 finally {
60 Thread.currentThread().setContextClassLoader(contextClassLoader);
61 }
62 }
63
64 public void doFilter(
65 ServletRequest servletRequest, ServletResponse servletResponse,
66 FilterChain filterChain)
67 throws IOException, ServletException {
68
69 ClassLoader contextClassLoader =
70 Thread.currentThread().getContextClassLoader();
71
72 try {
73 Thread.currentThread().setContextClassLoader(
74 PortalClassLoaderUtil.getClassLoader());
75
76 _filter.doFilter(servletRequest, servletResponse, filterChain);
77 }
78 finally {
79 Thread.currentThread().setContextClassLoader(contextClassLoader);
80 }
81 }
82
83 public void init(FilterConfig filterConfig) {
84 _filterConfig = filterConfig;
85
86 PortalInitableUtil.init(this);
87 }
88
89 public void portalInit() {
90 try {
91 ClassLoader classLoader = PortalClassLoaderUtil.getClassLoader();
92
93 String filterClass = _filterConfig.getInitParameter("filter-class");
94
95 if (filterClass.startsWith("com.liferay.filters.")) {
96 filterClass = StringUtil.replace(
97 filterClass, "com.liferay.filters.",
98 "com.liferay.portal.servlet.filters.");
99 }
100
101 _filter = (Filter)classLoader.loadClass(filterClass).newInstance();
102
103 _filter.init(_filterConfig);
104 }
105 catch (Exception e) {
106 _log.error(e, e);
107 }
108 }
109
110 private static Log _log =
111 LogFactoryUtil.getLog(PortalClassLoaderFilter.class);
112
113 private Filter _filter;
114 private FilterConfig _filterConfig;
115
116 }