From d9fd9d64c3c038e9a788c9500dd999f46479ce50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AD=A6?= <吴æ武慧娟> Date: Mon, 9 Dec 2019 16:21:21 +0800 Subject: [PATCH] login swagger-ui --- .../ccsens/cloudutil/config/FeignConfig.java | 55 +++++++++ .../cloudutil/feign/TallFeignClient.java | 13 ++ .../com/ccsens/ht/annotation/MustLogin.java | 16 +++ .../com/ccsens/ht/api/DoctorController.java | 4 + .../com/ccsens/ht/api/PatientController.java | 7 +- .../ht/api/PatientReportController.java | 6 + .../com/ccsens/ht/api/PositionController.java | 4 + .../com/ccsens/ht/api/QuestionController.java | 4 + .../ccsens/ht/aspect/DoctorAuditAspect.java | 2 + .../com/ccsens/ht/aspect/MustLoginAspect.java | 80 +++++++++++++ .../java/com/ccsens/ht/bean/dto/QueryDto.java | 4 +- .../ccsens/ht/config/SwaggerConfigure.java | 56 +++++++++ ht/src/main/resources/application-test.yml | 2 +- ht/src/main/resources/application.yml | 4 +- .../ccsens/tall/config/SwaggerConfigure.java | 56 +++++++++ .../com/ccsens/tall/web/UserController.java | 3 +- util/pom.xml | 6 + .../main/java/com/ccsens/util/CodeEnum.java | 73 ++++++------ .../ccsens/util/config/SwaggerConfigure.java | 112 +++++++++--------- 19 files changed, 409 insertions(+), 98 deletions(-) create mode 100644 cloudutil/src/main/java/com/ccsens/cloudutil/config/FeignConfig.java create mode 100644 ht/src/main/java/com/ccsens/ht/annotation/MustLogin.java create mode 100644 ht/src/main/java/com/ccsens/ht/aspect/MustLoginAspect.java create mode 100644 ht/src/main/java/com/ccsens/ht/config/SwaggerConfigure.java create mode 100644 tall/src/main/java/com/ccsens/tall/config/SwaggerConfigure.java diff --git a/cloudutil/src/main/java/com/ccsens/cloudutil/config/FeignConfig.java b/cloudutil/src/main/java/com/ccsens/cloudutil/config/FeignConfig.java new file mode 100644 index 00000000..0ac387fc --- /dev/null +++ b/cloudutil/src/main/java/com/ccsens/cloudutil/config/FeignConfig.java @@ -0,0 +1,55 @@ +//package com.ccsens.cloudutil.config; +// +//import com.fasterxml.jackson.databind.DeserializationFeature; +//import com.fasterxml.jackson.databind.ObjectMapper; +//import com.fasterxml.jackson.databind.module.SimpleModule; +//import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +//import feign.codec.Decoder; +//import feign.codec.Encoder; +//import feign.form.spring.SpringFormEncoder; +//import org.springframework.beans.factory.ObjectFactory; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.boot.autoconfigure.http.HttpMessageConverters; +//import org.springframework.cloud.openfeign.support.ResponseEntityDecoder; +//import org.springframework.cloud.openfeign.support.SpringDecoder; +//import org.springframework.cloud.openfeign.support.SpringEncoder; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +//import org.springframework.http.MediaType; +//import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +// +//import java.util.ArrayList; +//import java.util.List; +// +///** +// * @description: +// * @author: wuHuiJuan +// * @create: 2019/12/09 15:27 +// */ +//@Configuration +//public class FeignConfig { +// +// @Autowired +// private ObjectFactory messageConverters; +// +// @Bean +// public Encoder feignFormEncoder() { +// return new SpringFormEncoder(new SpringEncoder(messageConverters)); +// } +// +// @Bean +// public Decoder feignDecoder() { +// return new ResponseEntityDecoder(new SpringDecoder(() -> { +// MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); +// List mediaTypeList = new ArrayList<>(); +// mediaTypeList.add(MediaType.TEXT_HTML); +// mediaTypeList.add(MediaType.APPLICATION_JSON_UTF8); +// converter.setSupportedMediaTypes(mediaTypeList); +// +// ObjectMapper objectMapper = new ObjectMapper(); +// objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); +// converter.setObjectMapper(objectMapper); return new HttpMessageConverters(converter); +// })); +// } +// +//} diff --git a/cloudutil/src/main/java/com/ccsens/cloudutil/feign/TallFeignClient.java b/cloudutil/src/main/java/com/ccsens/cloudutil/feign/TallFeignClient.java index 00e0dcd3..74190fc9 100644 --- a/cloudutil/src/main/java/com/ccsens/cloudutil/feign/TallFeignClient.java +++ b/cloudutil/src/main/java/com/ccsens/cloudutil/feign/TallFeignClient.java @@ -56,6 +56,14 @@ public interface TallFeignClient { @RequestMapping("deleteRoles") JsonResponse deleteRoles(MemberRoleDto.Delete deleteDto); + /** + * 根据token获取userId + * @param token + * @return + */ + @GetMapping("users/token") + JsonResponse getUserIdByToken(@RequestParam(required = true, name = "token") String token); + } @@ -89,6 +97,11 @@ class TallFeignClientFallBack implements FallbackFactory { public JsonResponse deleteRoles(MemberRoleDto.Delete deleteDto) { return JsonResponse.newInstance().fail(); } + + @Override + public JsonResponse getUserIdByToken(String token) { + return JsonResponse.newInstance().fail(); + } }; } diff --git a/ht/src/main/java/com/ccsens/ht/annotation/MustLogin.java b/ht/src/main/java/com/ccsens/ht/annotation/MustLogin.java new file mode 100644 index 00000000..d4d6230d --- /dev/null +++ b/ht/src/main/java/com/ccsens/ht/annotation/MustLogin.java @@ -0,0 +1,16 @@ +package com.ccsens.ht.annotation; + +import java.lang.annotation.*; + +/** + * @description: 用于标识方法需要登录,获取userId + * 如果未登录,直接返回用户未登录 + * @author: wuHuiJuan + * @create: 2019/12/09 09:48 + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface MustLogin { + +} diff --git a/ht/src/main/java/com/ccsens/ht/api/DoctorController.java b/ht/src/main/java/com/ccsens/ht/api/DoctorController.java index ce3fb59c..ca04f7a7 100644 --- a/ht/src/main/java/com/ccsens/ht/api/DoctorController.java +++ b/ht/src/main/java/com/ccsens/ht/api/DoctorController.java @@ -1,6 +1,7 @@ package com.ccsens.ht.api; +import com.ccsens.ht.annotation.MustLogin; import com.ccsens.ht.annotation.DoctorAudit; import com.ccsens.ht.bean.dto.DoctorDto; import com.ccsens.ht.bean.dto.QueryDto; @@ -32,6 +33,7 @@ public class DoctorController { @Autowired private IDoctorService doctorService; + @MustLogin @ApiOperation(value = "资格认证",notes = "医生提交基本信息进行资格认证") @ApiImplicitParams({ @ApiImplicitParam(name = "json", value = "医生基本信息", required = true) @@ -44,6 +46,7 @@ public class DoctorController { } + @MustLogin @DoctorAudit @ApiOperation(value = "资格认证列表",notes = "医生资格认证列表") @ApiImplicitParams({ @@ -56,6 +59,7 @@ public class DoctorController { return JsonResponse.newInstance().ok(CodeEnum.SUCCESS, dtos); } + @MustLogin @DoctorAudit @ApiOperation(value = "资格审核",notes = "医生资格审核 通过/拒绝") @ApiImplicitParams({ diff --git a/ht/src/main/java/com/ccsens/ht/api/PatientController.java b/ht/src/main/java/com/ccsens/ht/api/PatientController.java index c9d3abcb..98b6f3b8 100644 --- a/ht/src/main/java/com/ccsens/ht/api/PatientController.java +++ b/ht/src/main/java/com/ccsens/ht/api/PatientController.java @@ -2,6 +2,7 @@ package com.ccsens.ht.api; import cn.hutool.core.util.IdcardUtil; import com.ccsens.ht.annotation.DoctorAudit; +import com.ccsens.ht.annotation.MustLogin; import com.ccsens.ht.bean.dto.PatientDto; import com.ccsens.ht.bean.dto.QueryDto; import com.ccsens.ht.bean.po.HtPatient; @@ -43,6 +44,7 @@ public class PatientController { *@Author: wuhuijuan *@date: 2019/10/29 9:24 */ + @MustLogin @DoctorAudit @ApiOperation(value = "基础信息查询",notes = "病友基础信息查询") @ApiImplicitParams({ @@ -66,6 +68,7 @@ public class PatientController { *@Author: wuhuijuan *@date: 2019/10/30 9:27 */ + @MustLogin @DoctorAudit @ApiOperation(value = "基础信息编辑",notes = "病友基础信息编辑") @ApiImplicitParams({ @@ -103,7 +106,7 @@ public class PatientController { return JsonResponse.newInstance().ok(idModel); } - + @MustLogin @DoctorAudit @ApiOperation(value = "病友其他信息查询",notes = "病友其他信息查询") @ApiImplicitParams({ @@ -115,6 +118,8 @@ public class PatientController { List list = patientService.queryPatientOtherMsg(params.getParam(), params.getUserId()); return JsonResponse.newInstance().ok(list); } + + @MustLogin @DoctorAudit @ApiOperation(value = "编辑其他病友信息",notes = "编辑其他病友信息") @ApiImplicitParams({ diff --git a/ht/src/main/java/com/ccsens/ht/api/PatientReportController.java b/ht/src/main/java/com/ccsens/ht/api/PatientReportController.java index fb5607b8..f8cf27a7 100644 --- a/ht/src/main/java/com/ccsens/ht/api/PatientReportController.java +++ b/ht/src/main/java/com/ccsens/ht/api/PatientReportController.java @@ -2,6 +2,7 @@ package com.ccsens.ht.api; import com.ccsens.ht.annotation.DoctorAudit; +import com.ccsens.ht.annotation.MustLogin; import com.ccsens.ht.bean.dto.PatientReportDto; import com.ccsens.ht.bean.dto.QueryDto; import com.ccsens.ht.bean.vo.PatientReportVo; @@ -32,6 +33,7 @@ public class PatientReportController { @Autowired private IPatientReportService patientReportService; + @MustLogin @DoctorAudit @ApiOperation(value = "生成报告单",notes = "生成报告单") @ApiImplicitParams({ @@ -49,6 +51,7 @@ public class PatientReportController { log.info("生成病友报告单返回:{}", response); return JsonResponse.newInstance().ok(response); } + @MustLogin @DoctorAudit @ApiOperation(value = "编辑报告单",notes = "编辑报告单") @ApiImplicitParams({ @@ -64,6 +67,7 @@ public class PatientReportController { return JsonResponse.newInstance().ok(codeEnum); } + @MustLogin @ApiOperation(value = "查询报告单列表",notes = "根据病人ID查询报告单列表") @ApiImplicitParams({ @ApiImplicitParam(name = "json", value = "编辑报告单信息", required = true) @@ -77,6 +81,7 @@ public class PatientReportController { log.info("查询报告单结果:{}", reportNamePageInfo); return JsonResponse.newInstance().ok(reportNamePageInfo); } + @ApiOperation(value = "查询报告单详情",notes = "根据病人ID查询报告单详情") @ApiImplicitParams({ @ApiImplicitParam(name = "json", value = "查询报告单详情", required = true) @@ -90,6 +95,7 @@ public class PatientReportController { return JsonResponse.newInstance().ok(detail); } + @MustLogin @ApiOperation(value = "查询医生对报告单的权限",notes = "查询医生对报告单的权限") @ApiImplicitParams({ @ApiImplicitParam(name = "json", value = "报告单ID", required = true) diff --git a/ht/src/main/java/com/ccsens/ht/api/PositionController.java b/ht/src/main/java/com/ccsens/ht/api/PositionController.java index fd9d79a9..d36e36c9 100644 --- a/ht/src/main/java/com/ccsens/ht/api/PositionController.java +++ b/ht/src/main/java/com/ccsens/ht/api/PositionController.java @@ -1,5 +1,6 @@ package com.ccsens.ht.api; +import com.ccsens.ht.annotation.MustLogin; import com.ccsens.ht.bean.dto.PositionDto; import com.ccsens.ht.bean.dto.QueryDto; import com.ccsens.ht.bean.vo.PositionVo; @@ -29,6 +30,7 @@ public class PositionController { @Autowired private IPositionService positionService; + @MustLogin @ApiOperation(value = "医院/部门/职务查询",notes = "医院/部门/职务查询") @ApiImplicitParams({ @ApiImplicitParam(name = "json", value = "医院/部门/职务查询", required = true) @@ -39,6 +41,8 @@ public class PositionController { List positions = positionService.queryPosition(params.getParam(), params.getUserId()); return JsonResponse.newInstance().ok(positions); } + + @MustLogin @ApiOperation(value = "职称查询",notes = "职称查询") @ApiImplicitParams({ @ApiImplicitParam(name = "json", value = "职称查询", required = true) diff --git a/ht/src/main/java/com/ccsens/ht/api/QuestionController.java b/ht/src/main/java/com/ccsens/ht/api/QuestionController.java index f7d93ca7..3e6d6e58 100644 --- a/ht/src/main/java/com/ccsens/ht/api/QuestionController.java +++ b/ht/src/main/java/com/ccsens/ht/api/QuestionController.java @@ -2,6 +2,7 @@ package com.ccsens.ht.api; import com.ccsens.ht.annotation.DoctorAudit; +import com.ccsens.ht.annotation.MustLogin; import com.ccsens.ht.bean.dto.QueryDto; import com.ccsens.ht.bean.dto.QuestionDto; import com.ccsens.ht.bean.vo.QuestionVo; @@ -33,6 +34,7 @@ public class QuestionController { @Autowired private IQuestionService questionService; + @MustLogin @DoctorAudit @ApiOperation(value = "测评试题查询",notes = "测评试题查询") @ApiImplicitParams({ @@ -45,6 +47,8 @@ public class QuestionController { log.info("查询试题结果:{}", query); return JsonResponse.newInstance().ok(query); } + + @MustLogin @DoctorAudit @ApiOperation(value = "保存试题得分",notes = "保存试题得分") @ApiImplicitParams({ diff --git a/ht/src/main/java/com/ccsens/ht/aspect/DoctorAuditAspect.java b/ht/src/main/java/com/ccsens/ht/aspect/DoctorAuditAspect.java index 60d90478..7cfc6d7f 100644 --- a/ht/src/main/java/com/ccsens/ht/aspect/DoctorAuditAspect.java +++ b/ht/src/main/java/com/ccsens/ht/aspect/DoctorAuditAspect.java @@ -14,6 +14,7 @@ import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; @@ -24,6 +25,7 @@ import java.util.List; * @author: wuHuiJuan * @create: 2019/11/21 10:51 */ +@Order(2) @Slf4j @Aspect @Component diff --git a/ht/src/main/java/com/ccsens/ht/aspect/MustLoginAspect.java b/ht/src/main/java/com/ccsens/ht/aspect/MustLoginAspect.java new file mode 100644 index 00000000..c2e3cf84 --- /dev/null +++ b/ht/src/main/java/com/ccsens/ht/aspect/MustLoginAspect.java @@ -0,0 +1,80 @@ +package com.ccsens.ht.aspect; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.ccsens.cloudutil.feign.TallFeignClient; +import com.ccsens.ht.bean.dto.QueryDto; +import com.ccsens.util.CodeEnum; +import com.ccsens.util.JsonResponse; +import com.ccsens.util.WebConstant; +import com.ccsens.util.exception.BaseException; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.util.Arrays; + +/** + * @description: + * @author: wuHuiJuan + * @create: 2019/12/09 09:54 + */ +@Order(1) +@Slf4j +@Aspect +@Component +public class MustLoginAspect { + @Autowired + private TallFeignClient tallFeignClient; + + @Pointcut("@annotation(com.ccsens.ht.annotation.MustLogin)") + public void loginAdvice(){} + + @Around("loginAdvice()") + public Object around(ProceedingJoinPoint pjp){ + +// HttpServletRequest request = ((ServletRequestAttributes) +// RequestContextHolder.getRequestAttributes()).getRequest(); +// final String authHeader = request.getHeader(WebConstant.HEADER_KEY_TOKEN); + + Object[] args = pjp.getArgs(); + QueryDto dto = (QueryDto) args[0]; + final String authHeader = dto.getToken(); + + JsonResponse response = tallFeignClient.getUserIdByToken(authHeader); + log.info("{}获取userId:{}", authHeader, response); + if (response.getCode().intValue() != CodeEnum.SUCCESS.getCode().intValue()) { + return response; + } + if (response.getData() == null) { + return JsonResponse.newInstance().ok(CodeEnum.NOT_LOGIN); + } + JSONObject json = JSONObject.parseObject(JSON.toJSONString(response.getData())); + Long userId = json.getLong("id"); + if (userId == null || userId == 0) { + return JsonResponse.newInstance().ok(CodeEnum.NOT_LOGIN); + } + + + dto.setUserId(userId); + Object result; + try { + result = pjp.proceed(); + } catch (Throwable throwable) { + log.error("doctorAudit运行异常", throwable); + throw new BaseException(CodeEnum.SYS_ERROR); + } + return result; + } + +} diff --git a/ht/src/main/java/com/ccsens/ht/bean/dto/QueryDto.java b/ht/src/main/java/com/ccsens/ht/bean/dto/QueryDto.java index be91b829..23431c8c 100644 --- a/ht/src/main/java/com/ccsens/ht/bean/dto/QueryDto.java +++ b/ht/src/main/java/com/ccsens/ht/bean/dto/QueryDto.java @@ -15,6 +15,8 @@ import lombok.Data; public class QueryDto { @ApiModelProperty("真正的请求参数") private T param; - @ApiModelProperty("登录用户ID") + @ApiModelProperty("登录用户ID 前端不为userId赋值") private Long userId; + @ApiModelProperty("token") + private String token; } diff --git a/ht/src/main/java/com/ccsens/ht/config/SwaggerConfigure.java b/ht/src/main/java/com/ccsens/ht/config/SwaggerConfigure.java new file mode 100644 index 00000000..9425d19a --- /dev/null +++ b/ht/src/main/java/com/ccsens/ht/config/SwaggerConfigure.java @@ -0,0 +1,56 @@ +package com.ccsens.ht.config; + +import com.ccsens.util.WebConstant; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.ParameterBuilder; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.schema.ModelRef; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.Parameter; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +import java.util.ArrayList; +import java.util.List; + +@Configuration +@EnableSwagger2 +@ConditionalOnExpression("${swagger.enable}") +//public class SwaggerConfigure extends WebMvcConfigurationSupport { +public class SwaggerConfigure /*implements WebMvcConfigurer*/ { + @Bean + public Docket customDocket() { + // + return new Docket(DocumentationType.SWAGGER_2) + .apiInfo(apiInfo()) + .select() + .apis(RequestHandlerSelectors + .basePackage("com.ccsens.ht.api")) + .build() + .globalOperationParameters(setHeaderToken()); + } + + private ApiInfo apiInfo() { + return new ApiInfo("Swagger Tall-ptpro",//大标题 title + "This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.",//小标题 + "1.0.0",//版本 + "http://swagger.io/terms/",//termsOfServiceUrl + "zhangsan",//作者 + "Apache 2.0",//链接显示文字 + "http://www.apache.org/licenses/LICENSE-2.0.html"//网站链接 + ); + } + + private List setHeaderToken() { + ParameterBuilder tokenPar = new ParameterBuilder(); + List pars = new ArrayList<>(); + tokenPar.name(WebConstant.HEADER_KEY_TOKEN).description("token") + .defaultValue(WebConstant.HEADER_KEY_TOKEN_PREFIX) + .modelRef(new ModelRef("string")).parameterType("header").required(false).build(); + pars.add(tokenPar.build()); + return pars; + } +} diff --git a/ht/src/main/resources/application-test.yml b/ht/src/main/resources/application-test.yml index f7502642..727080ed 100644 --- a/ht/src/main/resources/application-test.yml +++ b/ht/src/main/resources/application-test.yml @@ -27,7 +27,7 @@ spring: swagger: - enable: false + enable: true file: path: /home/www-test/ #domain: https://api.ccsens.com/test/ diff --git a/ht/src/main/resources/application.yml b/ht/src/main/resources/application.yml index 5889ff7f..5c2cd5c4 100644 --- a/ht/src/main/resources/application.yml +++ b/ht/src/main/resources/application.yml @@ -1,4 +1,4 @@ spring: profiles: - active: test - include: common, util-test \ No newline at end of file + active: dev + include: common, util-dev \ No newline at end of file diff --git a/tall/src/main/java/com/ccsens/tall/config/SwaggerConfigure.java b/tall/src/main/java/com/ccsens/tall/config/SwaggerConfigure.java new file mode 100644 index 00000000..c8baf677 --- /dev/null +++ b/tall/src/main/java/com/ccsens/tall/config/SwaggerConfigure.java @@ -0,0 +1,56 @@ +package com.ccsens.tall.config; + +import com.ccsens.util.WebConstant; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.ParameterBuilder; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.schema.ModelRef; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.Parameter; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +import java.util.ArrayList; +import java.util.List; + +@Configuration +@EnableSwagger2 +@ConditionalOnExpression("${swagger.enable}") +//public class SwaggerConfigure extends WebMvcConfigurationSupport { +public class SwaggerConfigure /*implements WebMvcConfigurer*/ { + @Bean + public Docket customDocket() { + // + return new Docket(DocumentationType.SWAGGER_2) + .apiInfo(apiInfo()) + .select() + .apis(RequestHandlerSelectors + .basePackage("com.ccsens.tall.web")) + .build() + .globalOperationParameters(setHeaderToken()); + } + + private ApiInfo apiInfo() { + return new ApiInfo("Swagger Tall-ptpro",//大标题 title + "This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.",//小标题 + "1.0.0",//版本 + "http://swagger.io/terms/",//termsOfServiceUrl + "zhangsan",//作者 + "Apache 2.0",//链接显示文字 + "http://www.apache.org/licenses/LICENSE-2.0.html"//网站链接 + ); + } + + private List setHeaderToken() { + ParameterBuilder tokenPar = new ParameterBuilder(); + List pars = new ArrayList<>(); + tokenPar.name(WebConstant.HEADER_KEY_TOKEN).description("token") + .defaultValue(WebConstant.HEADER_KEY_TOKEN_PREFIX) + .modelRef(new ModelRef("string")).parameterType("header").required(false).build(); + pars.add(tokenPar.build()); + return pars; + } +} diff --git a/tall/src/main/java/com/ccsens/tall/web/UserController.java b/tall/src/main/java/com/ccsens/tall/web/UserController.java index 88d432a0..6cd0fd03 100644 --- a/tall/src/main/java/com/ccsens/tall/web/UserController.java +++ b/tall/src/main/java/com/ccsens/tall/web/UserController.java @@ -194,7 +194,7 @@ public class UserController { @ApiImplicitParam(name="token",value = "token",required = true,paramType = "query") }) @RequestMapping(value = "token",method = RequestMethod.GET,produces = {"application/json;charset=UTF-8"}) - public JsonResponse getNodeMessage(HttpServletRequest request, @RequestParam(required = true) String token) throws Exception { + public JsonResponse getNodeMessage(@RequestParam(required = true) String token) throws Exception { //验证token是否有效 UserVo.TokenToUserId tokenToUserId = new UserVo.TokenToUserId(); Claims claims = null; @@ -208,6 +208,7 @@ public class UserController { }catch(ExpiredJwtException e){ flag = false; }catch(Exception e){ + e.printStackTrace(); flag = false; } } diff --git a/util/pom.xml b/util/pom.xml index 5fa34a28..f9823e56 100644 --- a/util/pom.xml +++ b/util/pom.xml @@ -10,6 +10,12 @@ 4.0.0 util + + + org.aspectj + aspectjrt + + \ No newline at end of file diff --git a/util/src/main/java/com/ccsens/util/CodeEnum.java b/util/src/main/java/com/ccsens/util/CodeEnum.java index e18f913b..21010634 100644 --- a/util/src/main/java/com/ccsens/util/CodeEnum.java +++ b/util/src/main/java/com/ccsens/util/CodeEnum.java @@ -22,44 +22,45 @@ public enum CodeEnum { QUESTION_NOT_FOUND(11,"试题未找到。", true), WSB_NOT_PROJECT_HEADER(12,"没有项目信息的表头",true), - WSB_NOT_MEMBER_HEADER(12,"没有项目成员的表头",true), - WSB_NOT_TASK_HEADER(12,"没有项目任务分解的表头",true), - WBS_PROJECT_TIME_ERROR(13,"时间格式异常",true), - WBS_NOT_PROJECT_TIME(13,"项目时间不能为空",true), - WBS_NOT_PROJECT_NAME(13,"找不到项目信息",true), - WBS_NOT_MEMBER_SHEET(14,"未找到项目成员表",true), - WBS_NOT_PHONE(15,"手机号为空",true), - WBS_STAKEHOLDER_PHONE(16,"奖惩干系人和手机号不匹配",true), - WBS_REPEAT_MEMBER_PHONE(16,"成员或手机号重复",true), - WBS_NOT_FIRST_ROLE(17,"系统角色名称错误",true), - WBS_REPEAT_ROLE_NAME(17,"角色名称重复",true), - WSB_NOT_MEMBER(14,"未找到对应成员,请检查成员姓名是否正确", true), - WBS_NOT_FIND_ROLE(18,"找不到对应的角色,请检查对谁不可见一列的名字与格式",true), - WBS_NOT_TASK_NAME(18,"任务名不能为空",true), - WBS_NOT_FIND_EXECUTOR_ROLE(18,"找不到负责人,请检查负责人的名称",true), - WBS_NOT_FIND_CHECKER_ROLE(18,"找不到检查人,请检查检查人的名称",true), - WBS_DELAY_ERROR(18,"任务切换模式填写错误",true), - WBS_SUB_TASK_ANALYSIS(18,"无法解析此子日程表",true), - WBS_NOT_SUB_TASK(18,"找不到对应的子日程表,请检查子日程表的名字是否正确",true), - WBS_NOT_PLUGIN_SHEET(18,"未找到插件表",true), - WBS_NOT_PLUGIN(18,"找不到对应的插件,请确认是否填写正确",true), - PROJECT_DATE_FORMAT_ERROR(18,"输入的日期格式错误,有效日期格式 例:2019-01-01或2019-01",true), - TASK_NOT_UPLOAD_DELIVER(19,"交付物未上传,无法完成任务",true), - NOT_PROJECT(20,"找不到该项目",true), - NOT_ROLE(20,"找不到该角色",true), - NOT_DELIVER(20,"找不到对应的交付物",true), - NOT_TASK(20,"找不到对应的任务",true), - NOT_DELIVER_FILE(20,"找不到文件",true), - IS_NOT_EXECUTOR(21,"您不是该任务负责人",true), - NOT_CHECKER(21,"请选择检查人",true), - SUB_TASK_IS_NOT_FINISH(21,"分组内任务未全部完成",true), - IS_NOT_CHECKER(22,"你不是该交付物的检查人",true), - NOT_POWER(23,"权限不足,无法操作",true), - SMS_CODE_CORRECT(24,"验证信息错误",true), + WSB_NOT_MEMBER_HEADER(13,"没有项目成员的表头",true), + WSB_NOT_TASK_HEADER(14,"没有项目任务分解的表头",true), + WBS_PROJECT_TIME_ERROR(15,"时间格式异常",true), + WBS_NOT_PROJECT_TIME(16,"项目时间不能为空",true), + WBS_NOT_PROJECT_NAME(17,"找不到项目信息",true), + WBS_NOT_MEMBER_SHEET(18,"未找到项目成员表",true), + WBS_NOT_PHONE(19,"手机号为空",true), + WBS_STAKEHOLDER_PHONE(20,"奖惩干系人和手机号不匹配",true), + WBS_REPEAT_MEMBER_PHONE(21,"成员或手机号重复",true), + WBS_NOT_FIRST_ROLE(22,"系统角色名称错误",true), + WBS_REPEAT_ROLE_NAME(23,"角色名称重复",true), + WSB_NOT_MEMBER(24,"未找到对应成员,请检查成员姓名是否正确", true), + WBS_NOT_FIND_ROLE(25,"找不到对应的角色,请检查对谁不可见一列的名字与格式",true), + WBS_NOT_TASK_NAME(26,"任务名不能为空",true), + WBS_NOT_FIND_EXECUTOR_ROLE(27,"找不到负责人,请检查负责人的名称",true), + WBS_NOT_FIND_CHECKER_ROLE(28,"找不到检查人,请检查检查人的名称",true), + WBS_DELAY_ERROR(29,"任务切换模式填写错误",true), + WBS_SUB_TASK_ANALYSIS(30,"无法解析此子日程表",true), + WBS_NOT_SUB_TASK(31,"找不到对应的子日程表,请检查子日程表的名字是否正确",true), + WBS_NOT_PLUGIN_SHEET(32,"未找到插件表",true), + WBS_NOT_PLUGIN(33,"找不到对应的插件,请确认是否填写正确",true), + PROJECT_DATE_FORMAT_ERROR(34,"输入的日期格式错误,有效日期格式 例:2019-01-01或2019-01",true), + TASK_NOT_UPLOAD_DELIVER(35,"交付物未上传,无法完成任务",true), + NOT_PROJECT(36,"找不到该项目",true), + NOT_ROLE(37,"找不到该角色",true), + NOT_DELIVER(38,"找不到对应的交付物",true), + NOT_TASK(39,"找不到对应的任务",true), + NOT_DELIVER_FILE(40,"找不到文件",true), + IS_NOT_EXECUTOR(41,"您不是该任务负责人",true), + NOT_CHECKER(42,"请选择检查人",true), + SUB_TASK_IS_NOT_FINISH(43,"分组内任务未全部完成",true), + IS_NOT_CHECKER(44,"你不是该交付物的检查人",true), + NOT_POWER(45,"权限不足,无法操作",true), + SMS_CODE_CORRECT(46,"验证信息错误",true), - QUESTION_RULE_NOT_FOUND(25,"该评测规则未知,请联系开发人员。", true), - REPORT_DOCTOR_ERROR(26, "对不起,您没有修改报告单结果的权限", true), + QUESTION_RULE_NOT_FOUND(47,"该评测规则未知,请联系开发人员。", true), + REPORT_DOCTOR_ERROR(48, "对不起,您没有修改报告单结果的权限。", true), + NOT_LOGIN(49, "对不起,您尚未登录或登录已失效,请重新登录。", true), ; public CodeEnum addMsg(String msg){ diff --git a/util/src/main/java/com/ccsens/util/config/SwaggerConfigure.java b/util/src/main/java/com/ccsens/util/config/SwaggerConfigure.java index c0f72992..f0e9a7c9 100644 --- a/util/src/main/java/com/ccsens/util/config/SwaggerConfigure.java +++ b/util/src/main/java/com/ccsens/util/config/SwaggerConfigure.java @@ -1,56 +1,56 @@ -package com.ccsens.util.config; - -import com.ccsens.util.WebConstant; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import springfox.documentation.builders.ParameterBuilder; -import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.schema.ModelRef; -import springfox.documentation.service.ApiInfo; -import springfox.documentation.service.Parameter; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spring.web.plugins.Docket; -import springfox.documentation.swagger2.annotations.EnableSwagger2; - -import java.util.ArrayList; -import java.util.List; - -@Configuration -@EnableSwagger2 -@ConditionalOnExpression("${swagger.enable}") -//public class SwaggerConfigure extends WebMvcConfigurationSupport { -public class SwaggerConfigure /*implements WebMvcConfigurer*/ { - @Bean - public Docket customDocket() { - // - return new Docket(DocumentationType.SWAGGER_2) - .apiInfo(apiInfo()) - .select() - .apis(RequestHandlerSelectors - .basePackage("com.ccsens.ptpro.web")) - .build() - .globalOperationParameters(setHeaderToken()); - } - - private ApiInfo apiInfo() { - return new ApiInfo("Swagger Tall-ptpro",//大标题 title - "This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.",//小标题 - "1.0.0",//版本 - "http://swagger.io/terms/",//termsOfServiceUrl - "zhangsan",//作者 - "Apache 2.0",//链接显示文字 - "http://www.apache.org/licenses/LICENSE-2.0.html"//网站链接 - ); - } - - private List setHeaderToken() { - ParameterBuilder tokenPar = new ParameterBuilder(); - List pars = new ArrayList<>(); - tokenPar.name(WebConstant.HEADER_KEY_TOKEN).description("token") - .defaultValue(WebConstant.HEADER_KEY_TOKEN_PREFIX) - .modelRef(new ModelRef("string")).parameterType("header").required(false).build(); - pars.add(tokenPar.build()); - return pars; - } -} +//package com.ccsens.util.config; +// +//import com.ccsens.util.WebConstant; +//import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +//import springfox.documentation.builders.ParameterBuilder; +//import springfox.documentation.builders.RequestHandlerSelectors; +//import springfox.documentation.schema.ModelRef; +//import springfox.documentation.service.ApiInfo; +//import springfox.documentation.service.Parameter; +//import springfox.documentation.spi.DocumentationType; +//import springfox.documentation.spring.web.plugins.Docket; +//import springfox.documentation.swagger2.annotations.EnableSwagger2; +// +//import java.util.ArrayList; +//import java.util.List; +// +//@Configuration +//@EnableSwagger2 +//@ConditionalOnExpression("${swagger.enable}") +////public class SwaggerConfigure extends WebMvcConfigurationSupport { +//public class SwaggerConfigure /*implements WebMvcConfigurer*/ { +// @Bean +// public Docket customDocket() { +// // +// return new Docket(DocumentationType.SWAGGER_2) +// .apiInfo(apiInfo()) +// .select() +// .apis(RequestHandlerSelectors +// .basePackage("com.ccsens.tall.web,com.ccsens.ht.api")) +// .build() +// .globalOperationParameters(setHeaderToken()); +// } +// +// private ApiInfo apiInfo() { +// return new ApiInfo("Swagger Tall-ptpro",//大标题 title +// "This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.",//小标题 +// "1.0.0",//版本 +// "http://swagger.io/terms/",//termsOfServiceUrl +// "zhangsan",//作者 +// "Apache 2.0",//链接显示文字 +// "http://www.apache.org/licenses/LICENSE-2.0.html"//网站链接 +// ); +// } +// +// private List setHeaderToken() { +// ParameterBuilder tokenPar = new ParameterBuilder(); +// List pars = new ArrayList<>(); +// tokenPar.name(WebConstant.HEADER_KEY_TOKEN).description("token") +// .defaultValue(WebConstant.HEADER_KEY_TOKEN_PREFIX) +// .modelRef(new ModelRef("string")).parameterType("header").required(false).build(); +// pars.add(tokenPar.build()); +// return pars; +// } +//}