001
014
015 package com.liferay.portal.servlet.filters.etag;
016
017 import com.liferay.portal.kernel.servlet.BufferCacheServletResponse;
018 import com.liferay.portal.kernel.util.ParamUtil;
019 import com.liferay.portal.servlet.filters.BasePortalFilter;
020
021 import java.nio.ByteBuffer;
022
023 import javax.servlet.FilterChain;
024 import javax.servlet.http.HttpServletRequest;
025 import javax.servlet.http.HttpServletResponse;
026
027
033 public class ETagFilter extends BasePortalFilter {
034
035 @Override
036 public boolean isFilterEnabled(
037 HttpServletRequest request, HttpServletResponse response) {
038
039 if (ParamUtil.getBoolean(request, _ETAG, true)) {
040 return true;
041 }
042 else {
043 return false;
044 }
045 }
046
047 protected boolean isEligibleForEtag(int status) {
048 if ((status >= HttpServletResponse.SC_OK) &&
049 (status < HttpServletResponse.SC_MULTIPLE_CHOICES)) {
050
051 return true;
052 }
053 else {
054 return false;
055 }
056 }
057
058 @Override
059 protected void processFilter(
060 HttpServletRequest request, HttpServletResponse response,
061 FilterChain filterChain)
062 throws Exception {
063
064 BufferCacheServletResponse bufferCacheServletResponse =
065 new BufferCacheServletResponse(response);
066
067 processFilter(
068 ETagFilter.class, request, bufferCacheServletResponse, filterChain);
069
070 ByteBuffer byteBuffer = bufferCacheServletResponse.getByteBuffer();
071
072 if (!isEligibleForEtag(bufferCacheServletResponse.getStatus()) ||
073 !ETagUtil.processETag(request, response, byteBuffer)) {
074
075 bufferCacheServletResponse.finishResponse();
076 bufferCacheServletResponse.outputBuffer();
077 }
078 }
079
080 private static final String _ETAG = "etag";
081
082 }