Commit 860b0301b7bf2c9912d6337b0c9dfaad6e3c4902

Authored by xingyu
1 parent fffe3008

refactor: captcha-plus

yudao-dependencies/pom.xml
@@ -41,7 +41,7 @@ @@ -41,7 +41,7 @@
41 <!-- Bpm 工作流相关 --> 41 <!-- Bpm 工作流相关 -->
42 <flowable.version>6.8.0</flowable.version> 42 <flowable.version>6.8.0</flowable.version>
43 <!-- 工具类相关 --> 43 <!-- 工具类相关 -->
44 - <captcha-plus.version>0.0.1</captcha-plus.version> 44 + <captcha-plus.version>1.0.0</captcha-plus.version>
45 <jsoup.version>1.15.3</jsoup.version> 45 <jsoup.version>1.15.3</jsoup.version>
46 <lombok.version>1.18.24</lombok.version> 46 <lombok.version>1.18.24</lombok.version>
47 <mapstruct.version>1.5.3.Final</mapstruct.version> 47 <mapstruct.version>1.5.3.Final</mapstruct.version>
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/captcha/CaptchaController.java
1 package cn.iocoder.yudao.module.system.controller.admin.captcha; 1 package cn.iocoder.yudao.module.system.controller.admin.captcha;
2 2
  3 +import cn.hutool.core.util.StrUtil;
  4 +import cn.hutool.extra.servlet.ServletUtil;
3 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; 5 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
4 import com.anji.captcha.model.common.ResponseModel; 6 import com.anji.captcha.model.common.ResponseModel;
5 import com.anji.captcha.model.vo.CaptchaVO; 7 import com.anji.captcha.model.vo.CaptchaVO;
  8 +import com.anji.captcha.service.CaptchaService;
6 import io.swagger.annotations.Api; 9 import io.swagger.annotations.Api;
7 import io.swagger.annotations.ApiOperation; 10 import io.swagger.annotations.ApiOperation;
8 import org.springframework.web.bind.annotation.PostMapping; 11 import org.springframework.web.bind.annotation.PostMapping;
@@ -10,28 +13,31 @@ import org.springframework.web.bind.annotation.RequestBody; @@ -10,28 +13,31 @@ import org.springframework.web.bind.annotation.RequestBody;
10 import org.springframework.web.bind.annotation.RequestMapping; 13 import org.springframework.web.bind.annotation.RequestMapping;
11 import org.springframework.web.bind.annotation.RestController; 14 import org.springframework.web.bind.annotation.RestController;
12 15
  16 +import javax.annotation.Resource;
13 import javax.annotation.security.PermitAll; 17 import javax.annotation.security.PermitAll;
14 import javax.servlet.http.HttpServletRequest; 18 import javax.servlet.http.HttpServletRequest;
15 19
16 /** 20 /**
17 * 验证码 21 * 验证码
18 * 22 *
19 - * 问题:为什么不直接使用 anji 提供的 CaptchaController,而要另外继承?  
20 - * 回答:管理使用 /admin-api/* 作为前缀,所以需要继承!  
21 - *  
22 * @author 芋道源码 23 * @author 芋道源码
23 */ 24 */
24 @Api(tags = "管理后台 - 验证码") 25 @Api(tags = "管理后台 - 验证码")
25 @RestController("adminCaptchaController") 26 @RestController("adminCaptchaController")
26 @RequestMapping("/system/captcha") 27 @RequestMapping("/system/captcha")
27 -public class CaptchaController extends com.anji.captcha.controller.CaptchaController { 28 +public class CaptchaController {
  29 +
  30 + @Resource
  31 + private CaptchaService captchaService;
28 32
29 @PostMapping({"/get"}) 33 @PostMapping({"/get"})
30 @ApiOperation("获得验证码") 34 @ApiOperation("获得验证码")
31 @PermitAll 35 @PermitAll
32 @OperateLog(enable = false) // 避免 Post 请求被记录操作日志 36 @OperateLog(enable = false) // 避免 Post 请求被记录操作日志
33 public ResponseModel get(@RequestBody CaptchaVO data, HttpServletRequest request) { 37 public ResponseModel get(@RequestBody CaptchaVO data, HttpServletRequest request) {
34 - return super.get(data, request); 38 + assert request.getRemoteHost() != null;
  39 + data.setBrowserInfo(getRemoteId(request));
  40 + return captchaService.get(data);
35 } 41 }
36 42
37 @PostMapping("/check") 43 @PostMapping("/check")
@@ -39,7 +45,17 @@ public class CaptchaController extends com.anji.captcha.controller.CaptchaContro @@ -39,7 +45,17 @@ public class CaptchaController extends com.anji.captcha.controller.CaptchaContro
39 @PermitAll 45 @PermitAll
40 @OperateLog(enable = false) // 避免 Post 请求被记录操作日志 46 @OperateLog(enable = false) // 避免 Post 请求被记录操作日志
41 public ResponseModel check(@RequestBody CaptchaVO data, HttpServletRequest request) { 47 public ResponseModel check(@RequestBody CaptchaVO data, HttpServletRequest request) {
42 - return super.check(data, request); 48 + data.setBrowserInfo(getRemoteId(request));
  49 + return captchaService.check(data);
  50 + }
  51 +
  52 + public static String getRemoteId(HttpServletRequest request) {
  53 + String ip = ServletUtil.getClientIP(request);
  54 + String ua = request.getHeader("user-agent");
  55 + if (StrUtil.isNotBlank(ip)) {
  56 + return ip + ua;
  57 + }
  58 + return request.getRemoteAddr() + ua;
43 } 59 }
44 60
45 } 61 }