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();


}


}

添加多个header

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");



//swagger请求不拦截
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;
}
Buy me a coffee
静听、唯美殇 微信 微信
静听、唯美殇 支付宝 支付宝