From e5bf216882f1f523bf32496a02ee2d7b6cb6a3cd Mon Sep 17 00:00:00 2001 From: liuxm <liuxm@fescotech.com> Date: 星期二, 23 四月 2024 18:09:43 +0800 Subject: [PATCH] 日志管理相关 --- pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/pojoBa/BaLog.java | 36 ++++++ pms-parent/pms-common/src/main/java/com/dy/common/util/ObjectToMapUtil.java | 35 +++++ pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/aop/OperationLogAspect.java | 117 +++++++++++++++++++ pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/aop/LogSv.java | 24 ++++ pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/daoBa/BaLogMapper.java | 18 +++ pms-parent/pms-global/src/main/resources/application-global.yml | 1 pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/user/UserCtrl.java | 8 + pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/aop/OperationDescription.java | 12 ++ pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/role/RoleCtrl.java | 6 + pms-parent/pms-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java | 4 pms-parent/pms-global/src/main/resources/mapper/BaLogMapper.xml | 93 +++++++++++++++ 11 files changed, 354 insertions(+), 0 deletions(-) diff --git a/pms-parent/pms-common/src/main/java/com/dy/common/util/ObjectToMapUtil.java b/pms-parent/pms-common/src/main/java/com/dy/common/util/ObjectToMapUtil.java new file mode 100644 index 0000000..8165e98 --- /dev/null +++ b/pms-parent/pms-common/src/main/java/com/dy/common/util/ObjectToMapUtil.java @@ -0,0 +1,35 @@ +package com.dy.common.util; + +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + +public class ObjectToMapUtil { + + /** + * 灏嗗璞¤浆鎹负Map銆� + * + * @param obj 瑕佽浆鎹㈢殑瀵硅薄銆� + * @return 鍖呭惈瀵硅薄瀛楁鍜屽�肩殑Map銆� + */ + public static Map<String, Object> objectToMap(Object obj) { + if (obj == null) { + return null; + } + + Map<String, Object> map = new HashMap<>(); + Class<?> clazz = obj.getClass(); + Field[] fields = clazz.getDeclaredFields(); + + for (Field field : fields) { + try { + field.setAccessible(true); // 璁剧疆瀛楁鍙闂� + map.put(field.getName(), field.get(obj)); + } catch (IllegalAccessException e) { + throw new RuntimeException("Error accessing field: " + field.getName(), e); + } + } + + return map; + } +} diff --git a/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/aop/LogSv.java b/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/aop/LogSv.java new file mode 100644 index 0000000..c244feb --- /dev/null +++ b/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/aop/LogSv.java @@ -0,0 +1,24 @@ +package com.dy.pmsGlobal.aop; + +import com.dy.pmsGlobal.daoBa.BaLogMapper; +import com.dy.pmsGlobal.pojoBa.BaLog; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; + +@Service +public class LogSv { + + @Autowired + private BaLogMapper logMapper; + + public void save(long operator, String operation,String resIp) { + BaLog log = new BaLog(); + log.setUserId(operator); + log.setContent(operation); + log.setCreateDt(new Date()); + log.setResIp(resIp); + logMapper.insert(log); + } +} diff --git a/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/aop/OperationDescription.java b/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/aop/OperationDescription.java new file mode 100644 index 0000000..58c9bcd --- /dev/null +++ b/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/aop/OperationDescription.java @@ -0,0 +1,12 @@ +package com.dy.pmsGlobal.aop; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface OperationDescription { + String value(); +} diff --git a/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/aop/OperationLogAspect.java b/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/aop/OperationLogAspect.java new file mode 100644 index 0000000..919556a --- /dev/null +++ b/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/aop/OperationLogAspect.java @@ -0,0 +1,117 @@ +package com.dy.pmsGlobal.aop; + +import com.dy.common.util.ObjectToMapUtil; +import com.dy.common.webFilter.UserTokenContext; +import com.dy.common.webUtil.BaseResponse; +import com.dy.common.webUtil.BaseResponseUtils; +import com.dy.pmsGlobal.pojoBa.BaUser; +import com.mysql.cj.util.StringUtils; +import jakarta.servlet.http.HttpServletRequest; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import org.springframework.web.util.UriComponentsBuilder; + +import java.util.Map; + +@Aspect +@Component +public class OperationLogAspect { + + @Value("${pms.sso.curUserUrl}") + public String SsoCurUserUrl ; + + private LogSv logSv; + @Autowired + public void setLogSv(LogSv logSv){ + this.logSv = logSv; + } + private RestTemplate restTemplate; + @Autowired + public void setRestTemplate(RestTemplate restTemplate){ + this.restTemplate = restTemplate ; + } + + @AfterReturning(pointcut = "@annotation(com.dy.pmsGlobal.aop.OperationDescription)", returning = "result") + public void logAfterReturning(JoinPoint joinPoint, Object result) { + // 鑾峰彇鏂规硶鐨勪腑鏂囨弿杩� + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + OperationDescription operationDescription = methodSignature.getMethod().getAnnotation(OperationDescription.class); + String operationName = operationDescription.value(); + //缁撴灉 + BaseResponse response = (BaseResponse)result; + response.isSuccess(); + // 鑾峰彇鐢ㄦ埛淇℃伅 + BaUser user = (BaUser)getCurUser(response); + Long operator = user!=null?user.id: 1l; + + // 鑾峰彇IP鍦板潃 + String ipAddress = getRemoteHost(); + // 璁板綍鏃ュ織 + logSv.save(operator, operationName,ipAddress); + } + + /** + * 璋冪敤SSO鑾峰彇鐢ㄦ埛淇℃伅 + * @param response (鑾峰彇token) + * @return 杩斿洖瀵硅薄 + */ + private Object getCurUser(BaseResponse response){ + if(!StringUtils.isNullOrEmpty(SsoCurUserUrl)){ + String token = UserTokenContext.get(); + if(StringUtils.isNullOrEmpty(token)){ + Map<String,Object> resMap = ObjectToMapUtil.objectToMap(response.getContent()); + token =resMap.containsKey("token")?resMap.get("token").toString():""; + } + + String url = UriComponentsBuilder.fromUriString(SsoCurUserUrl) + .queryParam("token", token) + .build() + .toUriString(); + HttpHeaders headers = new HttpHeaders(); + HttpEntity<?> httpEntity = new HttpEntity<>(headers); + ResponseEntity<BaUser> myResponse = null; + try { + // 閫氳繃Get鏂瑰紡璋冪敤鎺ュ彛 + myResponse = restTemplate.exchange(url, HttpMethod.GET, httpEntity, BaUser.class); + } catch (Exception e) { + e.printStackTrace(); + } + assert myResponse != null; + return myResponse.getBody(); + }else { + return BaseResponseUtils.buildError("鍚庣绯荤粺鍑洪敊锛屾湭寰楀埌SsoCurUserUrl"); + } + } + + /** + * 鑾峰彇IP鍦板潃 + * @return + */ + private String getRemoteHost() { + // 鑾峰彇璇锋眰瀵硅薄 + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip; + } +} diff --git a/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/daoBa/BaLogMapper.java b/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/daoBa/BaLogMapper.java new file mode 100644 index 0000000..671a92d --- /dev/null +++ b/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/daoBa/BaLogMapper.java @@ -0,0 +1,18 @@ +package com.dy.pmsGlobal.daoBa; + +import com.dy.pmsGlobal.pojoBa.BaLog; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface BaLogMapper { + int insert(BaLog record); + + int insertSelective(BaLog record); + + BaLog selectByPrimaryKey(Long id); + + List<BaLog> selectSome(Map<String, Object> params); +} \ No newline at end of file diff --git a/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/pojoBa/BaLog.java b/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/pojoBa/BaLog.java new file mode 100644 index 0000000..dc0b617 --- /dev/null +++ b/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/pojoBa/BaLog.java @@ -0,0 +1,36 @@ +package com.dy.pmsGlobal.pojoBa; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +import java.util.Date; + +@TableName(value="ba_log", autoResultMap = true) +@Data +@Builder +@ToString +@NoArgsConstructor +@AllArgsConstructor +public class BaLog { + private Long id; + + /** + * 鐢ㄦ埛ID + */ + private Long userId; + + /** + * 鏃ュ織鍐呭 + */ + private String content; + + /** + * 璇锋眰IP + */ + private String resIp; + + /** + * 鍒涘缓鏃堕棿 + */ + private Date createDt; +} \ No newline at end of file diff --git a/pms-parent/pms-global/src/main/resources/application-global.yml b/pms-parent/pms-global/src/main/resources/application-global.yml index 2b98a32..1a79b0a 100644 --- a/pms-parent/pms-global/src/main/resources/application-global.yml +++ b/pms-parent/pms-global/src/main/resources/application-global.yml @@ -53,6 +53,7 @@ webPort: 8000 sso: checkUrl: http://127.0.0.1:12344/sso/sso/ssoCheck + curUserUrl: http://127.0.0.1:12344/sso/sso/ssoCurUser webPort: 12344 idSuffix: 1 base: diff --git a/pms-parent/pms-global/src/main/resources/mapper/BaLogMapper.xml b/pms-parent/pms-global/src/main/resources/mapper/BaLogMapper.xml new file mode 100644 index 0000000..48010d6 --- /dev/null +++ b/pms-parent/pms-global/src/main/resources/mapper/BaLogMapper.xml @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.dy.pmsGlobal.daoBa.BaLogMapper"> + <resultMap id="BaseResultMap" type="com.dy.pmsGlobal.pojoBa.BaLog"> + <!--@mbg.generated--> + <!--@Table ba_log--> + <id column="id" jdbcType="BIGINT" property="id" /> + <result column="user_id" jdbcType="BIGINT" property="userId" /> + <result column="content" jdbcType="VARCHAR" property="content" /> + <result column="res_ip" jdbcType="VARCHAR" property="resIp" /> + <result column="create_dt" jdbcType="TIMESTAMP" property="createDt" /> + </resultMap> + <sql id="Base_Column_List"> + <!--@mbg.generated--> + id, user_id, content, create_dt,res_ip + </sql> + <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap"> + <!--@mbg.generated--> + select + <include refid="Base_Column_List" /> + from ba_log + where id = #{id,jdbcType=BIGINT} + </select> + <insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.dy.pmsGlobal.pojoBa.BaLog" useGeneratedKeys="true"> + <!--@mbg.generated--> + insert into ba_log (user_id, content, create_dt,res_ip + ) + values (#{userId,jdbcType=BIGINT}, #{content,jdbcType=VARCHAR}, #{createDt,jdbcType=TIMESTAMP} + , #{resIp,jdbcType=VARCHAR} + ) + </insert> + <insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.dy.pmsGlobal.pojoBa.BaLog" useGeneratedKeys="true"> + <!--@mbg.generated--> + insert into ba_log + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="userId != null"> + user_id, + </if> + <if test="content != null"> + content, + </if> + <if test="createDt != null"> + create_dt, + </if> + <if test="resIp != null"> + res_ip, + </if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="userId != null"> + #{userId,jdbcType=BIGINT}, + </if> + <if test="content != null"> + #{content,jdbcType=VARCHAR}, + </if> + <if test="createDt != null"> + #{createDt,jdbcType=TIMESTAMP}, + </if> + <if test="resIp != null"> + #{resIp,jdbcType=VARCHAR}, + </if> + </trim> + </insert> + + <select id="selectSome" resultMap="BaseResultMap"> + select + <include refid="Base_Column_List" > + <property name="alias" value="r"/> + </include> + from ba_log r + where + <trim prefix="and" suffixOverrides="and"> + <if test="userId != null and userId != ''"> + user_id = #{userId,jdbcType=BIGINT} and + </if> + <if test="content != null and content != '' "> + content like concat('%', #{content}, '%') and + </if> + <if test="createDt != null and createDt != '' "> + create_dt = #{createDt,jdbcType=TIMESTAMP} and + </if> + <if test="resIp != null and resIp != '' "> + res_ip =#{resIp,jdbcType=VARCHAR} and + </if> + </trim> + order by id DESC + <trim prefix="limit " > + <if test="start != null and count != null"> + #{start}, #{count} + </if> + </trim> + </select> +</mapper> \ No newline at end of file diff --git a/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/role/RoleCtrl.java b/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/role/RoleCtrl.java index 3ff0904..0b31b90 100644 --- a/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/role/RoleCtrl.java +++ b/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/role/RoleCtrl.java @@ -5,6 +5,7 @@ import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; import com.dy.common.webUtil.QueryResultVo; +import com.dy.pmsGlobal.aop.OperationDescription; import com.dy.pmsGlobal.pojoBa.BaRole; import jakarta.validation.Valid; import lombok.extern.slf4j.Slf4j; @@ -36,6 +37,7 @@ */ @PostMapping(path="save") @SsoPowerAop(power = "10100011") + @OperationDescription("淇濆瓨瑙掕壊淇℃伅") public BaseResponse<BaRole> save(@RequestBody @Valid BaRole role,BindingResult bindingResult){ try { role.setDeleted(false); @@ -56,6 +58,7 @@ */ @PostMapping(path="update") @SsoPowerAop(power = "10100011") + @OperationDescription("鏇存柊瑙掕壊淇℃伅") public BaseResponse<BaRole> update(@RequestBody @Valid BaRole role,BindingResult bindingResult){ try { return BaseResponseUtils.buildSuccess(roleSv.update(role)); @@ -73,6 +76,7 @@ */ @PostMapping(path="delete") @SsoPowerAop(power = "10100011") + @OperationDescription("鍒犻櫎瑙掕壊淇℃伅") public BaseResponse<BaRole> delete(String id,BindingResult bindingResult){ try { return BaseResponseUtils.buildSuccess(roleSv.delete(Long.parseLong(id))); @@ -89,6 +93,7 @@ */ @GetMapping(path="one") @SsoPowerAop(power = "10100010") //鐧诲綍涓庢潈闄愬悓鏃堕獙璇� + @OperationDescription("鏍规嵁ID鏌ヨ瑙掕壊淇℃伅") public BaseResponse<BaRole> one(String id){ try{ BaRole role=roleSv.selectById(id); @@ -106,6 +111,7 @@ */ @PostMapping(path="some") @SsoPowerAop(power = "10100010") + @OperationDescription("鍒嗛〉鏌ヨ瑙掕壊淇℃伅") public BaseResponse<QueryResultVo<List<BaRole>>> some(@RequestBody QueryVo vo){ try { QueryResultVo<List<BaRole>> list = roleSv.selectSome(vo) ; diff --git a/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/user/UserCtrl.java b/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/user/UserCtrl.java index 01bd5b6..603ad0d 100644 --- a/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/user/UserCtrl.java +++ b/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/user/UserCtrl.java @@ -6,6 +6,7 @@ import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; import com.dy.common.webUtil.QueryResultVo; +import com.dy.pmsGlobal.aop.OperationDescription; import com.dy.pmsGlobal.pojoBa.BaUser; import com.dy.pmsGlobal.util.Constant; import com.mysql.cj.util.StringUtils; @@ -44,6 +45,7 @@ * @return 榛樿瀵嗙爜 */ @GetMapping(path = "defaultPassword") + @OperationDescription("瀹㈡埛绔姹傚緱鍒伴粯璁ゅ瘑鐮�") public BaseResponse<String> defaultPassword(){ if(defaultTrueRandomFalsePassword){ return BaseResponseUtils.buildSuccess(defaultPassword) ; @@ -60,6 +62,7 @@ @PostMapping(path = "some", consumes = MediaType.APPLICATION_JSON_VALUE) //@SsoAop() //鍙湁鐧诲綍楠岃瘉锛屾病鏈夋潈闄愰獙璇� @SsoPowerAop(power = "10100010") //鐧诲綍涓庢潈闄愬悓鏃堕獙璇� + @OperationDescription("鍒嗛〉鏌ヨ鐢ㄦ埛") public BaseResponse<QueryResultVo<List<BaUser>>> some(@RequestBody QueryVo vo) { try { QueryResultVo<List<BaUser>> res = this.sv.selectSome(vo); @@ -78,6 +81,7 @@ @GetMapping(path = "one") //@SsoAop() //鍙湁鐧诲綍楠岃瘉锛屾病鏈夋潈闄愰獙璇� @SsoPowerAop(power = "10100010") //鐧诲綍涓庢潈闄愬悓鏃堕獙璇� + @OperationDescription("鏌ヨ鍗曚釜鐢ㄦ埛") public BaseResponse<BaUser> one(String id) { try { return BaseResponseUtils.buildSuccess(this.sv.selectById(Long.parseLong(id))); @@ -96,6 +100,7 @@ @PostMapping(path = "save", consumes = MediaType.APPLICATION_JSON_VALUE) //@SsoAop() //鍙湁鐧诲綍楠岃瘉锛屾病鏈夋潈闄愰獙璇� @SsoPowerAop(power = "10100011") //鐧诲綍涓庢潈闄愬悓鏃堕獙璇� + @OperationDescription("淇濆瓨鐢ㄦ埛淇℃伅") public BaseResponse<Boolean> save(@RequestBody @Valid BaUser po, BindingResult bindingResult) { if (bindingResult != null && bindingResult.hasErrors()) { return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); @@ -136,6 +141,7 @@ @PostMapping(path = "update", consumes = MediaType.APPLICATION_JSON_VALUE) //@SsoAop() //鍙湁鐧诲綍楠岃瘉锛屾病鏈夋潈闄愰獙璇� @SsoPowerAop(power = "10100011") //鐧诲綍涓庢潈闄愬悓鏃堕獙璇� + @OperationDescription("鏇存柊鐢ㄦ埛淇℃伅") public BaseResponse<Boolean> update(@RequestBody @Validated BaUser po, BindingResult bindingResult) { int count; try { @@ -168,6 +174,7 @@ //@GetMapping(path = "changePassword", consumes = MediaType.TEXT_PLAIN_VALUE) @GetMapping(path = "changePassword") @SsoAop() + @OperationDescription("淇敼瀵嗙爜") public BaseResponse<Boolean> changePassword(String id, String oldPassword, String newPassword) { int count; try { @@ -220,6 +227,7 @@ @PostMapping(path = "resetPassword", consumes = MediaType.APPLICATION_JSON_VALUE) //@SsoAop() //鍙湁鐧诲綍楠岃瘉锛屾病鏈夋潈闄愰獙璇� @SsoPowerAop(power = "10100011") //鐧诲綍涓庢潈闄愬悓鏃堕獙璇� + @OperationDescription("閲嶇疆瀵嗙爜") public BaseResponse<Boolean> resetPassword(@RequestBody @Validated ResetPasswordVo vo, BindingResult bindingResult) { int count; try { diff --git a/pms-parent/pms-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java b/pms-parent/pms-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java index 3bc9662..2e9b29c 100644 --- a/pms-parent/pms-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java +++ b/pms-parent/pms-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java @@ -4,6 +4,7 @@ import com.dy.common.util.MD5; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; +import com.dy.pmsGlobal.aop.OperationDescription; import com.dy.pmsGlobal.pojoBa.BaUser; import com.mysql.cj.util.StringUtils; import jakarta.servlet.http.HttpServletRequest; @@ -45,6 +46,7 @@ * @return 鐧诲綍鐢ㄦ埛鍊煎璞� */ @PostMapping(path = "login", consumes = MediaType.APPLICATION_JSON_VALUE)//鍓嶇鎻愪氦json鏁版嵁 + @OperationDescription("鐢ㄦ埛鐧诲綍(json)") public BaseResponse<UserVo> login(@RequestBody @Valid LoginVo vo, BindingResult bindingResult) { try { if(bindingResult != null && bindingResult.hasErrors()){ @@ -63,6 +65,7 @@ * @return 鐧诲綍鐢ㄦ埛鍊煎璞� */ @PostMapping(path = "loginForm", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)//鍓嶇鎻愪氦form琛ㄥ崟鏁版嵁 + @OperationDescription("鐢ㄦ埛鐧诲綍(form)") public BaseResponse<UserVo> loginForm(@RequestBody @Valid LoginVo vo, BindingResult bindingResult){ try{ if(bindingResult != null && bindingResult.hasErrors()){ @@ -82,6 +85,7 @@ * @return 姝e父閫�鍑虹櫥褰曡繑鍥瀟rue锛屽惁鍒欒繑鍥瀎alse */ @GetMapping(path = "logout") + @OperationDescription("閫�鍑虹櫥褰�") public BaseResponse<Boolean> logout(HttpServletRequest hr){ try{ String token = hr.getHeader("token") ; -- Gitblit v1.8.0