ソースを参照

feat: 增加短信验证功能

ChenSiTong 6 年 前
コミット
774d68728e
25 ファイル変更178 行追加96 行削除
  1. 25 33
      pom.xml
  2. 2 0
      src/main/java/nju/seec/helper/HelperApplication.java
  3. 1 2
      src/main/java/nju/seec/helper/config/properties/MailProperties.java
  4. 0 2
      src/main/java/nju/seec/helper/config/properties/OssProperties.java
  5. 16 0
      src/main/java/nju/seec/helper/config/properties/SmsProperties.java
  6. 1 1
      src/main/java/nju/seec/helper/controller/CourseController.java
  7. 4 4
      src/main/java/nju/seec/helper/controller/SlideController.java
  8. 3 7
      src/main/java/nju/seec/helper/controller/UserController.java
  9. 1 1
      src/main/java/nju/seec/helper/dto/ModifyCourseDTO.java
  10. 1 1
      src/main/java/nju/seec/helper/dto/ModifySlideDTO.java
  11. 1 1
      src/main/java/nju/seec/helper/dto/ModifyUserDTO.java
  12. 2 2
      src/main/java/nju/seec/helper/dto/SlideStateDTO.java
  13. 0 20
      src/main/java/nju/seec/helper/dto/TopCommentDTO.java
  14. 1 1
      src/main/java/nju/seec/helper/service/CourseService.java
  15. 4 4
      src/main/java/nju/seec/helper/service/SlideService.java
  16. 1 1
      src/main/java/nju/seec/helper/service/UserService.java
  17. 9 3
      src/main/java/nju/seec/helper/service/impl/CodeServiceImpl.java
  18. 1 1
      src/main/java/nju/seec/helper/service/impl/CourseServiceImpl.java
  19. 5 5
      src/main/java/nju/seec/helper/service/impl/SlideServiceImpl.java
  20. 7 1
      src/main/java/nju/seec/helper/service/impl/UserServiceImpl.java
  21. 1 0
      src/main/java/nju/seec/helper/util/Consts.java
  22. 18 0
      src/main/java/nju/seec/helper/util/JsonUtils.java
  23. 2 3
      src/main/java/nju/seec/helper/util/MailUtils.java
  24. 63 0
      src/main/java/nju/seec/helper/util/SmsUtils.java
  25. 9 3
      src/main/resources/application-dev.yml

+ 25 - 33
pom.xml

@@ -42,21 +42,6 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.apache.pdfbox</groupId>
-            <artifactId>pdfbox</artifactId>
-            <version>2.0.18</version>
-        </dependency>
-        <dependency>
-            <groupId>com.aliyun.oss</groupId>
-            <artifactId>aliyun-sdk-oss</artifactId>
-            <version>3.8.1</version>
-        </dependency>
-        <dependency>
-            <groupId>com.google.guava</groupId>
-            <artifactId>guava</artifactId>
-            <version>28.1-jre</version>
-        </dependency>
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
@@ -84,24 +69,31 @@
             </exclusions>
         </dependency>
 
-        <!--        <dependency>-->
-        <!--            <groupId>io.springfox</groupId>-->
-        <!--            <artifactId>springfox-swagger2</artifactId>-->
-        <!--            <version>${swagger.version}</version>-->
-        <!--        </dependency>-->
-        <!--        <dependency>-->
-        <!--            <groupId>io.springfox</groupId>-->
-        <!--            <artifactId>springfox-swagger-ui</artifactId>-->
-        <!--            <version>${swagger.version}</version>-->
-        <!--        </dependency>-->
-
-        <!-- 开发阶段用于假数据生成 -->
-        <!-- https://mvnrepository.com/artifact/com.github.javafaker/javafaker -->
-<!--        <dependency>-->
-<!--            <groupId>com.github.javafaker</groupId>-->
-<!--            <artifactId>javafaker</artifactId>-->
-<!--            <version>1.0.1</version>-->
-<!--        </dependency>-->
+        <dependency>
+            <groupId>org.apache.pdfbox</groupId>
+            <artifactId>pdfbox</artifactId>
+            <version>2.0.18</version>
+        </dependency>
+        <dependency>
+            <groupId>com.aliyun.oss</groupId>
+            <artifactId>aliyun-sdk-oss</artifactId>
+            <version>3.8.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-core</artifactId>
+            <version>4.0.3</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <version>28.1-jre</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.8.6</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 2 - 0
src/main/java/nju/seec/helper/HelperApplication.java

