gpt4 book ai didi

spring - 如何在 Spring 端点的 Swagger UI 中显示所需的用户角色(访问控制信息)?

转载 作者:行者123 更新时间:2023-12-02 09:22:01 25 4
gpt4 key购买 nike

我有一个在Spring中制作的rest api,并且正在使用Swagger作为文档。最近实现了基于 token 的身份验证。在 token 中,有(内部)用户的角色(权限)。每个 Controller 都用几个 Swagger 注释和一个 @PreAuthorize(some Roles..) 进行注释,如下所示:

@ApiOperation("Delete user")
@ApiResponses(value = {
@ApiResponse(code = 404, message = "User not found", response = ErrorResponse.class)
})
@PreAuthorize("hasAuthority('ADMIN')")
@DeleteMapping(value = "/{id}")
public ResponseEntity<?> deleteUser(@PathVariable UUID id) {
userService.delete(id);
return ResponseEntity.ok().build();
}

现在,我不知道如何在我的 swagger-ui 中显示这些角色,因此每个端点都有信息,即访问它需要什么用户角色。我浏览了互联网,只找到了一些非常模糊的信息,其中大部分根本与 Spring 无关。

注意:我尝试使用注释: @ApiOperation(value = "Delete user",notes = "Required Roles: ADMIN, USER") 来显示自定义文本,但这似乎不是正确的方法.

最佳答案

这是我从@Unni版本开始的个人版本,我只是玩了一下html标记。

@Component
@Order(SwaggerPluginSupport.SWAGGER_PLUGIN_ORDER + 1)
public class OperationNotesResourcesReader implements OperationBuilderPlugin {
private static final Logger LOG = Logger.getLogger(OperationNotesResourcesReader.class.getName());

private final DescriptionResolver descriptions;

@Autowired
public OperationNotesResourcesReader(DescriptionResolver descriptions) {
this.descriptions = descriptions;
}

@Override
public void apply(OperationContext context) {
try {
StringBuilder sb = new StringBuilder();

// Check authorization
Optional<PreAuthorize> preAuthorizeAnnotation = context.findAnnotation(PreAuthorize.class);
sb.append("<b>Access Privileges & Rules</b>: ");
if (preAuthorizeAnnotation.isPresent()) {
sb.append("<em>" + preAuthorizeAnnotation.get().value() + "</em>");
} else {
sb.append("<em>NOT_FOUND</em>");
}

// Check notes
Optional<ApiOperation> annotation = context.findAnnotation(ApiOperation.class);
if (annotation.isPresent() && StringUtils.hasText(annotation.get().notes())) {
sb.append("<br /><br />");
sb.append(annotation.get().notes());
}

// Add the note text to the Swagger UI
context.operationBuilder().notes(descriptions.resolve(sb.toString()));
} catch (Exception e) {
LOG.log(Level.SEVERE, "Error when creating swagger documentation for security roles: ", e);
}
}

@Override
public boolean supports(DocumentationType delimiter) {
return SwaggerPluginSupport.pluginDoesApply(delimiter);
}
}

这是最终效果图: enter image description here

enter image description here

关于spring - 如何在 Spring 端点的 Swagger UI 中显示所需的用户角色(访问控制信息)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43524355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com