1、引入 swagger开发包
增加pom文件配置
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>
<!--解決错误 swagger com/fasterxml/jackson/annotation/JsonInclude$Value -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.7</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.7.0</version>
</dependency>
2、配置swagger
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import springfox.documentation.builders.ApiInfoBuilder;
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
@EnableWebMvc
@ComponentScan(basePackages = "sh.business.web.controller")
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.build()
.apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("****")
.description("*****)
.version("1.0.0")
.termsOfServiceUrl("")
.license("")
.licenseUrl("")
.build();
}
}
3JWT拦截器配置
public class AppInterceptor implements HandlerInterceptor {
private static final Logger logger = Logger.getLogger(AppInterceptor.class);
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
response.setContentType("text/html;charset=UTF-8");
// 请求URL
String url = request.getServletPath().toString();
System.out.println("URL:>>>>>>>>>>>>>>>>" + url);
// 用戶登录
if (url.contains("/user/login")) {
return true;
}
// 用户注册
if (url.contains("/user/register")) {
return true;
}
// 获取token
if (url.contains("/token/gettoken")) {
return true;
}
// swagger
if (url.contains("/swagger-resources")) {
return true;
}
// swagger
if (url.contains("/v2/api-docs")) {
return true;
}
String tokenStr = request.getParameter("token");
if (tokenStr == null || tokenStr.equals("")) {
PrintWriter printWriter = response.getWriter();
printWriter.print(ResponseMgr.noLogin());
printWriter.flush();
printWriter.close();
return false;
}
// 验证JWT的签名,返回CheckResult对象
CheckResult checkResult = TokenMgr.validateJWT(tokenStr);
if (checkResult.isSuccess()) {
Claims claims = checkResult.getClaims();
logger.info("token校检通过checkResult:" + GsonUtil.objectToJsonStr(checkResult));
SubjectModel user = GsonUtil.jsonStrToObject(claims.getSubject(), SubjectModel.class);
logger.info("token校检通过user:" + GsonUtil.objectToJsonStr(user));
return true;
} else {
switch (checkResult.getErrCode()) {
// 签名过期,返回过期提示码
case Constant.JWT_ERRCODE_EXPIRE:
PrintWriter printWriter = response.getWriter();
printWriter.print(ResponseMgr.loginExpire());
printWriter.flush();
printWriter.close();
break;
// 签名验证不通过
case Constant.JWT_ERRCODE_FAIL:
PrintWriter printWriter2 = response.getWriter();
printWriter2.print(ResponseMgr.noAuth());
printWriter2.flush();
printWriter2.close();
break;
default:
break;
}
return false;
}
}
}