用于GroupedOpenApi
定义 API 组时,添加到每个端点的通用参数集不存在于参数列表中。下面是各自的代码
@Bean
public GroupedOpenApi v1Apis() {
return GroupedOpenApi.builder().group("v1 APIs")
// hide all v2 APIs
.pathsToExclude("/api/v2/**", "/v2/**")
// show all v1 APIs
.pathsToMatch("/api/v1/**", "/v1/**")
.build();
}
Run Code Online (Sandbox Code Playgroud)
以及将标准标头添加到所有端点的类
@Component
public class GlobalHeaderAdder implements OperationCustomizer {
@Override
public Operation customize(Operation operation, HandlerMethod handlerMethod) {
operation.addParametersItem(new Parameter().$ref("#/components/parameters/ClientID"));
operation.addSecurityItem(new SecurityRequirement().addList("Authorization"));
List<Parameter> parameterList = operation.getParameters();
if (parameterList!=null && !parameterList.isEmpty()) {
Collections.rotate(parameterList, 1);
}
return operation;
}
}
Run Code Online (Sandbox Code Playgroud)
实际产量
预期输出
解决方法
添加要在应用程序属性文件中包含/排除的路径可以解决该错误。但代码级别的一些东西将非常感激。
我在使用@PreAuthorize
注释时遇到了问题.即使我的用户不拥有所请求的角色,我的安全方法也会被执行.
我的控制器:
@Controller
@RequestMapping("/stats/distributions")
public class DistributionStatsController {
@PreAuthorize("hasAnyAuthority('AK_LOCAL_DIST_INT', 'AK_ADMIN')")
@RequestMapping(method = RequestMethod.POST, consumes = "application/json; charset=utf-8",
produces = "application/json; charset=utf-8")
public @ResponseBody List<DistributionStatsResource> filter(@RequestBody DistributionStatsResource resource,
@RequestParam(required = false, value = "documentId") Long documentId,
@RequestParam(required = false, value = "distStatus") EnumDistributionStatus distributionStatus,
Pageable pageable, HttpServletRequest request) {
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的spring安全配置:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
/** Defines the AuthenticationManager/providers. */
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(preAuthenticatedAuthenticationProvider());
}
@Override …
Run Code Online (Sandbox Code Playgroud)