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.unregisterFilterMappings(
049 filterConfig.getFilterName());
050 }
051
052 if (isWrap(response)) {
053 return new WebLogicIncludeServletResponse(response);
054 }
055
056 return response;
057 }
058
059 protected boolean isWrap(HttpServletResponse response) {
060 if (response instanceof WebLogicIncludeServletResponse) {
061 return false;
062 }
063
064 boolean wrap = false;
065
066 HttpServletResponseWrapper previousResponseWrapper = null;
067
068 while (response instanceof HttpServletResponseWrapper) {
069 if (!wrap && (response instanceof MetaInfoCacheServletResponse)) {
070 wrap = true;
071 }
072
073 HttpServletResponseWrapper responseWrapper =
074 (HttpServletResponseWrapper)response;
075
076 response = (HttpServletResponse)responseWrapper.getResponse();
077
078 if (responseWrapper instanceof WebLogicIncludeServletResponse) {
079 previousResponseWrapper.setResponse(response);
080 }
081
082 previousResponseWrapper = responseWrapper;
083 }
084
085 return wrap;
086 }
087
088 }