基于IDEA,JDK1.8
效果展示:
一、导入Maven包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.8.0</version>
</dependency>
网上用的springfox-swagger2是2.8.0,与springfox-swagger-ui版本对应,但是我的会报错,原因不知,于是用了2.9.2版本
二、配置Swagger2
package com.alan.xxx;
import io.swagger.annotations.ApiOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class Swagger2Config {
@Bean
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2)
.groupName("初探Swagger2的组")
.apiInfo(apiInfo())
.select()
// 设置basePackage会将包下的所有类的所有方法作为api
// .apis(RequestHandlerSelectors.basePackage("com.alan.xxx.controller"))
// 只有标记@ApiOperation才会暴露出给swagger
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.paths(PathSelectors.regex("/api/.*"))
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("初探Swagger2")
.description("RESTful风格接口") //描述
.version("1.0")
.build();
}
}
三、添加API
package com.alan.xxx.controller;
import io.swagger.annotations.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@Api(value = "User API接口", tags = "user", description = "User API接口") //接口描述
@RequestMapping("/api") //设置/api开头,与二设置的/api/.*一致
@RestController
public class HelloWorldController {
@ApiOperation(value = "用户登录", notes = "用户登录接口")
@ApiResponses({
@ApiResponse(code = 0, message = "success"),
@ApiResponse(code = 10001, message = "用户名错误", response = IllegalArgumentException.class),
@ApiResponse(code = 10002, message = "密码错误")
})
@PostMapping(value = "/login")
public String login(@ApiParam(name = "username", value = "用户名", required = true)
@RequestParam String username,
@ApiParam(name = "password", value = "密码", required = true) @RequestParam String password)
{
return username + "," + password;
}
@ApiOperation(value = "管理员登录", notes = "管理员登录接口")
@ApiResponses({
@ApiResponse(code = 0, message = "success"),
@ApiResponse(code = 10001, message = "用户名错误", response = IllegalArgumentException.class),
@ApiResponse(code = 10002, message = "密码错误")
})
@PostMapping(value = "/admin-login")
@ApiImplicitParams({@ApiImplicitParam(paramType = "body",name = "username",required = false,value = "用户名"),
@ApiImplicitParam(paramType = "body",name = "password",required = false,value = "密码")})
public String adminLogin(@RequestParam String username,@RequestParam String password)
{
return username + "," + password;
}
}
@ApiImplicitParam 作用于方法上
@ApiParam 作用于参数上
@ApiImplicitParams 包含多个@ApiImplicitParam
四、加密
效果展示:
1.添加Maven包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2.修改配置文件application.properties
#为swagger设置密码
spring.security.basic.path=/swagger-ui.html
spring.security.basic.enabled=true
spring.security.user.name=admin
spring.security.user.password=admin
3.重写 WebSecurityConfigurerAdapter
package com.alan.xxx.sercurity;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
/**
* Spring Security 会拦截swagger-ui.html 同样也会拦截api,这里将或略掉/api/下的所有子路径
*/
@EnableWebSecurity
@Configuration
public class CustomWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
super.configure(web);
web.ignoring().antMatchers("/api/**");
}
}
参考网址:https://blog.csdn.net/vbirdbest/article/details/79680732