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

起因:安全组针对接口测试提出的要求,需要关闭不安全的请求方法,例如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

Original: https://www.cnblogs.com/xieshuang/p/10867891.html
Author: 河岸飞流
Title: springboot禁用内置Tomcat的不安全请求方法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/571670/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Macbook中VMWare的Centos7虚拟机配置静态IP并允许上网的配置方法

    一、检查Macbook本身的配置 1、打开【系统偏好设置】-【网络】- 选中【Wi-Fi】项(如果您是WIFI上网请选择此项)- 点右侧【高级】 选择【TCP/IP】选项卡,记录好…

    Java 2023年5月30日
    098
  • CSharp: Iterator Pattern

    csharp;gutter:true; /// /// A simple file handlng class /// Iterator Patterns 迭代器模式 /// 20…

    Java 2023年6月16日
    063
  • java反射与注解

    我们都知道,计算机运行代码,需要经过编译-运行这两个步骤,而反射就是当程序运行状态时,通过类名,就知道这个类有什么属性,有什么方法在里面.简而言之,在 Java 中,只要给定类的名…

    Java 2023年6月8日
    048
  • 手把手教你使用 Java 在线生成 pdf 文档

    一、介绍 在实际的业务开发的时候,研发人员往往会碰到很多这样的一些场景,需要提供相关的电子凭证信息给用户,例如网银/支付宝/微信购物支付的电子发票、订单的库存打印单、各种电子签署合…

    Java 2023年6月9日
    0111
  • 0004期刊在线投稿系统-java毕设

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年5月29日
    058
  • Nacos + Gateway网关搭建微服务

    1、Docker 部署 Nacos 数据库准备 新建 “nacos_config” 数据库 在https://github.com/alibaba/naco…

    Java 2023年6月13日
    070
  • Java面向对象基础

    变量与局部变量的区别: 定义的位置不同 局部变量:定义的位置是在方法内部或者是方法构造中成员变量:成员变量定义在class里面方法外面默认值 局部变量:无默认值成员变量:字面值与数…

    Java 2023年6月5日
    050
  • 深入Java微服务之网关系列1:什么是网关

    ​ 前言 近来,在想着重构一个新的产品。准备采用微服务的技术解决方案,来搭建基础设施框架。网关,是一个必不可少的组件。那么,网关到底是什么? 其又有什么特点或者特性,成为微服务必不…

    Java 2023年5月29日
    086
  • SpringBoot整合MongoDB

    NoSQL(Not Only SQL),即反SQL运动或者是不仅仅SQL,指的是非关系型的数据库,是一项全新的数据库革命运动,是一种全新的思维注入 NoSQL优点 数据库高并发读写…

    Java 2023年6月13日
    079
  • 浏览器地址栏从输入地址到页面展示都发生了什么

    1 URL输入 2 DNS解析 浏览器会首先从缓存中找是否存在域名,如果存在就直接取出对应的ip地址, 其中会请求 第二步,本地系统缓存 如果浏览器缓存没找到,就检查本地操作系统的…

    Java 2023年6月6日
    089
  • Android Jetpack Navigation基本使用

    Android Jetpack Navigation基本使用 本篇主要介绍一下 Android Jetpack 组件 Navigation 导航组件的 基本使用 当看到 Navig…

    Java 2023年6月9日
    096
  • Spring Boot

    Spring Boot 1 Spring Boot入门 1.1 Spring Boot特性: 能够快速创建基于 Spring 的应用程序 能够直接使用 java main 方法启动…

    Java 2023年6月13日
    069
  • Docker安装InfluxDB

    时序型数据库 时序数据库就是存放事件序列数据的数据库,需要支持时序数据的快速写入、持久化、多维度的聚合查询等基本功能。 时间序列数据 时间序列数据是基于时间的一系列数据。在有时间的…

    Java 2023年6月7日
    088
  • 初识jdbc

    jdbc的概念,优势,和模拟jdbc 作用 连接数据库 与图形画界面的差别 功能与Navicat、SQLyog,一样都是用来操作数据库,但是jdbc是用编码来操作数据库,而Navi…

    Java 2023年6月5日
    072
  • Rust特征与泛型区别点

    1. Rust的特征与泛型 use std::boxed::Box; // 定义一个特征 pub trait Animal{ fn bark(&self); } pub s…

    Java 2023年6月15日
    091
  • 设计模式之建造者模式

    在有些情况下,一个对象会有一些重要的性质,在他们没有被赋值之前,对象不能作为一个完整的产品使用。比如,一个电子邮件有发件人地址、收件人地址、主题、内容、附件等,最起码在收件人地址没…

    Java 2023年6月5日
    0107
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球