springboot禁用内置Tomcat的不安全请求方法

Easter79
• 阅读 698

起因:安全组针对接口测试提出的要求,需要关闭不安全的请求方法,例如put、delete等方法,防止服务端资源被恶意篡改。
用过springMvc都知道可以使用@PostMapping@GetMapping等这种注解限定单个接口方法类型,或者是在@RequestMapping中指定method属性。这种方式比较麻烦,那么有没有比较通用的方法,通过查阅相关资料,答案是肯定的。

tomcat传统形式通过配置web.xml达到禁止不安全的http方法
    <security-constraint>  
       <web-resource-collection>  
          <url-pattern>/*</url-pattern>  
          <http-method>PUT</http-method>  
          <http-method>DELETE</http-method>  
          <http-method>HEAD</http-method>  
          <http-method>OPTIONS</http-method>  
          <http-method>TRACE</http-method>  
       </web-resource-collection>  
       <auth-constraint>  
       </auth-constraint>  
    </security-constraint>  
    <login-config>  
      <auth-method>BASIC</auth-method>  
    </login-config>
Spring boot使用内置tomcat,2.0版本以前使用如下形式
@Bean  
public EmbeddedServletContainerFactory servletContainer() {  
    TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {// 1  
        protected void postProcessContext(Context context) {  
            SecurityConstraint securityConstraint = new SecurityConstraint();  
            securityConstraint.setUserConstraint("CONFIDENTIAL");  
            SecurityCollection collection = new SecurityCollection();  
            collection.addPattern("/*");  
            collection.addMethod("HEAD");  
            collection.addMethod("PUT");  
            collection.addMethod("DELETE");  
            collection.addMethod("OPTIONS");  
            collection.addMethod("TRACE");  
            collection.addMethod("COPY");  
            collection.addMethod("SEARCH");  
            collection.addMethod("PROPFIND");  
            securityConstraint.addCollection(collection);  
            context.addConstraint(securityConstraint);  
        }  
    };

2.0版本使用以下形式

@Bean
public ConfigurableServletWebServerFactory configurableServletWebServerFactory() {
    TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
    factory.addContextCustomizers(context -> {
        SecurityConstraint securityConstraint = new SecurityConstraint();
        securityConstraint.setUserConstraint("CONFIDENTIAL");
        SecurityCollection collection = new SecurityCollection();
        collection.addPattern("/*");
        collection.addMethod("HEAD");
        collection.addMethod("PUT");
        collection.addMethod("DELETE");
        collection.addMethod("OPTIONS");
        collection.addMethod("TRACE");
        collection.addMethod("COPY");
        collection.addMethod("SEARCH");
        collection.addMethod("PROPFIND");
        securityConstraint.addCollection(collection);
        context.addConstraint(securityConstraint);
    });
    return factory;
}

关于内嵌tomcat的更多配置,感兴趣可以阅读以下官方文档。 参考链接:https://docs.spring.io/spring-boot/docs/2.0.0.RC1/reference/htmlsingle/#howto-configure-tomcat

本文首发于个人公众号:河岸飞流,欢迎订阅 原文链接:https://mp.weixin.qq.com/s/bqUwkqZyHQEkWDR9fqEqJA

点赞
收藏
评论区
推荐文章
CuterCorley CuterCorley
3年前
uni-app入门教程(5)接口的基本使用
前言本文主要介绍uniapp提供的一些基础接口,包括:网络请求接口,用于通过指定的请求方法,携带特定的数据,向特定的地址请求并返回请求结果;图片处理接口,包括选择、预览、获取信息、保存到本地等接口;文件处理接口,包括文件上传和下载接口;数据缓存接口,包括以同步或异步的方式保存、获取或删除数据的接口。一、网络请求小程序要想正常运转,都需要与服务器端进
liam liam
1年前
PUT和POST的区别
PUT和POST是HTTP协议中两种常用的请求方法。它们有些相似之处,但也有一些重要的区别。在本文中,我们将详细介绍PUT和POST的区别。PUT请求PUT请求是HTTP协议中的一种请求方法,通常用于更新或替换服务器上的资源。使用PUT请求时,客户端需要将
Wesley13 Wesley13
3年前
1.利用BeanMap进行对象与Map的相互转换
javabean与map的转换有很多种方式,比如:1、通过ObjectMapper先将bean转换为json,再将json转换为map,但是这种方法比较绕,且效率很低,经测试,循环转换10000个bean,就需要12秒!!!不推荐使用2、通过java反射,获取bean类的属性和值,再转换到map对应的键值对中,这种方法次之,但稍微有点麻烦3、通过
Wesley13 Wesley13
3年前
ES[7.6.x]学习笔记(三)新建索引
与ES的交互方式与es的交互方式采用http的请求方式,请求的格式如下:curlX<VERB'<PROTOCOL://<HOST:<PORT/<PATH?<QUERY_STRING'd'<BODY'<VERB是请求的方法,比如:GET、POST、DELETE、PUT等。
Stella981 Stella981
3年前
HTTP Methods
简介  HTTP定义了一组请求方法,以表明要对给定资源执行的操作。指示针对给定资源要执行的期望动作,虽然他们也可以是名词,但这些请求方法有时被称为HTTP动词。每一个请求方法都实现了不同的语义,但一些共同的特征由一组共享。方法说明GETGET方法请求一个指定资源的表示形式.使用GET的请求应该只被用于获取数据。HEAD
Easter79 Easter79
3年前
SpringMVC学习(二)@Requestmapping映射和Rest风格
1、@RequestMapping1.1、@RequestMapping映射请求注解在SpringMVC中使用@RequestMapping注解可以为控制器指定处理哪些URL请求可以用于类上或者方法上类定义处:提供初步的请求映射信息。相对于WEB应用
Stella981 Stella981
3年前
SpringBoot2 学习10 Controller接收参数的方式
地址传值@PathVariable获取路径参数。即url/{id}这种形式。?传值@RequestParam获取查询参数。即url?name这种形式用注解@RequestParam绑定请求参数到方法入参当请求参数username不存在时会有异常发生,可以通过设置属性requiredfalse解决,例如:@R
Easter79 Easter79
3年前
SpringBoot2 学习10 Controller接收参数的方式
地址传值@PathVariable获取路径参数。即url/{id}这种形式。?传值@RequestParam获取查询参数。即url?name这种形式用注解@RequestParam绑定请求参数到方法入参当请求参数username不存在时会有异常发生,可以通过设置属性requiredfalse解决,例如:@R
Easter79 Easter79
3年前
SpringMvc的传递参数方式
1\.@requestMapping:类级别和方法级别的注解,指明前后台解析的路径。 有value属性(一个参数时默认)指定url路径解析,method属性指定提交方式(默认为get提交) @RequestMapping(value "/testing")public class QuestionSe
融云IM即时通讯 融云IM即时通讯
2星期前
融云IM干货丨 在IM服务中,如何优化接口调用以减少重复数据请求?
在IM服务中,优化API接口调用以减少重复数据请求可以采取以下几种策略:使用幂等设计:幂等性意味着一次或多次调用同一操作所产生的结果是一致的。通过设计幂等接口,可以有效防止由于网络抖动、用户误操作等原因产生的重复请求。具体实现方法包括在接口请求中引入唯一请
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k