001
014
015 package com.liferay.portal.servlet.filters.weblogic;
016
017 import com.liferay.portal.kernel.servlet.MetaInfoCacheServletResponse;
018 import com.liferay.portal.kernel.servlet.WrapHttpServletResponseFilter;
019 import com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterHelper;
020 import com.liferay.portal.kernel.util.ServerDetector;
021 import com.liferay.portal.servlet.filters.BasePortalFilter;
022
023 import javax.servlet.FilterConfig;
024 import javax.servlet.ServletContext;
025 import javax.servlet.http.HttpServletRequest;
026 import javax.servlet.http.HttpServletResponse;
027 import javax.servlet.http.HttpServletResponseWrapper;
028
029
032 public class WebLogicIncludeFilter
033 extends BasePortalFilter implements WrapHttpServletResponseFilter {
034
035 @Override
036 public HttpServletResponse getWrappedHttpServletResponse(
037 HttpServletRequest request, HttpServletResponse response) {
038
039 if (!ServerDetector.isWebLogic()) {
040 ServletContext servletContext = request.getServletContext();
041
042 InvokerFilterHelper invokerFilterHelper =
043 (InvokerFilterHelper)servletContext.getAttribute(
044 InvokerFilterHelper.class.getName());
045
046 FilterConfig filterConfig = getFilterConfig();
047
048 invokerFilterHelper.unregisterFilter(filterConfig.getFilterName());
049 }
050
051 if (isWrap(response)) {
052 return new WebLogicIncludeServletResponse(response);
053 }
054
055 return response;
056 }
057
058 protected boolean isWrap(HttpServletResponse response) {
059 if (response instanceof WebLogicIncludeServletResponse) {
060 return false;
061 }
062
063 boolean wrap = false;
064
065 HttpServletResponseWrapper previousResponseWrapper = null;
066
067 while (response instanceof HttpServletResponseWrapper) {
068 if (!wrap && (response instanceof MetaInfoCacheServletResponse)) {
069 wrap = true;
070 }
071
072 HttpServletResponseWrapper responseWrapper =
073 (HttpServletResponseWrapper)response;
074
075 response = (HttpServletResponse)responseWrapper.getResponse();
076
077 if (responseWrapper instanceof WebLogicIncludeServletResponse) {
078 previousResponseWrapper.setResponse(response);
079 }
080
081 previousResponseWrapper = responseWrapper;
082 }
083
084 return wrap;
085 }
086
087 }