`

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;
}
分享到:
评论

相关推荐

    springboot-keepalive设置测试

    server.tomcat.accept-count=200 # 请求队列最大长度 server.tomcat.connection-timeout=30000 # 连接超时时间,单位毫秒 server.tomcat.keep-alive-timeout=60000 # keep-alive超时时间,单位毫秒 ``` 在进行...

    Spring Boot部署到Tomcat过程中遇到的问题汇总

    1. **禁用内置Tomcat容器**: Spring Boot默认包含了一个内嵌的Tomcat服务器,这使得开发过程非常方便。然而,当你需要将应用部署到外部Tomcat时,必须告诉Spring Boot不要使用内置的Tomcat。通过在`pom.xml`中将`...

    SpringBoot 38道面试题和答案.docx

    随着Spring项目的发展,其复杂性逐渐增加,SpringBoot应运而生,它内置了许多功能,减少了繁琐的配置和依赖管理,使得开发更加高效。 SpringBoot的优势包括: 1. **减少开发时间**:SpringBoot通过预配置各种组件,...

    SpringBoot 参考指南

    SpringBoot还提供了一些内置的开发工具,例如SpringBoot DevTools。这些工具可以加速开发过程,提供自动重启以及LiveReload等特性。使用DevTools可以实现代码更改后的快速应用重启,减少开发中的等待时间。 为了...

    基于SpringBoot的宠物猫认养系统论文.doc

    - **嵌入式服务器支持**:SpringBoot内置了Tomcat、Jetty等服务器的支持,开发者无需额外配置服务器即可运行应用。 #### 三、Vue框架简介及其优势 Vue.js是一个用于构建用户界面的渐进式框架,其主要特点包括: -...

    使用springboot+mybatis+mysql实现的毕业设计-旅游网站.zip

    毕业设计项目,将ssm技术切换为springboot,使用内置的tomcat即可运行项目。 管理系统 url: http://localhost:8080/managerLoginPage user: admin password: 123 用户门户网站 url: http://localhost:8080/user ...

    SpringBoot 35道面试题和答案.docx

    随着Spring框架的发展,其复杂性逐渐增加,SpringBoot应运而生,它通过自动化配置和内置服务器等功能,减少了开发者在创建新项目时的繁琐工作。 SpringBoot的主要优点包括: 1. **开发效率提升**:通过预设配置,...

    SpringBoot面试题(2020最新版)-重点.pdf

    Actuator 的安全性可以通过设置management.security.enabled 属性来禁用或启用。 对于第三方项目的整合,如 WebSockets 提供实时通信,Spring Data 支持多种数据库操作,Spring Batch 处理批量数据,FreeMarker 是...

    基于SpringBoot家政服务管理系统.docx

    - **SpringBoot框架**:利用SpringBoot可以快速搭建Web应用,它内置了Tomcat等容器,简化了配置过程,支持自动配置等功能,大大提高了开发效率。 - **MyBatis**:一个支持普通SQL查询、存储过程及高级映射的优秀持久...

    springbootssm

    此外,SpringBoot内置了Tomcat服务器,使得开发和部署更为便捷。 - **starter-poms**:SpringBoot的依赖管理基于“Starter POMs”,如`spring-boot-starter-web`用于Web开发,`spring-boot-starter-data-jpa`用于...

    switchBuiltInServers.rar

    Spring Boot的设计理念是"约定优于配置",它默认使用内建的Web服务器,但有时根据项目需求,我们可能需要切换到不同的内置服务器或者完全禁用内置服务器,转而使用外部服务器。下面我们将详细探讨如何进行Spring ...

    Spring Boot面试专题.pdf

    4. **内置服务器**:Spring Boot 内置了 Tomcat 等服务器,无需额外安装,可以直接运行应用。 5. **环境感知配置**:通过 `spring.profiles.active` 属性,可以轻松切换不同环境下的配置,如开发、测试和生产环境。 ...

    基于springboot的编程训练系统源码数据库.doc

    该框架内置了Tomcat、Jetty或Undertow作为嵌入式容器,支持自动配置,简化了开发过程。 ##### 5.2 MySQL数据库 MySQL是一款开源关系型数据库管理系统,以其高性能、稳定性和安全性著称。在本系统中,MySQL被用来...

    miaosha:SpringBoot打造电商基础秒杀项目

    通过内置Tomcat、自动配置、起步依赖等功能,SpringBoot极大地提高了开发效率,使得开发者可以专注于业务逻辑的实现,而无需关心底层基础设施的配置。 二、秒杀系统架构设计 1. 前端:利用JavaScript进行页面交互,...

    SpringBoot学习笔记完整教程

    15. **集成 Servlet**:Spring Boot 内置了 Tomcat 或 Jetty 服务器,可以直接注册 Servlet、Filter 和 Listener。学习如何编写和配置 Servlet,以及如何处理 HTTP 请求。 16. **集成 Filter 和 Listener**:Filter...

    springboot230基于Spring Boot在线远程考试系统的设计与实现.rar

    1. 技术栈选择:项目采用Spring Boot作为主要开发框架,利用其内置的Tomcat服务器和自动配置功能,简化了传统Spring应用的初始化过程。同时,结合Spring MVC处理HTTP请求,以及Spring Data JPA进行数据库操作,大大...

    基于springboot的服装销售平台源码数据库.doc

    - 嵌入式服务器:Spring Boot提供了一种简单的方式来集成如Tomcat、Jetty等嵌入式Servlet容器,无需单独部署WAR文件。 - 开箱即用:Spring Boot自带了很多默认配置,开发者可以直接使用这些配置,减少重复性工作。...

    毕设新项目-基于pringboot实现的旅游网站源码+sql数据库+项目部署说明.zip

    将ssm技术切换为springboot,使用内置的tomcat即可运行项目。 管理系统 - url: http://localhost:8080/managerLoginPage - user: admin password: 123 用户门户网站 - url: http://localhost:8080/user - user: ...

    Spring boot 中文.pdf

    - **嵌入式 servlet 容器支持**:Spring Boot 内置了对 Tomcat、Jetty 和 Undertow 等容器的支持。 - **Security**: - **OAuth2**:Spring Boot 支持 OAuth2 协议,可用于构建安全的应用程序。 - **UserInfo 中...

Global site tag (gtag.js) - Google Analytics