spring-openapi-ui使用
swagger似乎已经不再维护了,不推荐再使用了
1 2 3 4 5 6 7
| <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency>
|
可以替换为
1 2 3 4 5
| <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-ui</artifactId> <version>latest-version</version> </dependency>
|
文档在这里
https://springdoc.org/#migrating-from-springfox
https://blog.csdn.net/m0_47333020/article/details/109776819
添加全局token
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| @Configuration @OpenAPIDefinition( info = @Info( title = "Swagger3", version = "1.0", description = "Swagger3使用演示", contact = @Contact(name = "TOM") ), security = @SecurityRequirement(name = "token"), externalDocs = @ExternalDocumentation(description = "参考文档", url = "https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Annotations" ) ) @SecurityScheme(type = SecuritySchemeType.APIKEY, name = "token", in = SecuritySchemeIn.HEADER)
public class SwaggerConfig { @Bean public GroupedOpenApi docker() { return GroupedOpenApi.builder() .packagesToScan("com.example.springtransfer.controller") .group("api") .pathsToMatch("/**").build();
}
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| @Configuration @OpenAPIDefinition( info = @Info( title = "Swagger3", version = "1.0", description = "Swagger3使用演示", contact = @Contact(name = "TOM") ), security ={ @SecurityRequirement(name = "usersOrigin"), @SecurityRequirement(name = "Authorization")}, externalDocs = @ExternalDocumentation(description = "参考文档", url = "https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Annotations" ) )
@SecuritySchemes({@SecurityScheme(type = SecuritySchemeType.APIKEY, name = "Authorization", in = SecuritySchemeIn.HEADER), @SecurityScheme(type = SecuritySchemeType.APIKEY, name = "usersOrigin", in = SecuritySchemeIn.HEADER)}) public class SwaggerConfig { @Bean public GroupedOpenApi docker() { return GroupedOpenApi.builder() .packagesToScan("com.example.springtransfer.controller") .group("api") .pathsToMatch("/**").build();
}
}
|
添加参数注解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| @Tag(name = "操作接口", description = "操作描述") @RestController @RequestMapping("hs") public class HsApi {
@Resource private HsService hsService;
@Resource private HsTypeService hsTypeService;
@Operation(summary = "添加", description = "添加描述") @Parameters({ @Parameter(name = "name", description = "名字", required = true), @Parameter(name = "typeId", description = "类型ID", required = true) }) @PutMapping("add") public JSONObject add(String name, Long typeId) { HsType hsType = hsTypeService.findById(typeId); Hs hs = new Hs(); hs.setName(name); hs.setType(hsType); hs.setDateCreated(new Date()); hs = hsService.save(hs); return JSONObject.parseObject(JSONObject.toJSONString(hs)); }
@Operation(summary = "获取") @GetMapping("get") public JSONObject get(@Parameter(name = "id", description = "数据ID") Long id) { Hs hs = hsService.findById(id); return JSONObject.parseObject(JSONObject.toJSONString(hs)); } }
|
spring-security和shiro屏蔽了swagger-ui的api
对于spring-security
1 2 3 4 5 6 7 8 9 10
| @Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers("/css/**", "/js/**", "/index.html", "/img/**", "/fonts/**", "/favicon.ico", "/verifyCode","/swagger-ui/*","/v2/api-docs/**","/v3/api-docs/**", "/swagger-resources", "/swagger-resources/**", "/configuration/ui", "/configuration/security", "/swagger-ui.html/**", "/webjars/**" ); }
|
对于shiro
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| @Bean("shiroFilter") public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) { if (UtilValidate.isEmpty(loginpage)) loginpage = "login.html"; ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean(); shiroFilter.setSecurityManager(securityManager); shiroFilter.setLoginUrl("/" + loginpage); shiroFilter.setUnauthorizedUrl("/");
Map<String, String> filterMap = new LinkedHashMap<>();
filterMap.put("/pobstyle.css", "anon"); filterMap.put("/webjars/**", "anon"); filterMap.put("/statics/**", "anon"); filterMap.put("/" + loginpage, "anon"); filterMap.put("/sys/login", "anon"); filterMap.put("/favicon.ico", "anon"); filterMap.put("/captcha.jpg", "anon");
filterMap.put("/swagger/**", "anon"); filterMap.put("/v3/api-docs", "anon"); filterMap.put("/swagger-ui.html", "anon"); filterMap.put("/swagger-resources/**", "anon"); shiroFilter.setFilterChainDefinitionMap(filterMap);
filterMap.put("/**", "authc"); shiroFilter.setFilterChainDefinitionMap(filterMap); return shiroFilter; }
|
springboot shiro swagger的项目,shiro已经对swagger的资源放行了,但是只要有@RequiresPermissions注解的controller,swagger就读取不到
需要设置aop
1 2 3 4 5 6 7 8
| @Bean public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() { DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator(); defaultAdvisorAutoProxyCreator.setUsePrefix(true); return defaultAdvisorAutoProxyCreator; }
|