You need to enable JavaScript to run this app. Spring Boot如何配置Controller端点仅在特定生命周期环境可用
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot如何配置Controller端点仅在特定生命周期环境可用

Spring Boot 按环境控制删除接口访问权限实现

已定义的删除接口

当前项目中已经开发完成的两个文章删除接口为:

  • 按id删除单篇文章:DELETE /articles/:id
  • 删除全部文章:DELETE /articles/

访问控制规则

两个删除接口仅在dev开发环境开放调用权限,test测试、staging预发布、production生产环境下必须拦截禁用,不允许执行任何删除操作。

具体实现方式

自定义Web拦截器实现(推荐,对现有代码无侵入)

  • 写自定义类实现Spring的HandlerInterceptor接口,类中注入Spring的Environment实例,用来读取当前项目激活的环境标识
  • 在拦截器的preHandle方法中写判断逻辑:
    • 校验当前请求是不是DELETE方法,且请求路径匹配两个删除接口的规则
    • 校验当前激活的profile不包含dev
  • 两个条件同时满足时,直接返回403权限不足的响应,中断后续的请求流程,不会触发实际的删除业务逻辑
  • 将这个自定义拦截器注册到WebMvcConfigurer的拦截链中,绑定匹配路径为所有/articles下的DELETE请求

这个方案的优势是完全不用改动原有Controller的业务代码,所有拦截逻辑都集中在独立的拦截器类里,后续要调整拦截路径、调整允许访问的环境,只需要改类里的常量配置即可,维护成本极低。

条件化Bean注册实现(改动量稍大)

可以把两个删除接口的代码从原有的Controller中抽离到独立的配置类里,给这个类加上@Profile("dev")注解:

  • 只有当前运行环境是dev时,这个配置类才会被Spring容器加载,对应的两个删除端点才会注册到接口映射中
  • 非dev环境下,容器里根本不存在这两个删除端点,请求过来直接返回404端点不存在的响应,完全不会触发删除逻辑

这种方式的拦截更彻底,但需要调整原有代码结构,适合接口还在开发初期、尚未正式接入的阶段使用。

网关层统一拦截实现

如果项目部署了统一的API网关,直接在网关侧配置路由拦截规则:对所有发往业务服务的/articles/**的DELETE请求,判断当前网关所属的环境标识,非dev环境直接拦截返回403响应。这种方式不需要在业务代码里加任何逻辑,适合多服务共用同一套环境权限规则的场景。

内容的提问来源于stack exchange,提问作者Rpj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.10 08:15:04