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.util.ServerDetector;
020 import com.liferay.portal.servlet.filters.BasePortalFilter;
021
022 import javax.servlet.http.HttpServletRequest;
023 import javax.servlet.http.HttpServletResponse;
024 import javax.servlet.http.HttpServletResponseWrapper;
025
026
029 public class WebLogicIncludeFilter
030 extends BasePortalFilter implements WrapHttpServletResponseFilter {
031
032 @Override
033 public HttpServletResponse getWrappedHttpServletResponse(
034 HttpServletRequest request, HttpServletResponse response) {
035
036 if (isWrap(response)) {
037 return new WebLogicIncludeServletResponse(response);
038 }
039
040 return response;
041 }
042
043 @Override
044 public boolean isFilterEnabled() {
045 return ServerDetector.isWebLogic();
046 }
047
048 protected boolean isWrap(HttpServletResponse response) {
049 if (response instanceof WebLogicIncludeServletResponse) {
050 return false;
051 }
052
053 boolean wrap = false;
054
055 HttpServletResponseWrapper previousResponseWrapper = null;
056
057 while (response instanceof HttpServletResponseWrapper) {
058 if (!wrap && (response instanceof MetaInfoCacheServletResponse)) {
059 wrap = true;
060 }
061
062 HttpServletResponseWrapper responseWrapper =
063 (HttpServletResponseWrapper)response;
064
065 response = (HttpServletResponse)responseWrapper.getResponse();
066
067 if (responseWrapper instanceof WebLogicIncludeServletResponse) {
068 previousResponseWrapper.setResponse(response);
069 }
070
071 previousResponseWrapper = responseWrapper;
072 }
073
074 return wrap;
075 }
076
077 }