简介:Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件。
记录下Spring接入swagger步骤,另外集成加密访问功能:
1:引入相关pom依赖。版本号一定是2.8.0
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.8.0</version>
</dependency>
2:配置SwaggerConfig类:
package com.tfam.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* @Author: leBang
* @Date: 2018/11/29 20:02
* @Description: *
*/
@EnableWebMvc
@EnableSwagger2
@Configuration
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//自定义需要扫描的路径
.apis(RequestHandlerSelectors.basePackage("com.xxx.xx.controller"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("XXXAPI文档-v1.1")
.description("让钱变得更有价值!")
// 将“url”换成自己的ip:port
.termsOfServiceUrl("http://tfam.xxx.com:8080/swagger-ui.html")
.contact(new Contact("leBang", "leBang@xxxx.com", "leBang@xxx.com"))
.version("1.1")
.build();
}
}
3: springMV(dispatcherServlet) 配置swagger资源:
<!-- 拦截器放开相关资源 -->
<mvc:interceptors>
<mvc:exclude-mapping path="/swagger*/**"></mvc:exclude-mapping>
<mvc:exclude-mapping path="/v2/**"></mvc:exclude-mapping>
<mvc:exclude-mapping path="/webjars/**"></mvc:exclude-mapping>
</mvc:interceptor>
<!-- 指定资源路径 -->
<mvc:resources mapping="swagger-ui.html"
location="classpath:/META-INF/resources/"/>
<mvc:resources mapping="/webjars/**"
location="classpath:/META-INF/resources/webjars/"/>
4:配置controller类,这里举例两种访问参数。注意: 在后台采用对象接收参数时,Swagger自带的工具采用的是JSON传参, 测试时需要在参数上加入@RequestBody, 正常运行采用form或URL提交时候请删除。
package com.xxx.tfam.controller.wat;
import com.xxx.tfam.controller.wat.request.EducationRequest;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
/**
* @Author: leBang
* @Date: 2018/11/29 20:05
* @Description: *
*/
@Controller
@RequestMapping("/user/")
@Api(description = "用户信息模块")
public class ATestController {
@RequestMapping(value = "base/info/{userName}", method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "查询用户信息", notes = "用户基础信息")
public Object queryUserInfo(@PathVariable("userName") String userName) {
return "welcome " + userName;
}
@RequestMapping(value = "education/info", method = RequestMethod.POST)
@ResponseBody
@ApiOperation(value = "查询用户信息", notes = "用户学历信息")
public Object queryEducationInfo(@RequestBody EducationRequest educationRequest) {
return "request success! identity:" + educationRequest.getIdentity()+" userCode:"+educationRequest.getUserCode();
}
}
以上操作可以用配置好的:http://tfam.xxxx.com:8080/swagger-ui.html 可以看到主界面(图放最后)
5:集成spring-security,增加pom依赖
<!-- spring security 开始 -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.0.8.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<!-- spring security 结束 -->
6:增加spring-security文件
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security.xsd">
<http>
<intercept-url pattern="/swagger-ui.html" access="ROLE_USER" />
<http-basic/>
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<!-- 登录的用户名和密码 -->
<user name="xxxx" password="123456" authorities="ROLE_USER" />
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
7: web.xml配置拦截spring-security指定请求
配置spring-security拦截器
<!-- filter declaration for Spring Security -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
8:页面登录效果
登录成功: