Spring Boot集成Swagger2

基於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

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章