Spring Boot 3.0如何避免实体类端点被暴露?
解决Spring Boot 3.0升级后实体类CRUD端点暴露问题
问题根源
你碰到的实体类(比如Customer)能通过/customerEntities/7308这类URL直接访问CRUD操作,本质是Spring Data REST自动为实体生成了REST端点——springdoc的配置只控制Swagger文档的显示,根本不影响实际端点是否存在,所以光配置springdoc没用。
解决方案
下面是几种彻底消除这些实体端点的方法,按需选择:
方法1:全局关闭Spring Data REST自动配置
如果项目完全不需要Spring Data REST的自动生成功能,直接在启动类排除对应的自动配置类:
@SpringBootApplication(exclude = {SpringDataRestAutoConfiguration.class, RepositoryRestMvcAutoConfiguration.class}) public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
方法2:禁用单个实体的REST暴露
如果只是不想暴露某几个实体,在对应的实体类上加@RepositoryRestResource(exported = false)注解:
import org.springframework.data.rest.core.annotation.RepositoryRestResource; @Entity @RepositoryRestResource(exported = false) public class Customer { // 你的实体字段和方法 }
方法3:通过配置文件全局禁用
在application.yml里添加配置,直接关闭Spring Data REST的端点生成:
spring: data: rest: enabled: false
或者如果需要更精细控制(比如只暴露标注过特定注解的实体):
spring: data: rest: detection-strategy: annotated
方法4:移除Spring Data REST依赖
如果项目里不需要这个功能,检查pom.xml是否引入了spring-boot-starter-data-rest,直接删掉这个依赖就行:
<!-- 若存在该依赖,删除 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-rest</artifactId> </dependency>
验证
修改配置后重启服务,再访问http://localhost:8093/customerEntities/7308,返回404就说明端点已经被彻底移除了。
内容的提问来源于stack exchange,提问作者Mirlo
相关产品推荐
相关产品推荐