@@ -2,11 +2,13 @@ package nju.seec.helper;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 /**
  * @author cst
  */
+@ConfigurationPropertiesScan("nju.seec.helper.config.properties")
 @EnableTransactionManagement
 @SpringBootApplication
 public class HelperApplication {

+ 1 - 2
src/main/java/nju/seec/helper/config/properties/MailProperties.java

@@ -2,14 +2,13 @@ package nju.seec.helper.config.properties;
 
 import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
 
 /**
  * @author cst
  */
 @Data
-@Component
 @ConfigurationProperties("helper.mail")
 public class MailProperties {
     private String from;
+    private String subject;
 }

+ 0 - 2
src/main/java/nju/seec/helper/config/properties/OssProperties.java

@@ -2,13 +2,11 @@ package nju.seec.helper.config.properties;
 
 import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
 
 /**
  * @author cst
  */
 @Data
-@Component
 @ConfigurationProperties("aliyun.oss")
 public class OssProperties {
     private String endpoint;

+ 16 - 0
src/main/java/nju/seec/helper/config/properties/SmsProperties.java

@@ -0,0 +1,16 @@
+package nju.seec.helper.config.properties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * @author cst
+ */
+@Data
+@ConfigurationProperties("aliyun.sms")
+public class SmsProperties {
+    private String accessKeyId;
+    private String accessSecret;
+    private String signName;
+    private String templateCode;
+}

+ 1 - 1
src/main/java/nju/seec/helper/controller/CourseController.java

@@ -5,7 +5,7 @@ import nju.seec.helper.controller.response.PageResponse;
 import nju.seec.helper.dto.ChooseDTO;
 import nju.seec.helper.dto.CourseDTO;
 import nju.seec.helper.dto.LoginUser;
-import nju.seec.helper.dto.modify.ModifyCourseDTO;
+import nju.seec.helper.dto.ModifyCourseDTO;
 import nju.seec.helper.service.CourseService;
 import nju.seec.helper.util.enums.UserType;
 import nju.seec.helper.vo.CourseVO;

+ 4 - 4
src/main/java/nju/seec/helper/controller/SlideController.java

@@ -3,9 +3,9 @@ package nju.seec.helper.controller;
 import nju.seec.helper.aspect.auth.Auth;
 import nju.seec.helper.controller.response.PageResponse;
 import nju.seec.helper.dto.LoginUser;
+import nju.seec.helper.dto.ModifySlideDTO;
 import nju.seec.helper.dto.SlideDTO;
-import nju.seec.helper.dto.modify.ModifySlideDTO;
-import nju.seec.helper.dto.modify.ModifySlideStateDTO;
+import nju.seec.helper.dto.SlideStateDTO;
 import nju.seec.helper.service.SlideService;
 import nju.seec.helper.util.enums.UserType;
 import nju.seec.helper.vo.SlideVO;
@@ -57,8 +57,8 @@ public class SlideController {
     @Auth(roles = UserType.TEACHER, message = "修改幻灯片状态")
     @PutMapping("/state")
     public void modifySlideState(LoginUser user,
-                                 @Valid @RequestBody ModifySlideStateDTO modifySlideStateDTO) {
-        slideService.modifySlideState(user, modifySlideStateDTO);
+                                 @Valid @RequestBody SlideStateDTO slideStateDTO) {
+        slideService.modifySlideState(user, slideStateDTO);
     }
 
     /**

+ 3 - 7
src/main/java/nju/seec/helper/controller/UserController.java

@@ -1,11 +1,7 @@
 package nju.seec.helper.controller;
 
 import nju.seec.helper.aspect.auth.Auth;
-import nju.seec.helper.dto.LoginDTO;
-import nju.seec.helper.dto.LoginUser;
-import nju.seec.helper.dto.RegisterDTO;
-import nju.seec.helper.dto.ResetPasswordDTO;
-import nju.seec.helper.dto.modify.ModifyUserDTO;
+import nju.seec.helper.dto.*;
 import nju.seec.helper.service.UserService;
 import nju.seec.helper.util.Consts;
 import nju.seec.helper.util.enums.UserType;
@@ -51,8 +47,8 @@ public class UserController {
                 .setType(userVO.getType());
 
         session.setAttribute(Consts.SESSION_USER_NAME, user);
-        // 20分钟有效期
-        session.setMaxInactiveInterval(1200);
+        // 3小时有效期
+        session.setMaxInactiveInterval(3 * 60 * 60);
         return userVO;
     }
 

+ 1 - 1
src/main/java/nju/seec/helper/dto/modify/ModifyCourseDTO.java → src/main/java/nju/seec/helper/dto/ModifyCourseDTO.java

@@ -1,4 +1,4 @@
-package nju.seec.helper.dto.modify;
+package nju.seec.helper.dto;
 
 import lombok.Data;
 

+ 1 - 1
src/main/java/nju/seec/helper/dto/modify/ModifySlideDTO.java → src/main/java/nju/seec/helper/dto/ModifySlideDTO.java

@@ -1,4 +1,4 @@
-package nju.seec.helper.dto.modify;
+package nju.seec.helper.dto;
 
 import lombok.Data;
 

+ 1 - 1
src/main/java/nju/seec/helper/dto/modify/ModifyUserDTO.java → src/main/java/nju/seec/helper/dto/ModifyUserDTO.java

@@ -1,4 +1,4 @@
-package nju.seec.helper.dto.modify;
+package nju.seec.helper.dto;
 
 import lombok.Data;
 import org.hibernate.validator.constraints.Length;

+ 2 - 2
src/main/java/nju/seec/helper/dto/modify/ModifySlideStateDTO.java → src/main/java/nju/seec/helper/dto/SlideStateDTO.java

@@ -1,4 +1,4 @@
-package nju.seec.helper.dto.modify;
+package nju.seec.helper.dto;
 
 import lombok.Data;
 import nju.seec.helper.util.enums.SlideState;
@@ -9,7 +9,7 @@ import javax.validation.constraints.NotNull;
  * @author cst
  */
 @Data
-public class ModifySlideStateDTO {
+public class SlideStateDTO {
     @NotNull
     private Integer id;
     @NotNull

+ 0 - 20
src/main/java/nju/seec/helper/dto/TopCommentDTO.java

@@ -1,20 +0,0 @@
-package nju.seec.helper.dto;
-
-import lombok.Data;
-
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
-import java.util.List;
-
-/**
- * @author cst
- */
-@Data
-public class TopCommentDTO {
-    @NotNull
-    private Integer slideId;
-    @NotNull
-    private Integer pageNumber;
-    @NotEmpty
-    private List<Integer> commentIds;
-}

+ 1 - 1
src/main/java/nju/seec/helper/service/CourseService.java

@@ -3,7 +3,7 @@ package nju.seec.helper.service;
 import nju.seec.helper.dto.ChooseDTO;
 import nju.seec.helper.dto.CourseDTO;
 import nju.seec.helper.dto.LoginUser;
-import nju.seec.helper.dto.modify.ModifyCourseDTO;
+import nju.seec.helper.dto.ModifyCourseDTO;
 import nju.seec.helper.vo.CourseVO;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;

+ 4 - 4
src/main/java/nju/seec/helper/service/SlideService.java

@@ -1,9 +1,9 @@
 package nju.seec.helper.service;
 
 import nju.seec.helper.dto.LoginUser;
+import nju.seec.helper.dto.ModifySlideDTO;
 import nju.seec.helper.dto.SlideDTO;
-import nju.seec.helper.dto.modify.ModifySlideDTO;
-import nju.seec.helper.dto.modify.ModifySlideStateDTO;
+import nju.seec.helper.dto.SlideStateDTO;
 import nju.seec.helper.vo.SlideVO;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -34,9 +34,9 @@ public interface SlideService {
      * 修改幻灯片状态
      *
      * @param user
-     * @param modifySlideStateDTO
+     * @param slideStateDTO
      */
-    void modifySlideState(LoginUser user, ModifySlideStateDTO modifySlideStateDTO);
+    void modifySlideState(LoginUser user, SlideStateDTO slideStateDTO);
 
     /**
      * 删除幻灯片(伪删除)

+ 1 - 1
src/main/java/nju/seec/helper/service/UserService.java

@@ -1,9 +1,9 @@
 package nju.seec.helper.service;
 
 import nju.seec.helper.dto.LoginUser;
+import nju.seec.helper.dto.ModifyUserDTO;
 import nju.seec.helper.dto.RegisterDTO;
 import nju.seec.helper.dto.ResetPasswordDTO;
-import nju.seec.helper.dto.modify.ModifyUserDTO;
 import nju.seec.helper.vo.UserVO;
 
 /**

+ 9 - 3
src/main/java/nju/seec/helper/service/impl/CodeServiceImpl.java

@@ -4,6 +4,7 @@ import nju.seec.helper.service.CodeService;
 import nju.seec.helper.util.CacheUtils;
 import nju.seec.helper.util.Consts;
 import nju.seec.helper.util.MailUtils;
+import nju.seec.helper.util.SmsUtils;
 import org.springframework.stereotype.Service;
 
 import java.util.Random;
@@ -15,19 +16,22 @@ import java.util.concurrent.TimeUnit;
 @Service
 public class CodeServiceImpl implements CodeService {
     private static final int MAIL_CODE_LIVING_MINUTES = 5;
+    private static final int PHONE_CODE_LIVING_MINUTES = 5;
 
     private final MailUtils mailUtils;
+    private final SmsUtils smsUtils;
     private final CacheUtils cacheUtils;
 
-    public CodeServiceImpl(MailUtils mailUtils, CacheUtils cacheUtils) {
+    public CodeServiceImpl(MailUtils mailUtils, SmsUtils smsUtils, CacheUtils cacheUtils) {
         this.mailUtils = mailUtils;
+        this.smsUtils = smsUtils;
         this.cacheUtils = cacheUtils;
     }
 
     @Override
     public void sendEmailCode(String email) {
         String code = getSixBitsCode();
-        mailUtils.sendSimpleMailMessage("【南京大学】", String.format("您的验证码:%s,该验证码%d分钟内有效,请勿泄漏于他人!", code, MAIL_CODE_LIVING_MINUTES), email);
+        mailUtils.sendSimpleMailMessage(String.format("您的验证码:%s,%d分钟内有效,请勿泄漏于他人!", code, MAIL_CODE_LIVING_MINUTES), email);
         cacheUtils.set(Consts.EMAIL_CACHE_NAME, email, code, MAIL_CODE_LIVING_MINUTES, TimeUnit.MINUTES);
     }
 
@@ -37,6 +41,8 @@ public class CodeServiceImpl implements CodeService {
 
     @Override
     public void sendPhoneCode(String phone) {
-
+        String code = getSixBitsCode();
+        smsUtils.sendSmsCode(phone, code);
+        cacheUtils.set(Consts.PHONE_CACHE_NAME, phone, code, PHONE_CODE_LIVING_MINUTES, TimeUnit.MINUTES);
     }
 }

+ 1 - 1
src/main/java/nju/seec/helper/service/impl/CourseServiceImpl.java

@@ -5,7 +5,7 @@ import nju.seec.helper.dao.CourseDAO;
 import nju.seec.helper.dto.ChooseDTO;
 import nju.seec.helper.dto.CourseDTO;
 import nju.seec.helper.dto.LoginUser;
-import nju.seec.helper.dto.modify.ModifyCourseDTO;
+import nju.seec.helper.dto.ModifyCourseDTO;
 import nju.seec.helper.entity.Choose;
 import nju.seec.helper.entity.Course;
 import nju.seec.helper.service.AuthUtil;

+ 5 - 5
src/main/java/nju/seec/helper/service/impl/SlideServiceImpl.java

@@ -7,9 +7,9 @@ import nju.seec.helper.dao.ChooseDAO;
 import nju.seec.helper.dao.CourseDAO;
 import nju.seec.helper.dao.SlideDAO;
 import nju.seec.helper.dto.LoginUser;
+import nju.seec.helper.dto.ModifySlideDTO;
 import nju.seec.helper.dto.SlideDTO;
-import nju.seec.helper.dto.modify.ModifySlideDTO;
-import nju.seec.helper.dto.modify.ModifySlideStateDTO;
+import nju.seec.helper.dto.SlideStateDTO;
 import nju.seec.helper.entity.Course;
 import nju.seec.helper.entity.Slide;
 import nju.seec.helper.service.AuthUtil;
@@ -104,11 +104,11 @@ public class SlideServiceImpl implements SlideService {
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void modifySlideState(LoginUser user, ModifySlideStateDTO modifySlideStateDTO) {
-        Slide slide = slideDAO.findSlideById(modifySlideStateDTO.getId());
+    public void modifySlideState(LoginUser user, SlideStateDTO slideStateDTO) {
+        Slide slide = slideDAO.findSlideById(slideStateDTO.getId());
         AuthUtil.checkDataAuth(user.getId(), slide.getTeacherId(), "您无权修改该幻灯片状态");
 
-        slide.setState(modifySlideStateDTO.getState());
+        slide.setState(slideStateDTO.getState());
         slideDAO.save(slide);
     }
 

+ 7 - 1
src/main/java/nju/seec/helper/service/impl/UserServiceImpl.java

@@ -3,9 +3,9 @@ package nju.seec.helper.service.impl;
 import com.google.common.collect.ImmutableMap;
 import nju.seec.helper.dao.UserDAO;
 import nju.seec.helper.dto.LoginUser;
+import nju.seec.helper.dto.ModifyUserDTO;
 import nju.seec.helper.dto.RegisterDTO;
 import nju.seec.helper.dto.ResetPasswordDTO;
-import nju.seec.helper.dto.modify.ModifyUserDTO;
 import nju.seec.helper.entity.User;
 import nju.seec.helper.service.AuthUtil;
 import nju.seec.helper.service.UserService;
@@ -50,6 +50,11 @@ public class UserServiceImpl implements UserService {
             throw HelperException.of(ExceptionType.FORBIDDEN, "邮箱或验证码错误");
         }
 
+        String phone = registerDTO.getPhone();
+        if (!registerDTO.getPhoneCode().equals(cacheUtils.get(Consts.PHONE_CACHE_NAME, phone))) {
+            throw HelperException.of(ExceptionType.FORBIDDEN, "手机号或验证码错误");
+        }
+
         User user = new User()
                 .setName(registerDTO.getName())
                 .setEmail(registerDTO.getEmail())
@@ -59,6 +64,7 @@ public class UserServiceImpl implements UserService {
 
         user = userDAO.save(user);
         cacheUtils.remove(Consts.EMAIL_CACHE_NAME, email);
+        cacheUtils.remove(Consts.PHONE_CACHE_NAME, phone);
         return new UserVO(user);
     }
 

+ 1 - 0
src/main/java/nju/seec/helper/util/Consts.java

@@ -10,5 +10,6 @@ public class Consts {
     public static final String PHONE_REGEX = "1[3|4|5|7|8]\\d{9}";
 
     public static final String EMAIL_CACHE_NAME = "email";
+    public static final String PHONE_CACHE_NAME = "phone";
     public static final String SLIDE_URL_CACHE_NAME = "slide_url";
 }

+ 18 - 0
src/main/java/nju/seec/helper/util/JsonUtils.java

@@ -0,0 +1,18 @@
+package nju.seec.helper.util;
+
+import com.google.gson.Gson;
+import lombok.experimental.UtilityClass;
+
+/**
+ * @author cst
+ */
+@UtilityClass
+public class JsonUtils {
+    public String toJson(Object o) {
+        return new Gson().toJson(o);
+    }
+
+    public <T> T fromJson(String json, Class<T> classOfT) {
+        return new Gson().fromJson(json, classOfT);
+    }
+}

+ 2 - 3
src/main/java/nju/seec/helper/util/MailUtils.java

@@ -13,17 +13,16 @@ public class MailUtils {
     private final MailProperties mailProperties;
     private final JavaMailSender mailSender;
 
-    @SuppressWarnings("all")
     public MailUtils(MailProperties mailProperties, JavaMailSender mailSender) {
         this.mailProperties = mailProperties;
         this.mailSender = mailSender;
     }
 
-    public void sendSimpleMailMessage(String subject, String text, String... to) {
+    public void sendSimpleMailMessage(String text, String... to) {
         SimpleMailMessage message = new SimpleMailMessage();
         message.setFrom(mailProperties.getFrom());
         message.setTo(to);
-        message.setSubject(subject);
+        message.setSubject(mailProperties.getSubject());
         message.setText(text);
         mailSender.send(message);
     }

+ 63 - 0
src/main/java/nju/seec/helper/util/SmsUtils.java

@@ -0,0 +1,63 @@
+package nju.seec.helper.util;
+
+import com.aliyuncs.CommonRequest;
+import com.aliyuncs.CommonResponse;
+import com.aliyuncs.DefaultAcsClient;
+import com.aliyuncs.IAcsClient;
+import com.aliyuncs.exceptions.ClientException;
+import com.aliyuncs.http.MethodType;
+import com.aliyuncs.profile.DefaultProfile;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import nju.seec.helper.config.properties.SmsProperties;
+import nju.seec.helper.util.enums.ExceptionType;
+import nju.seec.helper.util.exception.HelperException;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author cst
+ */
+@Component
+@Slf4j
+public class SmsUtils {
+    private static final String OK = "ok";
+    private final SmsProperties smsProperties;
+
+    public SmsUtils(SmsProperties smsProperties) {
+        this.smsProperties = smsProperties;
+    }
+
+    public void sendSmsCode(String to, String code) {
+        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", smsProperties.getAccessKeyId(), smsProperties.getAccessSecret());
+        IAcsClient client = new DefaultAcsClient(profile);
+
+        CommonRequest request = new CommonRequest();
+        request.setMethod(MethodType.POST);
+        request.setDomain("dysmsapi.aliyuncs.com");
+        request.setVersion("2017-05-25");
+        request.setAction("SendSms");
+        request.putQueryParameter("RegionId", "cn-hangzhou");
+        request.putQueryParameter("PhoneNumbers", to);
+        request.putQueryParameter("SignName", smsProperties.getSignName());
+        request.putQueryParameter("TemplateCode", smsProperties.getTemplateCode());
+        request.putQueryParameter("TemplateParam", "{\"code\":" + code + "}");
+        try {
+            CommonResponse response = client.getCommonResponse(request);
+            SendSmsResult sendSmsResult = JsonUtils.fromJson(response.getData(), SendSmsResult.class);
+            if (!OK.equals(sendSmsResult.Code)) {
+                log.error(sendSmsResult.Message);
+                throw HelperException.of(ExceptionType.ERROR, "短信验证码发送失败");
+            }
+        } catch (ClientException e) {
+            log.error(e.getErrCode());
+        }
+    }
+
+    @Data
+    public static class SendSmsResult {
+        private String Message;
+        private String RequestId;
+        private String BizId;
+        private String Code;
+    }
+}

+ 9 - 3
src/main/resources/application-dev.yml

@@ -42,11 +42,17 @@ spring:
 aliyun:
   oss:
     endpoint: oss-cn-hangzhou.aliyuncs.com
-    access-key-id: LTAI4Fi1qmL4iuhH8t7G7r2H
-    access-key-secret: 7tJWyQqa0cMkQGaPMMvtH6c0VLiOO2
-    bucket-name: seec-helper-pdf
+    accessKeyId: LTAI4Fi1qmL4iuhH8t7G7r2H
+    accessKeySecret: 7tJWyQqa0cMkQGaPMMvtH6c0VLiOO2
+    bucketName: seec-helper-pdf
+  sms:
+    accessKeyId: LTAI4FiAXXyNfYJLweBXpKPx
+    accessSecret: IBoC7KGkZHOvxZQIfQgp98ZY48AVjW
+    signName: seeccoder
+    templateCode: SMS_181555598
 
 # 自定义数据
 helper:
   mail:
     from: ${spring.mail.username}
+    subject: seeccoder