Java tomcat ExpiresFilter不工作

Java tomcat ExpiresFilter不工作,java,tomcat,Java,Tomcat,下面是我的webapp的web.xml中的一个片段 <filter> <filter-name>ExpiresFilter</filter-name> <filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class> <init-param> <param-name>ExpiresByType text/cs

下面是我的webapp的web.xml中的一个片段

<filter>
   <filter-name>ExpiresFilter</filter-name>
   <filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class>
   <init-param>
      <param-name>ExpiresByType text/css</param-name>
      <param-value>access plus 3 months</param-value>
   </init-param>
   <init-param>
      <param-name>ExpiresByType text/html</param-name>
      <param-value>access plus 3 months</param-value>
   </init-param>
   <init-param>
      <param-name>ExpiresByType application/javascript</param-name>
      <param-value>access plus 3 months</param-value>
   </init-param>
</filter>
<filter-mapping>
   <filter-name>ExpiresFilter</filter-name>
   <url-pattern>/css/*</url-pattern>
   <url-pattern>/dist/*</url-pattern>
   <url-pattern>/lib/*</url-pattern>
   <url-pattern>/partials/*</url-pattern>
   <dispatcher>REQUEST</dispatcher>
</filter-mapping>

过期过滤器
org.apache.catalina.filters.ExpiresFilter
ExpiresByType文本/css
访问加上3个月
ExpiresByType文本/html
访问加上3个月
ExpiresByType应用程序/javascript
访问加上3个月
过期过滤器
/css/*
/距离/*
/解放党/*
/分部/*
要求
将logging.properties设置为更精细时

2015年11:51:35 AM org.apache.catalina.filters.ExpiresFilter isEligibleToExpirationHeaderGeneration罚款:请求 响应状态为“200”的“/kuku/dist/js/vendor.js.map” 内容类型“null”,过期标头已定义

我在tomcat的conf目录中搜索

grep-r过期配置

什么也没找到


在哪里可以设置过期标头?

我不知道它是否会有帮助,但实际上有两个条件可以让您获得该日志消息:

  • 如果响应已经有“Expires”头

  • 如果响应具有“缓存控制”标题,该标题指定了“最大年龄”属性

参考:

(我假设我找到了正确的源代码…

更新: 这与安全有某种联系

我有以下用于身份验证的xml片段

删除它时,expires标头设置正确

<security-constraint>
    <web-resource-collection>
        <web-resource-name>All</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>kuku<role-name>
    </auth-constraint>

    <user-data-constraint>
        <!-- transport-guarantee can be CONFIDENTIAL, INTEGRAL, or NONE -->
        <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
</security-constraint>

<login-config>
    <auth-method>BASIC</auth-method>
</login-config>
<security-role>
<role-name>kuku</role-name>
</security-role>

全部的
/*
得到
邮递


但是最好不要使用这种身份验证方案,如Stephen-C所述,
org.apache.catalina.filters.ExpiresFilter
如果已经设置了
Expires
缓存控制:max age
头,则
将无法工作

这个答案是为那些喜欢解决这个问题的人以及那些真正想了解这个问题的人提供一个解决办法

以下是一个解决方法:


公共类MyExpiresFilter扩展了org.apache.catalina.filters.ExpiresFilter{
@凌驾
受保护布尔值isEligibleToExpirationHeaderGeneration(
HttpServletRequest请求,
XHttpServletResponse(响应){
返回true;
}
}
并使用此类更新您的
web.xml
MyExpiresFilter

org.apache.catalina.filters.ExpiresFilter


并确保您的war包含此编译代码或web上下文在类路径中包含此类。

我知道这是一个老问题,但由于我最近一直在努力解决这个问题,下面是一些更多信息:

“问题”出现在
org.apache.catalina.authenticator.AuthenticatorBase
中,它为安全资源设置了
Expires
头(这很有意义)。 参见示例(我只检查了Tomcat 7和8,但这可能无处不在):

如果存在
Expires
标题,则
ExpiresFilter
不会设置标题


在我的例子中,我想更改静态资源的缓存头,所以我求助于meta-HTML标记,更多信息在

中,我尝试朝这个方向前进。有没有一种方法可以从入口点开始获取请求生命周期的日志,并查看链中每个部分的输入和输出?问题在于基本的认证器阀