Explorar o código

fix 图形验证码短信服务集成

classic_blue hai 1 mes
pai
achega
a5448d3f01

+ 0 - 5
edu-travel-common/edu-travel-common-cache/src/main/java/edu/travel/cache/aspects/CacheAspects.java

@@ -26,8 +26,6 @@ public class CacheAspects {
     @Pointcut("@annotation(edu.travel.cache.annotation.ClearAndReloadCache)")
     public void cachePointcut() {}
 
-
-
     @Around("cachePointcut()")
     public Object cacheAround(ProceedingJoinPoint joinPoint) throws Throwable {
         Signature signature = joinPoint.getSignature();
@@ -65,9 +63,6 @@ public class CacheAspects {
         return result;
     }
 
-
-
-
     private Set getKeys(String pattern) {
         return redisTemplate.keys("*"+pattern+"*");
     }

+ 3 - 0
edu-travel-oauth/src/main/java/edu/travel/OauthServerApplication.java

@@ -2,9 +2,11 @@ package edu.travel;
 
 import edu.travel.cache.annotation.EnableRedis;
 import edu.travel.cache.annotation.EnableRedisCache;
+import edu.travel.config.SmsSwitch;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 
 /**
@@ -15,6 +17,7 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 @EnableDiscoveryClient
 @MapperScan("edu.travel.mapper")
 @EnableRedisCache
+@EnableConfigurationProperties(SmsSwitch.class)
 public class OauthServerApplication
 {
     public static void main( String[] args )

+ 23 - 0
edu-travel-oauth/src/main/java/edu/travel/dto/CheckImageDto.java

@@ -0,0 +1,23 @@
+package edu.travel.dto;
+import lombok.Data;
+
+@Data
+public class CheckImageDto {
+    /**
+     * 验证码标识
+     */
+    private String uuid;
+    /**
+     * 验证码
+     */
+    private String code;
+    /**
+     * 手机号
+     */
+    private String phoneNumber;
+
+    /**
+     * 地区编号
+     */
+    private String countryCode;
+}

+ 6 - 0
edu-travel-oauth/src/main/java/edu/travel/entity/EduTenant.java

@@ -57,6 +57,12 @@ public class EduTenant extends BaseEntity {
     private String tenantPhone;
 
     /**
+     * 密码
+     */
+    @TableField(value = "password")
+    private String password;
+
+    /**
      * 地区区号
      */
     @TableField(value = "tenant_area")

+ 84 - 0
edu-travel-oauth/src/main/java/edu/travel/web/IndexController.java

@@ -0,0 +1,84 @@
+package edu.travel.web;
+
+import cn.hutool.captcha.CaptchaUtil;
+import cn.hutool.captcha.CircleCaptcha;
+import edu.travel.dto.CheckImageDto;
+import edu.travel.resp.BaseResponse;
+import edu.travel.resp.PageResponse;
+import edu.travel.utils.SMSUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.io.IOException;
+import java.util.Random;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * IndexController 类。
+ * <p>
+ * 描述:登录页相关接口
+ *
+ * @author huangwenwen
+ * @date 2025/2/10
+ */
+
+@RestController
+@RequestMapping("/oauth")
+public class IndexController {
+
+    @Autowired
+    private SMSUtils smsUtils;
+    @Autowired
+    private RedisTemplate redisTemplate;
+
+    /**
+     * 获取图形验证码
+     * @param session
+     * @param response
+     * @throws IOException
+     */
+    @GetMapping("/createImageCode")
+    public void getCode(HttpSession session, HttpServletResponse response,String phoneNumber) throws IOException {
+
+        CircleCaptcha captcha = CaptchaUtil.createCircleCaptcha(200, 100, 4, 5);
+
+        String code = captcha.getCode();
+
+        redisTemplate.opsForValue().set(phoneNumber+"_image_code", code, 5, TimeUnit.MINUTES);
+
+        session.setAttribute("code",code);
+
+        captcha.write(response.getOutputStream());
+
+    }
+
+    /**
+     * 校验图形码,发送短信
+     */
+
+    @GetMapping("/verifyAndSendSms")
+    public BaseResponse verifyAndSendSms(CheckImageDto checkImageDto){
+        if (StringUtils.isBlank(checkImageDto.getPhoneNumber())|| StringUtils.isBlank(checkImageDto.getCode())){
+            return PageResponse.out(500, "手机号或验证码为空");
+        }
+        // 校验图形验证码
+        String imageCode = (String) redisTemplate.opsForValue().get(checkImageDto.getPhoneNumber() + "_image_code");
+        if (StringUtils.isBlank(imageCode)) return PageResponse.out(500, "验证码已失效");
+        if (!checkImageDto.getCode().equals(imageCode)) return PageResponse.out(500, "验证码错误");
+        //发送短信
+        Object o = redisTemplate.opsForValue().get(checkImageDto.getPhoneNumber() + "_user_sms");
+        if (o!=null) return PageResponse.out(500, "验证码已发送,请一分钟后重试");
+        //短信码
+        String smsCode = String.valueOf(new Random().nextInt(9000) + 1000);
+        redisTemplate.opsForValue().set(checkImageDto.getPhoneNumber() + "_user_sms", smsCode, 1, TimeUnit.MINUTES);
+        smsUtils.sendMsg(checkImageDto.getCountryCode(), checkImageDto.getPhoneNumber(), smsCode);
+        return PageResponse.out(200, "发送成功");
+    }
+
+}

+ 3 - 0
edu-travel-oauth/src/main/resources/bootstrap-dev.yml

@@ -30,4 +30,7 @@ spring:
             refresh: true
           - data-id: sentinel_oauth.yaml
             group: DEFAULT_GROUP
+            refresh: true
+          - data-id: sms-config-dev.yaml
+            group: DEFAULT_GROUP
             refresh: true

+ 6 - 0
edu-travel-service/edu-travel-service-tenement/src/main/java/edu/travel/tenant/entity/EduTenant.java

@@ -53,6 +53,12 @@ public class EduTenant extends BaseEntity {
     private String tenantPhone;
 
     /**
+     * 密码
+     */
+    @TableField(value = "password")
+    private String password;
+
+    /**
      * 地区区号
      */
     @TableField(value = "tenant_area")

+ 5 - 0
edu-travel-service/edu-travel-service-tenement/src/main/java/edu/travel/tenant/web/TenantController.java

@@ -59,4 +59,9 @@ public class TenantController  extends BaseController<EduTenant> {
         return PageResponse.out(200,"success",tenant);
     }
 
+//    @GetMapping("/getMenuList")
+//    public BaseResponse getMenuList() {
+//        List<SysRole> menuList = tenantService.getMenuList();
+//        return PageResponse.out(200,"success",menuList);
+//    }
 }