You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在OpenAPI代码生成阶段为接口添加@PreAuthorize注解?

在OpenAPI Generator Maven插件生成代码时添加@PreAuthorize注解的方案

问题背景

我正在使用openapi-generator-maven-plugin生成代码,插件配置如下:

<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>6.0.1</version>

我需要给特定API方法加上@PreAuthorize注解,试过在实现类的重写方法上添加,但完全不生效——因为接口SomeApi会调用内部重写的getSomeInfo方法,Spring注解根本起不了作用。示例代码如下:

@RestController
@Validated
@Slf4j
@RequiredArgsConstructor
@RequestMapping("/api/v1")
public class SomeController implements SomeApi {

    @Override
    @PreAuthorize("hasRole('ROLE_USER_ADMIN') || hasRole('ROLE_DIGITAL_REP') || hasRole('ROLE_FIELD_REP')")
    public ResponseEntity<SomeDto> getSomeInfo() {
        return ResponseEntity
            .status(HttpStatus.OK)
            .body("some info");
    }
}

想请教:能不能在代码生成阶段直接给API端点加上@PreAuthorize注解?


可行解决方案

针对你使用的6.0.1版本,有几种可靠的实现方式:

1. 用OpenAPI规范扩展字段(最推荐)

直接在你的OpenAPI YAML/JSON定义里,给目标API操作加上x-spring-preauthorize扩展字段,插件生成代码时会自动给对应方法添上@PreAuthorize注解。示例:

paths:
  /api/v1/some-info:
    get:
      summary: 获取某信息
      x-spring-preauthorize: "hasRole('ROLE_USER_ADMIN') || hasRole('ROLE_DIGITAL_REP') || hasRole('ROLE_FIELD_REP')"
      responses:
        '200':
          description: 成功响应
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SomeDto'

这种方式不用改模板,直接通过规范配置实现,完全符合OpenAPI的扩展生态。

2. 自定义代码模板

如果扩展字段满足不了你的需求,可以修改Spring相关的模板文件:

  • 找到插件自带的api.mustache(对应生成的接口类)或apiController.mustache(对应生成的控制器类)模板
  • 在方法定义的位置添加@PreAuthorize注解的逻辑,比如根据你自定义的扩展字段动态注入注解内容
  • 在Maven插件配置里指定自定义模板的目录:
<plugin>
  <groupId>org.openapitools</groupId>
  <artifactId>openapi-generator-maven-plugin</artifactId>
  <version>6.0.1</version>
  <configuration>
    <templateDirectory>${project.basedir}/src/main/resources/openapi-templates</templateDirectory>
    <!-- 其他生成配置 -->
  </configuration>
</plugin>

3. 升级插件版本(可选)

你之前关注的相关讨论问题已经在后续版本中得到完善,升级到7.x及以上版本后,x-spring-preauthorize扩展的支持更稳定,还能支持更多Spring Security相关注解的自动生成。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:15:31