java - 删除 'Allow' 响应 header

标签 java spring spring-mvc tomcat tomcat7

我有一个使用 Spring-MVC、Spring-Security 开发并托管在 Tomcat 7 上的网络应用程序。作为安全措施,我还在 web.xml 中仅将某些 HTTP 方法列入白名单,如下所示:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>restricted methods</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method-omission>GET</http-method-omission>
        <http-method-omission>POST</http-method-omission>
        <http-method-omission>DELETE</http-method-omission>
    </web-resource-collection>
    <auth-constraint />
</security-constraint>

在这一点上,我期望的是,如果我对任何端点进行了排除的 http 方法调用,那么我将收到 403 响应——并且此设置有效。但是 403 响应还包含一个“允许” header ,如下所示:

Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH
  1. 黑名单 OPTIONS 不是受支持/推荐的东西吗?
  2. 为什么允许的 http 方法列表与我配置的不同?
  3. 我假设 Tomcat 是将 Allow header 添加到响应的那个 - 对吗?
  4. 我如何配置 tomcat(或者 spring,如果它正在添加 header )不将此 header 添加到响应中?

最佳答案

您可以关闭默认值,而是使用白名单,这比黑名单方法更安全:

<headers defaults-disabled="true">
    yourheaders...
</headers>

微调documentation可能有帮助。

更新(完全排除路径):

<http auto-config="true" security="none">
  <intercept-url pattern="/**" method="OPTIONS" />
</http>

关于java - 删除 'Allow' 响应 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33692598/

相关文章:

java - 有效的 Java Item42,至少一个输入参数

java - ActiveMQ 不会重启,因为 KahaDB 被锁定

java - 使用正则表达式捕获数字

spring - CORS 不适用于带有 OAuth2 的 Spring 4.3

java - EJB 中的 Facade 与基于 Spring 的 Web 应用程序中的服务相同吗

java - 使用 Spring 进行 JUnit 测试

java - Spring中的同步事务方法

java - 在保存到数据库之前如何获取生成器 ID?

java - Spring 启动 jetty 错误

spring-boot - 如何从 Spring Boot 应用程序的所有子包中注册 bean?