swagger+springboot配置
Swagger 是一个流行的API开发工具,它提供了一套强大的文档化和测试框架,使得开发者能够轻松地构建RESTful API。在Spring Boot项目中集成Swagger,可以方便地生成API接口的文档,同时支持在线测试,极大地提高了开发效率和协作能力。本文将详细介绍如何在Spring Boot应用中配置Swagger,并实现RESTful身份验证的Token功能。 让我们了解Swagger的核心组件:Springfox-Swagger2和Springfox-Swagger-UI。Springfox-Swagger2是用于生成API文档的库,它扫描你的Spring MVC或Spring WebFlux控制器,收集相关信息来构建OpenAPI规范。而Springfox-Swagger-UI则是一个Web界面,它基于生成的规范展示API文档,并允许用户进行交互式的API测试。 要开始配置Swagger,首先需要在你的Spring Boot项目中添加依赖。在`pom.xml`文件中,引入以下依赖: ```xml <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency> ``` 接下来,你需要创建一个配置类来初始化Swagger。创建一个名为`SwaggerConfig`的类,并添加`@Configuration`和`@EnableSwagger2WebMvc`注解: ```java import io.springfox.config.Swagger2DocumentationConfigurer; import io.springfox.documentation.builders.PathSelectors; import io.springfox.documentation.builders.RequestHandlerSelectors; import io.springfox.documentation.service.ApiInfo; import io.springfox.documentation.spi.DocumentationType; import io.springfox.plugins.docket.Docket; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration @EnableSwagger2WebMvc public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) .build() .apiInfo(apiInfo()); } private ApiInfo apiInfo() { return new ApiInfo( "Swagger Spring Boot API", "这是一个使用Swagger和Spring Boot配置的API示例", "1.0", "urn:tos", new Contact("你的名字", "http://你的网站.com", "你的邮箱"), "Apache 2.0", "http://www.apache.org/licenses/LICENSE-2.0.html"); } } ``` 现在,Swagger已经可以生成基本的API文档了。但是,我们还需要处理RESTful身份验证的Token。这通常涉及到JWT(JSON Web Tokens)或OAuth2。假设我们使用JWT,我们可以添加一个过滤器来解析和验证请求中的JWT Token。 创建一个名为`JwtTokenFilter`的过滤器类,它会检查每个请求的`Authorization`头,并验证其中的JWT Token: ```java import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.filter.OncePerRequestFilter; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; public class JwtTokenFilter extends OncePerRequestFilter { // 添加JWT验证逻辑 @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { // 检查并验证Token } } ``` 为了使Swagger能够正确显示具有认证信息的API,我们需要添加`@SecurityContext`注解到每个需要身份验证的方法上。例如: ```java @GetMapping("/protected") @ApiOperation(value = "保护的API", notes = "需要身份验证才能访问") @ApiResponses(value = { @ApiResponse(code = 200, message = "成功"), @ApiResponse(code = 401, message = "未授权") }) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "JWT Token", required = true, dataType = "string", paramType = "header") }) @PreAuthorize("hasRole('USER')") public ResponseEntity<String> protectedApi() { // 处理业务逻辑 } ``` 通过这种方式,Swagger不仅会生成API文档,还会展示需要认证的信息。用户在Swagger-UI中测试这些API时,需要在`Authorization`字段输入Bearer Token。 总结一下,Swagger与Spring Boot的结合使得API的文档化和测试变得简单。通过配置Swagger和添加JWT身份验证,我们可以在安全地保护API的同时,提供清晰的文档和便捷的测试环境。这有助于提升开发效率,也有利于团队间的沟通和合作。在实际项目中,还可以根据需求进一步定制Swagger的配置,如添加自定义模型、分组API等。