背景

对于一些对安全级别要求高的应用,可能只允许有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. 深度解析 Lucene 轻量级全文索引实现原理
  2. 聊聊大麦网UWP版的首页顶部图片联动效果的实现方法
  3. atomic底层实现是基于无锁算法cas
  4. 利用耦合隐马尔可夫模型改进交易策略
  5. 用Unity实现传送门效果(一)
  6. python怎么改字体_python,tkinter_Tkinter Label 如何改变Label中的文字样式,例如给文字加删除线,python,tkinter - phpStudy...
  7. 通过反汇编来理解restrict关键字
  8. java hessian rmi_RMI,socket,rpc,hessian,http比较
  9. Mac精品软件分享第一期
  10. 【Python】CentOs7 Python3安装Openssl以及解决ssl问题
  11. dspic c语言教程,轻松学PIC之数码管篇 PIC单片机学习系列教程
  12. Java多线程系列--【JUC锁05】-非公平锁
  13. 2021年全球网络保险收入大约9593.9百万美元,预计2028年达到68230百万美元,2022至2028期间,年复合增长率CAGR为35.1%
  14. java自行车(java自行车)
  15. layui 勾选不联动父项 树形控件_layui树形组件重现勾选过程的办法
  16. 数据库系统学习笔记(3)
  17. 人工智能方面会议评分与简介(转)
  18. 二极管结电容和反向恢复时间都是怎么来的
  19. 合成大西瓜小游戏微信小程序源码
  20. python基础-print输出函数

热门文章

  1. 宏碁E5-471G加固态硬盘、内存条避坑指南
  2. 动态规划总结(01背包 完全背包 多重背包)
  3. raspberry pi Pico使用MicroPython变砖后的解决方法
  4. (Agora声网)多人视频聊天应用的开发(一)快速集成
  5. 八点钟学院软件测试,急求普通话测试题,如果哪位同学有请转发好吗?
  6. 基于AWS 平台跳板机配置
  7. Vue中 前端实现生成 PDF 并下载
  8. FreeSWITCH 显示号码
  9. mtk RF配置步骤三
  10. 【重要】安卓微信闪退,非清空数据法解决,不破坏聊天记录【完善中】