类 ShallowEtagHeaderFilter

所有已实现的接口:
cn.taketoday.beans.factory.Aware, cn.taketoday.beans.factory.BeanNameAware, cn.taketoday.beans.factory.DisposableBean, cn.taketoday.beans.factory.InitializingBean, cn.taketoday.context.EnvironmentAware, cn.taketoday.core.env.EnvironmentCapable, ServletContextAware, Filter

public class ShallowEtagHeaderFilter extends OncePerRequestFilter
Filter that generates an ETag value based on the content on the response. This ETag is compared to the If-None-Match header of the request. If these headers are equal, the response content is not sent, but rather a 304 "Not Modified" status instead.

Since the ETag is based on the response content, the response (e.g. a View) is still rendered. As such, this filter only saves bandwidth, not server performance.

State-changing HTTP methods and other HTTP conditional request headers such as If-Match and If-Unmodified-Since are outside the scope of this filter. Please consider using RequestContext.checkNotModified(String, long) instead.

从以下版本开始:
4.0 2022/4/9 12:10
作者:
Arjen Poutsma, Rossen Stoyanchev, Brian Clozel, Juergen Hoeller, Harry Yang
  • 字段详细资料

    • DIRECTIVE_NO_STORE

      private static final String DIRECTIVE_NO_STORE
      另请参阅:
    • STREAMING_ATTRIBUTE

      private static final String STREAMING_ATTRIBUTE
    • writeWeakETag

      private boolean writeWeakETag
  • 构造器详细资料

    • ShallowEtagHeaderFilter

      public ShallowEtagHeaderFilter()
  • 方法详细资料

    • setWriteWeakETag

      public void setWriteWeakETag(boolean writeWeakETag)
      Set whether the ETag value written to the response should be weak, as per RFC 7232.

      Should be configured using an <init-param> for parameter name "writeWeakETag" in the filter definition in web.xml.

      另请参阅:
    • isWriteWeakETag

      public boolean isWriteWeakETag()
      Return whether the ETag value written to the response should be weak, as per RFC 7232.
    • shouldNotFilterAsyncDispatch

      protected boolean shouldNotFilterAsyncDispatch()
      The default value is false so that the filter may delay the generation of an ETag until the last asynchronously dispatched thread.
      覆盖:
      shouldNotFilterAsyncDispatch 在类中 OncePerRequestFilter
    • doFilterInternal

      protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException
      从类复制的说明: OncePerRequestFilter
      Same contract as for doFilter, but guaranteed to be just invoked once per request within a single request thread. See OncePerRequestFilter.shouldNotFilterAsyncDispatch() for details.

      Provides HttpServletRequest and HttpServletResponse arguments instead of the default ServletRequest and ServletResponse ones.

      指定者:
      doFilterInternal 在类中 OncePerRequestFilter
      抛出:
      ServletException
      IOException
    • updateResponse

      private void updateResponse(HttpServletRequest request, HttpServletResponse response) throws IOException
      抛出:
      IOException
    • isEligibleForEtag

      protected boolean isEligibleForEtag(HttpServletRequest request, HttpServletResponse response, int responseStatusCode, InputStream inputStream)
      Whether an ETag should be calculated for the given request and response exchange. By default this is true if all of the following match:
      • Response is not committed.
      • Response status codes is in the 2xx series.
      • Request method is a GET.
      • Response Cache-Control header does not contain "no-store" (or is not present at all).
      参数:
      request - the HTTP request
      response - the HTTP response
      responseStatusCode - the HTTP response status code
      inputStream - the response body
      返回:
      true if eligible for ETag generation, false otherwise
    • generateETagHeaderValue

      protected String generateETagHeaderValue(InputStream inputStream, boolean isWeak) throws IOException
      Generate the ETag header value from the given response body byte array.

      The default implementation generates an MD5 hash.

      参数:
      inputStream - the response body as an InputStream
      isWeak - whether the generated ETag should be weak
      返回:
      the ETag header value
      抛出:
      IOException
      另请参阅:
      • DigestUtils
    • disableContentCaching

      public static void disableContentCaching(ServletRequest request)
      This method can be used to suppress the content caching response wrapper of the ShallowEtagHeaderFilter. The main reason for this is streaming scenarios which are not to be cached and do not need an eTag.

      Note: This method must be called before the response is written to in order for the entire response content to be written without caching.

    • disableContentCaching

      public static void disableContentCaching(RequestContext request)
      This method can be used to suppress the content caching response wrapper of the ShallowEtagHeaderFilter. The main reason for this is streaming scenarios which are not to be cached and do not need an eTag.

      Note: This method must be called before the response is written to in order for the entire response content to be written without caching.

    • isContentCachingDisabled

      private static boolean isContentCachingDisabled(HttpServletRequest request)