zhijiezhao 2 lat temu
rodzic
commit
f02e58dc79

+ 7 - 0
src/main/java/com/caimei365/user/controller/BaseApi.java

@@ -1,5 +1,6 @@
 package com.caimei365.user.controller;
 
+import com.caimei365.user.idempotent.IpSave;
 import com.caimei365.user.model.ResponseJson;
 import com.caimei365.user.model.dto.MobileDto;
 import com.caimei365.user.model.dto.PasswordDto;
@@ -53,6 +54,7 @@ public class BaseApi {
      */
     @ApiOperation("获取图片验证码")
     @ApiImplicitParam(required = true, name = "platformType", value = "0:www,1:crm/h5,2:小程序")
+    @IpSave(saveName = "获取图片验证码",saveParams = false)
     @GetMapping("/captcha")
     public ResponseJson<Map<String, Object>> getCaptchaImage(Integer platformType) {
         return baseService.getCaptchaImage(platformType);
@@ -80,6 +82,7 @@ public class BaseApi {
             @ApiImplicitParam(required = false, name = "token", value = "图片token")
 
     })
+    @IpSave(saveName = "获取短信验证码",saveParams = true)
     @GetMapping("/sms/code")
     public ResponseJson getSmsCode(String mobile, Integer activateCodeType, Integer platformType, Integer isCheckCaptcha, String imgCode, String token) {
         return baseService.getSmsCode(mobile, activateCodeType, platformType, isCheckCaptcha, imgCode, token);
@@ -108,6 +111,7 @@ public class BaseApi {
             @ApiImplicitParam(required = false, name = "imgCode", value = "图片验证码"),
             @ApiImplicitParam(required = false, name = "token", value = "图片token")
     })
+    @IpSave(saveName = "绑定账号,发送短信验证",saveParams = true)
     @GetMapping("/sms/bind")
     public ResponseJson getBindSmsCode(String mobile, String bindMobile, Integer userId, Integer platformType, Integer isCheckCaptcha, String imgCode, String token) {
         return baseService.getBindSmsCode(mobile, bindMobile, userId, platformType, isCheckCaptcha, imgCode, token);
@@ -142,6 +146,7 @@ public class BaseApi {
      *                    }
      */
     @ApiOperation("修改密码(旧:/user/findCompanyPwd)")
+    @IpSave(saveName = "修改密码",saveParams = true)
     @PostMapping("/update/password")
     public ResponseJson updatePassword(PasswordDto passwordDto) {
         return baseService.updatePassword(passwordDto);
@@ -176,6 +181,7 @@ public class BaseApi {
     }
 
     @ApiOperation("超级会员会员中心")
+    @IpSave(saveName = "超级会员中心",saveParams = true)
     @GetMapping("/super/center")
     public ResponseJson<Map<String, Object>> superCenter(Integer userId,Integer source) {
         if (null == userId) {
@@ -185,6 +191,7 @@ public class BaseApi {
     }
 
     @ApiOperation("超级会员套餐详情")
+    @IpSave(saveName = "超级会员套餐详情",saveParams = false)
     @GetMapping("/super/package")
     public ResponseJson findPackage(){
         return baseService.findPackage();

+ 4 - 0
src/main/java/com/caimei365/user/controller/LoginApi.java

@@ -1,5 +1,6 @@
 package com.caimei365.user.controller;
 
+import com.caimei365.user.idempotent.IpSave;
 import com.caimei365.user.model.ResponseJson;
 import com.caimei365.user.model.dto.*;
 import com.caimei365.user.model.vo.UserLoginVo;
@@ -40,6 +41,7 @@ public class LoginApi {
      * @return UserLoginVo
      */
     @ApiOperation("登录(用户名,密码)")
+    @IpSave(saveName = "用户登录",saveParams = true)
     @PostMapping("/password")
     public ResponseJson<UserLoginVo> passwordLogin(LoginPasswordDto loginPasswordDto) {
         return loginService.passwordLogin(loginPasswordDto);
@@ -77,6 +79,7 @@ public class LoginApi {
      *                         }
      */
     @ApiOperation("微信授权登录(小程序)")
+    @IpSave(saveName = "微信授权登录(小程序)",saveParams = false)
     @PostMapping("/auth/applets")
     public ResponseJson<UserLoginVo> appletsAuthorization(AuthAppletsDto authAppletsDto, @RequestHeader HttpHeaders headers) {
         String code = authAppletsDto.getCode();
@@ -118,6 +121,7 @@ public class LoginApi {
         @ApiImplicitParam(required = true, name = "state", value = "安全认证key"),
         @ApiImplicitParam(required = false, name = "mode", value = "1:静默授权,2:用户手动授权")
     })
+    @IpSave(saveName = "微信公众号授权登录(www)",saveParams = false)
     @GetMapping("/auth/website")
     public ResponseJson<UserLoginVo> websiteAuthorization(String code, String state, Integer mode, @RequestHeader HttpHeaders headers) {
         return loginService.websiteAuthorization(code, state, mode, headers);

+ 3 - 0
src/main/java/com/caimei365/user/controller/RegisterApi.java

@@ -1,6 +1,7 @@
 package com.caimei365.user.controller;
 
 import com.caimei365.user.idempotent.Idempotent;
+import com.caimei365.user.idempotent.IpSave;
 import com.caimei365.user.model.ResponseJson;
 import com.caimei365.user.model.dto.*;
 import com.caimei365.user.model.vo.ClubTemporaryVo;
@@ -37,6 +38,7 @@ public class RegisterApi {
      */
     @ApiOperation("检查手机号是否可以注册")
     @ApiImplicitParam(required = true, name = "bindMobile", value = "手机号或邮箱")
+    @IpSave(saveName = "检查手机号是否可以注册",saveParams = true)
     @GetMapping("/check")
     public ResponseJson registerCheck(String bindMobile) {
         return registerService.registerCheck(bindMobile);
@@ -63,6 +65,7 @@ public class RegisterApi {
      */
     @ApiOperation("注册普通机构")
     @Idempotent(prefix = "idempotent_club", keys = {"#clubRegisterDto"}, expire = 5)
+    @IpSave(saveName = "注册普通机构",saveParams = true)
     @PostMapping("/club")
     public ResponseJson clubRegister(ClubRegisterDto clubRegisterDto, @RequestHeader HttpHeaders headers) {
         return registerService.clubRegister(clubRegisterDto, headers);

+ 6 - 0
src/main/java/com/caimei365/user/feign/ToolsFeign.java

@@ -22,4 +22,10 @@ public interface ToolsFeign {
     @PostMapping("/tools/sms/send")
     String getSendSms(@RequestParam Integer type, @RequestParam String mobile, @RequestParam String content);
 
+    /**
+     * 请求发消息
+     */
+    @PostMapping("/tools/mq/send")
+    String sendCommonMessage(@RequestParam String topic, @RequestParam String content, @RequestParam String tag, @RequestParam Integer sort, @RequestParam Integer async, @RequestParam Integer oneway, @RequestParam Integer delay);
+
 }

+ 16 - 0
src/main/java/com/caimei365/user/idempotent/IpSave.java

@@ -0,0 +1,16 @@
+package com.caimei365.user.idempotent;
+
+import java.lang.annotation.*;
+
+/**
+ * @author Administrator
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface IpSave {
+
+    String saveName();
+
+    boolean saveParams();
+}

+ 103 - 0
src/main/java/com/caimei365/user/idempotent/IpSaveAspect.java

@@ -0,0 +1,103 @@
+package com.caimei365.user.idempotent;
+
+
+import com.caimei365.user.feign.ToolsFeign;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+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.stereotype.Component;
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Method;
+
+
+/**
+ *
+ */
+@Slf4j
+@Aspect
+@Component
+public class IpSaveAspect {
+
+    @Resource
+    private ToolsFeign toolsFeign;
+
+    /**
+     * 切入点,根据自定义IpSave实际路径进行调整
+     */
+    @Pointcut("@annotation(com.caimei365.user.idempotent.IpSave)")
+    public void executeIdempotent() {
+    }
+
+    @Around("executeIdempotent()")
+    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
+        //获取方法对象
+        Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
+        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
+        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes;
+        HttpServletRequest request = servletRequestAttributes.getRequest();
+        // ip
+        String unknown = "unknown";
+        String ip = "";
+        ip = request.getHeader("x-forwarded-for");
+        if (StringUtils.isBlank(ip)) {
+            ip = request.getHeader("X-Real-IP");
+        }
+        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();
+        }
+        // 接口路径
+        String requestURI = request.getRequestURI();
+        //获取自定义注解
+        IpSave ipSave = method.getAnnotation(IpSave.class);
+        // 访问名 注解的值
+        String s = ipSave.saveName();
+        // 是否存储发送参数
+        boolean sp = ipSave.saveParams();
+        // 接口真实发送参数
+        String queryString = "";
+        if (sp) {
+            queryString = request.getQueryString();
+        }
+        String mes = "";
+        if (StringUtils.isNotBlank(ip)) {
+            mes += ip + "¥";
+        } else {
+            mes = "¥";
+        }
+        if (StringUtils.isNotBlank(requestURI)) {
+            mes += requestURI + "¥";
+        } else {
+            mes += "¥";
+        }
+        if (StringUtils.isNotBlank(queryString)) {
+            mes += queryString + "¥";
+        } else {
+            mes += "¥";
+        }
+        if (StringUtils.isNotBlank(s)) {
+            mes += s;
+        }
+        //异步给mq存
+        toolsFeign.sendCommonMessage("IpSave", mes, null, 1, 1, null, null);
+
+        return joinPoint.proceed();
+    }
+}
+