背景

对于一些对安全级别要求高的应用,可能只允许有GET和POST请求,其他请求方式需要禁用,那么可以从多个层面来进行禁用。下面从大范围禁用到小范围禁用罗列如下(假定服务容器是tomcat)

从tomcat层面禁用

从tomcat来禁用,表示tomcat中所有运行的应用都禁用这些请求方法
修改apache-tomcat/conf/web.xml,在<session-config></session-config>节点后面新增禁用配置:

<session-config><session-timeout>30</session-timeout>
</session-config>
<security-constraint><web-resource-collection><web-resource-name>BDC</web-resource-name><url-pattern>/*</url-pattern><http-method>PUT</http-method><http-method>DELETE</http-method><http-method>HEAD</http-method><http-method>TRACE</http-method><http-method>OPTIONS</http-method></web-resource-collection><auth-constraint/></security-constraint>

从应用层的web.xml中禁用

  1. 如果项目含web.xml的传统应用,按照从tomcat层禁用方式一样:
<session-config><session-timeout>30</session-timeout>
</session-config>
<security-constraint><web-resource-collection><web-resource-name>BDC</web-resource-name><url-pattern>/*</url-pattern><http-method>PUT</http-method><http-method>DELETE</http-method><http-method>HEAD</http-method><http-method>TRACE</http-method><http-method>OPTIONS</http-method></web-resource-collection><auth-constraint/>
</security-constraint>
  1. 如果是springboot类型的应用,可以通过增加过滤器来实现,参考下面

从应用层来禁用

传统应用,首先创建一个过滤器类,一般情况可以将这种禁用的写到配置文件来管理,方便灵活修改,本次为了演示,直接用静态块初始化。

import org.apache.http.HttpStatus;
import org.apache.log4j.Logger;import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;public class MethodFilter     implements Filter {private static List<String> FORBIDDEN_METHOD=new ArrayList<String>();static {FORBIDDEN_METHOD.add("PUT");FORBIDDEN_METHOD.add("DELETE");FORBIDDEN_METHOD.add("HEAD");FORBIDDEN_METHOD.add("TRACE");FORBIDDEN_METHOD.add("OPTIONS");}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {HttpServletRequest httpRequest = (HttpServletRequest) request;HttpServletResponse httpResponse = (HttpServletResponse) response;String method=httpRequest.getMethod();if(FORBIDDEN_METHOD.contains(method)){((HttpServletResponse) response).setStatus(HttpStatus.SC_FORBIDDEN);return;}chain.doFilter(request, response);}@Overridepublic void init(FilterConfig filterConfig)throws ServletException {}@Overridepublic void destroy() {}}

springboot应用类似,核心逻辑都一样。

通过以上几种方式,可以实现不同粒度的禁用某些HTTP请求方法,在应用层面禁用可以更灵活的根据特定的场景来禁用,在应用的web.xml根据特定的url来禁用,在tomcat或jboss层面可以粗粒度的禁用所有应用

不同层面禁用PUT、DELETE、HEAD、TRACE、OPTIONS请求方式相关推荐

  1. 关于options请求方式

    关于options请求方式 options请求方法的主要用途有两个: 1.获取服务器支持的HTTP请求方法: 2.用来检查服务器的性能.例如:AJAX进行跨域请求时的预检,需要向另外一个域名的资源发送 ...

  2. options请求方式

    OPTIONS请求即预检请求,可用于检测服务器允许的http方法.当发起跨域请求时,由于安全原因,触发一定条件时浏览器会在正式请求之前自动先发起OPTIONS请求,即CORS预检请求,服务器若接受该跨 ...

  3. RESTful Request:GET/PUT/DELETE/POST/HEAD/OPTIONS

    2019独角兽企业重金招聘Python工程师标准>>> RESTful Request:GET/PUT/DELETE/POST/HEAD/OPTIONS 作者: cshao 日期: ...

  4. cURL(wget)—— 测试 RESTful 接口及模拟 GET/POST/PUT/DELETE/OPTIONS 请求

    cURL 是一个简单的 http 命令行工具.与最优秀的 Unix 工具一样,在设计之时,cURL 是个小型程序,功能十分专一,而且是故意为之,仅用于访问 http 服务器.(在 Linux 中,可以 ...

  5. 为什么要发送OPTIONS请求,我可以禁用它吗?

    本文翻译自:Why is an OPTIONS request sent and can I disable it? I am building a web API. 我正在构建一个Web API. ...

  6. 为什么会有OPTIONS请求

    Options 请求,我所了解的就是在发起跨域的非简单请求时,会先发起一个 options 预检请求(浏览器是自动发起的),去检测目标服务器是支持跨域请求. 什么是 Options 请求? 获取服务器 ...

  7. ios 请求头设置token_HTTP中的OPTIONS请求

    前言 http请求之前已经接触了很多,但是这个options请求我还是第一次,刚来到公司的时候进行调试,发现NetWork里,每个请求在发出之前都会先发送一个options请求,第二个才是正常的请求. ...

  8. 什么是options请求?为什么会有options请求?

    关于options请求的一点理解 最近最项目改造,对所有的ajax请求统一做了一点处理,发现原来很正经的ajax请求突然不正常了,每个ajax之前都多了一个相应的method为options的请求.虽 ...

  9. 【HTTP】如何避免OPTIONS请求?

    场景:在调用后端接口的时候会出现两次请求:OPTIONS请求和GET请求.OPTIONS请求耗费了一定的时间,需减少OPTIONS请求. 查找原因是浏览器对简单跨域请求和复杂跨域请求的处理区别. XM ...

最新文章

  1. 容器退出时我丢失了数据
  2. 嵌入式 linux 程序不能运行,嵌入式Linux中在开发板上/usr/bin目录下不能运行自己交叉编译的程序...
  3. Reat学习01——初步接触与安装
  4. HashMap测试程序2
  5. 两个用于Eclipse的TCK –开源到底有什么?
  6. 分治应用--万里挑一 找假硬币
  7. 《JavaScript面向对象精要》——第1章 原始类型和引用类型 1.1 什么是类型
  8. error: unrecognized arguments: 不运行_JavaScript函数 arguments
  9. Python爬虫入门教程 44-100 Charles的安装与使用-手机APP爬虫部分
  10. c语言中保存的文件时怎么换行,关于文件操作,碰到空格就换行
  11. 怎么解除极域课堂的控制
  12. linux rescue 硬盘,深入浅出的了解Linux rescue
  13. 检测mysql字符正确_mysql字符集的测试
  14. 【MySQL】MySQL常用SQL关键字
  15. HEVC编码视频格式
  16. 第一篇,从0开始安装Ubuntu
  17. java long拼接,String类型集合元素分割和拼接,String类型集合转为Long类型集合
  18. CDR插件开发之CPG插件001 - 什么是CPG插件
  19. 基于X5内核的UI自动化
  20. 阿里云文件存储NAS使用教程

热门文章

  1. IMX6UL上添加支持矩阵按键
  2. Web前端期末大作业-响应式艺术培训机构网页设计(bootstrap+HTML+CSS+JavaScript+)实现
  3. 分析根文件系统中的目录结构
  4. 高云FPGA芯片GW2A固化方法
  5. php导出xlsx格式excel
  6. 没想到硬件能做这么多有意思的事情
  7. 安卓手机利用蓝牙调试APP搜索不到HC-05模块连接的问题
  8. 批量导出VSD文件到JPG文件 宏
  9. message函数php,ReplyMessage()函数
  10. .Net Core通过NPOI在CentOS 7(Docker)环境中导出Excel报错The type initializer for ‘Gdip‘ 的问题