Эх сурвалжийг харах

新增短信验证码
新增登录校验短信验证码
新增注册校验短信验证码

fangzhen 7 сар өмнө
parent
commit
de0b54283d
24 өөрчлөгдсөн 200 нэмэгдсэн , 112 устгасан
  1. 27 4
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java
  2. 11 11
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
  3. 1 0
      ruoyi-admin/src/main/resources/i18n/messages.properties
  4. 7 2
      ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java
  5. 5 0
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginByTelephoneBody.java
  6. 16 0
      ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaNullException.java
  7. 23 7
      ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java
  8. 1 1
      ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
  9. 1 0
      ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/CustomLoginAuthenticationProvider.java
  10. 51 69
      ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
  11. 22 16
      ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysRegisterService.java
  12. 0 2
      ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsByPhoneNumberServiceImpl.java
  13. 2 0
      ruoyi-generator/src/main/java/com/ruoyi/generator/domain/Community/CommunityArticle.java
  14. 3 0
      ruoyi-generator/src/main/java/com/ruoyi/generator/domain/Community/CommunityCircle.java
  15. 3 0
      ruoyi-generator/src/main/java/com/ruoyi/generator/domain/Community/CommunityClass.java
  16. 3 0
      ruoyi-generator/src/main/java/com/ruoyi/generator/domain/Community/CommunityCollection.java
  17. 3 0
      ruoyi-generator/src/main/java/com/ruoyi/generator/domain/Community/CommunityTag.java
  18. 3 0
      ruoyi-generator/src/main/java/com/ruoyi/generator/vo/CommunityArticleVo.java
  19. 3 0
      ruoyi-generator/src/main/java/com/ruoyi/generator/vo/CommunityCircleVo.java
  20. 3 0
      ruoyi-generator/src/main/java/com/ruoyi/generator/vo/CommunityCollectionArticleVo.java
  21. 3 0
      ruoyi-generator/src/main/java/com/ruoyi/generator/vo/CommunityCollectionVo.java
  22. 3 0
      ruoyi-generator/src/main/java/com/ruoyi/generator/vo/CommunityUserInfoVo.java
  23. 3 0
      ruoyi-generator/src/main/java/com/ruoyi/generator/vo/CommunityUserLikeVo.java
  24. 3 0
      ruoyi-generator/src/main/java/com/ruoyi/generator/vo/SysDictDataVo.java

+ 27 - 4
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java

@@ -1,11 +1,13 @@
 package com.ruoyi.web.controller.common;
 package com.ruoyi.web.controller.common;
 
 
 import com.google.code.kaptcha.Producer;
 import com.google.code.kaptcha.Producer;
+import com.ruoyi.common.annotation.Anonymous;
 import com.ruoyi.common.config.RuoYiConfig;
 import com.ruoyi.common.config.RuoYiConfig;
 import com.ruoyi.common.constant.CacheConstants;
 import com.ruoyi.common.constant.CacheConstants;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.sign.Base64;
 import com.ruoyi.common.utils.sign.Base64;
 import com.ruoyi.common.utils.uuid.IdUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
 import com.ruoyi.generator.util.SendSms;
 import com.ruoyi.generator.util.SendSms;
@@ -89,15 +91,36 @@ public class CaptchaController {
     }
     }
 
 
     @GetMapping("/captchaCode")
     @GetMapping("/captchaCode")
-    public AjaxResult getSmsCode(String phoneNumber) throws ExecutionException, InterruptedException {
+    @Anonymous
+    public AjaxResult getSmsCode(String phoneNumber, String smsType) throws ExecutionException, InterruptedException {
+        //校验手机号
+        boolean isPhone = StringUtils.checkPhoneNumber(phoneNumber);
+        if (!isPhone) {
+            return AjaxResult.error("手机号不正确!");
+        }
+
+        if (StringUtils.isEmpty(smsType)) {
+            return AjaxResult.error("参数异常!");
+        }
+
         //1.生成随机四位验证码
         //1.生成随机四位验证码
         Random random = new Random();
         Random random = new Random();
         int code = 1000 + random.nextInt(9000);
         int code = 1000 + random.nextInt(9000);
+        String verifyKey = "";
+        switch (smsType) {
+            case "login":
+                verifyKey = CacheConstants.SMS_LOGIN_CODE_KEY + phoneNumber;
+                break;
+            case "register":
+                verifyKey = CacheConstants.SMS_REGISTER_CODE_KEY + phoneNumber;
+                break;
+        }
+
         //2.发送验证码
         //2.发送验证码
-        SendSms.sendMsg("次元时代科技", "SMS_474845159", phoneNumber, String.valueOf(code));
+        SendSms.sendMsg("次元时代App", "SMS_474845159", phoneNumber, String.valueOf(code));
         //3.存入redis
         //3.存入redis
-        String verifyKey = CacheConstants.SMS_CODE_KEY + phoneNumber;
-        redisCache.setCacheObject(verifyKey, code, Constants.SMS_EXPIRATION, TimeUnit.MINUTES);
+
+        redisCache.setCacheObject(verifyKey, code, 120, TimeUnit.MINUTES);
         return AjaxResult.success("短信验证码发送成功!");
         return AjaxResult.success("短信验证码发送成功!");
     }
     }
 }
 }

+ 11 - 11
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java

@@ -1,23 +1,23 @@
 package com.ruoyi.web.controller.system;
 package com.ruoyi.web.controller.system;
 
 
-import java.util.List;
-import java.util.Set;
-
-import com.ruoyi.common.core.domain.model.LoginByTelephoneBody;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.entity.SysMenu;
 import com.ruoyi.common.core.domain.entity.SysMenu;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.model.LoginBody;
 import com.ruoyi.common.core.domain.model.LoginBody;
+import com.ruoyi.common.core.domain.model.LoginByTelephoneBody;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.framework.web.service.SysLoginService;
 import com.ruoyi.framework.web.service.SysLoginService;
 import com.ruoyi.framework.web.service.SysPermissionService;
 import com.ruoyi.framework.web.service.SysPermissionService;
 import com.ruoyi.system.service.ISysMenuService;
 import com.ruoyi.system.service.ISysMenuService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Set;
 
 
 /**
 /**
  * 登录验证
  * 登录验证
@@ -98,12 +98,12 @@ public class SysLoginController {
         return AjaxResult.success(menuService.buildMenus(menus));
         return AjaxResult.success(menuService.buildMenus(menus));
     }
     }
 
 
-    @PostMapping("/phonelogin")
+    @PostMapping("/phoneLogin")
     public AjaxResult phoneLogin(@RequestBody LoginByTelephoneBody loginBody){
     public AjaxResult phoneLogin(@RequestBody LoginByTelephoneBody loginBody){
 
 
         AjaxResult ajax = AjaxResult.success();
         AjaxResult ajax = AjaxResult.success();
         // 生成令牌
         // 生成令牌
-        String token = loginService.loginByTelephone(loginBody.getPhone(), loginBody.getCode(),
+        String token = loginService.loginByTelephone(loginBody.getUsername(), loginBody.getCode(),
                 loginBody.getUuid());
                 loginBody.getUuid());
         ajax.put(Constants.TOKEN, token);
         ajax.put(Constants.TOKEN, token);
         return ajax;
         return ajax;

+ 1 - 0
ruoyi-admin/src/main/resources/i18n/messages.properties

@@ -1,5 +1,6 @@
 #错误消息
 #错误消息
 not.null=* 必须填写
 not.null=* 必须填写
+user.jcaptcha.null=验证码不能为空
 user.jcaptcha.error=验证码错误
 user.jcaptcha.error=验证码错误
 user.jcaptcha.expire=验证码已失效
 user.jcaptcha.expire=验证码已失效
 user.not.exists=用户不存在/密码错误
 user.not.exists=用户不存在/密码错误

+ 7 - 2
ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java

@@ -18,9 +18,14 @@ public class CacheConstants
     public static final String CAPTCHA_CODE_KEY = "captcha_codes:";
     public static final String CAPTCHA_CODE_KEY = "captcha_codes:";
 
 
     /**
     /**
-     * 短信验证码 redis key
+     * 短信登录验证码 redis key
      */
      */
-    public static final String SMS_CODE_KEY = "sms_codes:";
+    public static final String SMS_LOGIN_CODE_KEY = "sms_login_codes:";
+
+    /**
+     * 短信登录验证码 redis key
+     */
+    public static final String SMS_REGISTER_CODE_KEY = "sms_register_codes:";
 
 
     /**
     /**
      * 参数管理 cache key
      * 参数管理 cache key

+ 5 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginByTelephoneBody.java

@@ -11,6 +11,11 @@ import lombok.NoArgsConstructor;
 public class LoginByTelephoneBody {
 public class LoginByTelephoneBody {
 
 
 
 
+    /**
+     * 用户名
+     */
+    private String username;
+
     /**
     /**
      * 手机号
      * 手机号
      */
      */

+ 16 - 0
ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaNullException.java

@@ -0,0 +1,16 @@
+package com.ruoyi.common.exception.user;
+
+/**
+ * 验证码错误异常类
+ * 
+ * @author ruoyi
+ */
+public class CaptchaNullException extends UserException
+{
+    private static final long serialVersionUID = 1L;
+
+    public CaptchaNullException()
+    {
+        super("user.jcaptcha.null", null);
+    }
+}

+ 23 - 7
ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java

@@ -1,14 +1,12 @@
 package com.ruoyi.common.utils;
 package com.ruoyi.common.utils;
 
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import org.springframework.util.AntPathMatcher;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.core.text.StrFormatter;
 import com.ruoyi.common.core.text.StrFormatter;
+import org.springframework.util.AntPathMatcher;
+
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 
 /**
 /**
  * 字符串工具类
  * 字符串工具类
@@ -681,4 +679,22 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils
         }
         }
         return sb.toString();
         return sb.toString();
     }
     }
+
+    /**
+     * 校验手机号
+     *
+     * @param phoneNumber 手机号
+     * @return 是否是手机号
+     */
+    public static boolean checkPhoneNumber(String phoneNumber) {
+        String mobileRegEx = "^1[3,4,5,6,7,8,9][0-9]{9}$";//正则表达式
+        boolean result = true;
+        Pattern pattern = Pattern.compile(mobileRegEx);//函数语法 匹配的正则表达式
+        Matcher matcher = pattern.matcher(phoneNumber);//进行匹配
+        if (!matcher.matches()) {//校验手机号格式是否正确,若是匹配成功则返回true
+            result = false;
+            System.out.println("移动手机号格式错误");
+        }
+        return result;
+    }
 }
 }

+ 1 - 1
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java

@@ -129,7 +129,7 @@ public class SecurityConfig {
                 .authorizeHttpRequests((requests) -> {
                 .authorizeHttpRequests((requests) -> {
                     permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll());
                     permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll());
                     // 对于登录login 注册register 验证码captchaImage 允许匿名访问
                     // 对于登录login 注册register 验证码captchaImage 允许匿名访问
-                    requests.antMatchers("/login", "/register", "/captchaImage").permitAll()
+                    requests.antMatchers("/login","/phoneLogin", "/register", "/captchaImage").permitAll()
                             // 静态资源,可匿名访问
                             // 静态资源,可匿名访问
                             .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                             .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                             .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**", "/websocket/**").permitAll()
                             .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**", "/websocket/**").permitAll()

+ 1 - 0
ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/CustomLoginAuthenticationProvider.java

@@ -28,6 +28,7 @@ public class CustomLoginAuthenticationProvider extends DaoAuthenticationProvider
             String password = authentication.getCredentials().toString();
             String password = authentication.getCredentials().toString();
             if (Constants.CUSTOM_LOGIN_SMS.equals(password)) {
             if (Constants.CUSTOM_LOGIN_SMS.equals(password)) {
                 //短信登录,不验证密码
                 //短信登录,不验证密码
+                System.out.println("短信登录,不验证密码");
             } else {
             } else {
                 BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
                 BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
                 if (!passwordEncoder.matches(password, userDetails.getPassword())) {
                 if (!passwordEncoder.matches(password, userDetails.getPassword())) {

+ 51 - 69
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java

@@ -1,13 +1,5 @@
 package com.ruoyi.framework.web.service;
 package com.ruoyi.framework.web.service;
 
 
-import javax.annotation.Resource;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.security.authentication.AuthenticationManager;
-import org.springframework.security.authentication.BadCredentialsException;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.Authentication;
-import org.springframework.stereotype.Component;
 import com.ruoyi.common.constant.CacheConstants;
 import com.ruoyi.common.constant.CacheConstants;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.constant.UserConstants;
@@ -15,11 +7,7 @@ import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.exception.ServiceException;
-import com.ruoyi.common.exception.user.BlackListException;
-import com.ruoyi.common.exception.user.CaptchaException;
-import com.ruoyi.common.exception.user.CaptchaExpireException;
-import com.ruoyi.common.exception.user.UserNotExistsException;
-import com.ruoyi.common.exception.user.UserPasswordNotMatchException;
+import com.ruoyi.common.exception.user.*;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.MessageUtils;
 import com.ruoyi.common.utils.MessageUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.StringUtils;
@@ -29,15 +17,21 @@ import com.ruoyi.framework.manager.factory.AsyncFactory;
 import com.ruoyi.framework.security.context.AuthenticationContextHolder;
 import com.ruoyi.framework.security.context.AuthenticationContextHolder;
 import com.ruoyi.system.service.ISysConfigService;
 import com.ruoyi.system.service.ISysConfigService;
 import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.system.service.ISysUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.authentication.BadCredentialsException;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.stereotype.Component;
 
 
 /**
 /**
  * 登录校验方法
  * 登录校验方法
- * 
+ *
  * @author ruoyi
  * @author ruoyi
  */
  */
 @Component
 @Component
-public class SysLoginService
-{
+public class SysLoginService {
     @Autowired
     @Autowired
     private TokenService tokenService;
     private TokenService tokenService;
 
 
@@ -46,7 +40,7 @@ public class SysLoginService
 
 
     @Autowired
     @Autowired
     private RedisCache redisCache;
     private RedisCache redisCache;
-    
+
     @Autowired
     @Autowired
     private ISysUserService userService;
     private ISysUserService userService;
 
 
@@ -64,43 +58,34 @@ public class SysLoginService
 
 
     /**
     /**
      * 登录验证
      * 登录验证
-     * 
+     *
      * @param username 用户名
      * @param username 用户名
      * @param password 密码
      * @param password 密码
-     * @param code 验证码
-     * @param uuid 唯一标识
+     * @param code     验证码
+     * @param uuid     唯一标识
      * @return 结果
      * @return 结果
      */
      */
-    public String login(String username, String password, String code, String uuid , boolean isCommunity)
-    {
+    public String login(String username, String password, String code, String uuid, boolean isCommunity) {
         // 验证码校验
         // 验证码校验
         validateCaptcha(username, code, uuid);
         validateCaptcha(username, code, uuid);
         // 登录前置校验
         // 登录前置校验
         loginPreCheck(username, password);
         loginPreCheck(username, password);
         // 用户验证
         // 用户验证
         Authentication authentication = null;
         Authentication authentication = null;
-        try
-        {
+        try {
             UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password);
             UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password);
             AuthenticationContextHolder.setContext(authenticationToken);
             AuthenticationContextHolder.setContext(authenticationToken);
             // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
             // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
             authentication = authenticationManager.authenticate(authenticationToken);
             authentication = authenticationManager.authenticate(authenticationToken);
-        }
-        catch (Exception e)
-        {
-            if (e instanceof BadCredentialsException)
-            {
+        } catch (Exception e) {
+            if (e instanceof BadCredentialsException) {
                 AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
                 AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
                 throw new UserPasswordNotMatchException();
                 throw new UserPasswordNotMatchException();
-            }
-            else
-            {
+            } else {
                 AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
                 AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
                 throw new ServiceException(e.getMessage());
                 throw new ServiceException(e.getMessage());
             }
             }
-        }
-        finally
-        {
+        } finally {
             AuthenticationContextHolder.clearContext();
             AuthenticationContextHolder.clearContext();
         }
         }
         AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
         AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
@@ -112,27 +97,23 @@ public class SysLoginService
 
 
     /**
     /**
      * 校验验证码
      * 校验验证码
-     * 
+     *
      * @param username 用户名
      * @param username 用户名
-     * @param code 验证码
-     * @param uuid 唯一标识
+     * @param code     验证码
+     * @param uuid     唯一标识
      * @return 结果
      * @return 结果
      */
      */
-    public void validateCaptcha(String username, String code, String uuid)
-    {
+    public void validateCaptcha(String username, String code, String uuid) {
         boolean captchaEnabled = configService.selectCaptchaEnabled();
         boolean captchaEnabled = configService.selectCaptchaEnabled();
-        if (captchaEnabled)
-        {
+        if (captchaEnabled) {
             String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, "");
             String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, "");
             String captcha = redisCache.getCacheObject(verifyKey);
             String captcha = redisCache.getCacheObject(verifyKey);
-            if (captcha == null)
-            {
+            if (captcha == null) {
                 AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
                 AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
                 throw new CaptchaExpireException();
                 throw new CaptchaExpireException();
             }
             }
             redisCache.deleteObject(verifyKey);
             redisCache.deleteObject(verifyKey);
-            if (!code.equalsIgnoreCase(captcha))
-            {
+            if (!code.equalsIgnoreCase(captcha)) {
                 AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
                 AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
                 throw new CaptchaException();
                 throw new CaptchaException();
             }
             }
@@ -141,35 +122,31 @@ public class SysLoginService
 
 
     /**
     /**
      * 登录前置校验
      * 登录前置校验
+     *
      * @param username 用户名
      * @param username 用户名
      * @param password 用户密码
      * @param password 用户密码
      */
      */
-    public void loginPreCheck(String username, String password)
-    {
+    public void loginPreCheck(String username, String password) {
         // 用户名或密码为空 错误
         // 用户名或密码为空 错误
-        if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password))
-        {
+        if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {
             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("not.null")));
             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("not.null")));
             throw new UserNotExistsException();
             throw new UserNotExistsException();
         }
         }
         // 密码如果不在指定范围内 错误
         // 密码如果不在指定范围内 错误
         if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
         if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
-                || password.length() > UserConstants.PASSWORD_MAX_LENGTH)
-        {
+                || password.length() > UserConstants.PASSWORD_MAX_LENGTH) {
             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
             throw new UserPasswordNotMatchException();
             throw new UserPasswordNotMatchException();
         }
         }
         // 用户名不在指定范围内 错误
         // 用户名不在指定范围内 错误
         if (username.length() < UserConstants.USERNAME_MIN_LENGTH
         if (username.length() < UserConstants.USERNAME_MIN_LENGTH
-                || username.length() > UserConstants.USERNAME_MAX_LENGTH)
-        {
+                || username.length() > UserConstants.USERNAME_MAX_LENGTH) {
             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
             throw new UserPasswordNotMatchException();
             throw new UserPasswordNotMatchException();
         }
         }
         // IP黑名单校验
         // IP黑名单校验
         String blackStr = configService.selectConfigByKey("sys.login.blackIPList");
         String blackStr = configService.selectConfigByKey("sys.login.blackIPList");
-        if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr()))
-        {
+        if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) {
             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("login.blocked")));
             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("login.blocked")));
             throw new BlackListException();
             throw new BlackListException();
         }
         }
@@ -180,8 +157,7 @@ public class SysLoginService
      *
      *
      * @param userId 用户ID
      * @param userId 用户ID
      */
      */
-    public void recordLoginInfo(Long userId)
-    {
+    public void recordLoginInfo(Long userId) {
         SysUser sysUser = new SysUser();
         SysUser sysUser = new SysUser();
         sysUser.setUserId(userId);
         sysUser.setUserId(userId);
         sysUser.setLoginIp(IpUtils.getIpAddr());
         sysUser.setLoginIp(IpUtils.getIpAddr());
@@ -190,7 +166,8 @@ public class SysLoginService
     }
     }
 
 
     /**
     /**
-     *   手机号验证码登录
+     * 手机号验证码登录
+     *
      * @param phone 手机号
      * @param phone 手机号
      * @param code  验证码
      * @param code  验证码
      * @param uuid  唯一标识
      * @param uuid  唯一标识
@@ -198,22 +175,29 @@ public class SysLoginService
      */
      */
     public String loginByTelephone(String phone, String code, String uuid) {
     public String loginByTelephone(String phone, String code, String uuid) {
 
 
+        if (StringUtils.isEmpty(code)) {
+            throw new CaptchaNullException();       //抛出验证码不能为空的异常
+        }
         //校验验证码
         //校验验证码
-        // 这里需要对自己的验证码进行校验 我这里就省略了校验
-
-
+        //获取缓存内的验证码
+        String verifyKey = CacheConstants.SMS_LOGIN_CODE_KEY + phone;
+        String smsCode = redisCache.getCacheObject(verifyKey).toString();
+        if (StringUtils.isEmpty(smsCode)) {
+            throw new CaptchaExpireException();     //抛出验证码失效的异常
+        }
 
 
+        if (!smsCode.equalsIgnoreCase(code)) {
+            throw new CaptchaException();       //抛出验证码错误的异常
+        }
+        //成功  删除内存的验证码
+        redisCache.deleteObject(verifyKey);
         Authentication authentication = null; // 用户验证
         Authentication authentication = null; // 用户验证
         try {
         try {
-
-
             UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(phone, Constants.CUSTOM_LOGIN_SMS);
             UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(phone, Constants.CUSTOM_LOGIN_SMS);
             AuthenticationContextHolder.setContext(authenticationToken);
             AuthenticationContextHolder.setContext(authenticationToken);
             // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
             // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
             authentication = authenticationPhoneManager.authenticate(authenticationToken);
             authentication = authenticationPhoneManager.authenticate(authenticationToken);
-
-        }
-        catch (Exception e) {
+        } catch (Exception e) {
             if (e instanceof BadCredentialsException) {
             if (e instanceof BadCredentialsException) {
                 throw new UserPasswordNotMatchException();          //抛出账号或者密码错误的异常
                 throw new UserPasswordNotMatchException();          //抛出账号或者密码错误的异常
             } else {
             } else {
@@ -226,7 +210,5 @@ public class SysLoginService
         recordLoginInfo(loginUser.getUserId());                     //修改sys_user最近登录IP和登录时间
         recordLoginInfo(loginUser.getUserId());                     //修改sys_user最近登录IP和登录时间
         // 生成token
         // 生成token
         return tokenService.createToken(loginUser);
         return tokenService.createToken(loginUser);
-
-
     }
     }
 }
 }

+ 22 - 16
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysRegisterService.java

@@ -8,6 +8,7 @@ import com.ruoyi.common.core.domain.model.RegisterBody;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.exception.user.CaptchaException;
 import com.ruoyi.common.exception.user.CaptchaException;
 import com.ruoyi.common.exception.user.CaptchaExpireException;
 import com.ruoyi.common.exception.user.CaptchaExpireException;
+import com.ruoyi.common.exception.user.CaptchaNullException;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.MessageUtils;
 import com.ruoyi.common.utils.MessageUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.SecurityUtils;
@@ -22,9 +23,6 @@ import org.apache.commons.lang3.RandomUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
 /**
 /**
  * 注册校验方法
  * 注册校验方法
  *
  *
@@ -58,6 +56,9 @@ public class SysRegisterService {
             validateCaptcha(username, registerBody.getCode(), registerBody.getUuid());
             validateCaptcha(username, registerBody.getCode(), registerBody.getUuid());
         }
         }
 
 
+        //验证短信验证码是否正确
+        validateSmsCaptcha(username, registerBody.getSmsCode());
+
         if (StringUtils.isEmpty(username)) {
         if (StringUtils.isEmpty(username)) {
             msg = "用户名不能为空";
             msg = "用户名不能为空";
         } else if (StringUtils.isEmpty(password)) {
         } else if (StringUtils.isEmpty(password)) {
@@ -71,7 +72,7 @@ public class SysRegisterService {
         } else if (!userService.checkUserNameUnique(sysUser)) {
         } else if (!userService.checkUserNameUnique(sysUser)) {
             msg = "保存用户'" + username + "'失败,注册账号已存在";
             msg = "保存用户'" + username + "'失败,注册账号已存在";
         } else {
         } else {
-            boolean result = checkPhoneNumber(username);
+            boolean result = StringUtils.checkPhoneNumber(username);
             if (!result) {
             if (!result) {
                 msg = "请用手机号进行注册!";
                 msg = "请用手机号进行注册!";
             } else {
             } else {
@@ -120,21 +121,26 @@ public class SysRegisterService {
         }
         }
     }
     }
 
 
+
     /**
     /**
-     * 校验手机号
+     * 校验验证码
      *
      *
-     * @param phoneNumber 手机号
-     * @return 是否是手机号
+     * @param username 用户名
+     * @param code     验证码
+     * @return 结果
      */
      */
-    public boolean checkPhoneNumber(String phoneNumber) {
-        String mobileRegEx = "^1[3,4,5,6,7,8,9][0-9]{9}$";//正则表达式
-        boolean result = true;
-        Pattern pattern = Pattern.compile(mobileRegEx);//函数语法 匹配的正则表达式
-        Matcher matcher = pattern.matcher(phoneNumber);//进行匹配
-        if (!matcher.matches()) {//校验手机号格式是否正确,若是匹配成功则返回true
-            result = false;
-            System.out.println("移动手机号格式错误");
+    public void validateSmsCaptcha(String username, String code) {
+        if (StringUtils.isEmpty(code)) {
+            throw new CaptchaNullException();
+        }
+        String verifyKey = CacheConstants.SMS_REGISTER_CODE_KEY + StringUtils.nvl(username, "");
+        String captcha = redisCache.getCacheObject(verifyKey).toString();
+        redisCache.deleteObject(verifyKey);
+        if (captcha == null) {
+            throw new CaptchaExpireException();
+        }
+        if (!code.equalsIgnoreCase(captcha)) {
+            throw new CaptchaException();
         }
         }
-        return result;
     }
     }
 }
 }

+ 0 - 2
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsByPhoneNumberServiceImpl.java

@@ -54,8 +54,6 @@ public class UserDetailsByPhoneNumberServiceImpl implements UserDetailsService
             throw new ServiceException(MessageUtils.message("user.blocked"));
             throw new ServiceException(MessageUtils.message("user.blocked"));
         }
         }
 
 
-        passwordService.validate(user);
-
         return createLoginUser(user);
         return createLoginUser(user);
     }
     }
 
 

+ 2 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/domain/Community/CommunityArticle.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.Data;

+ 3 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/domain/Community/CommunityCircle.java

@@ -3,6 +3,8 @@ package com.ruoyi.generator.domain.Community;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 import org.hibernate.validator.constraints.Length;
 import org.hibernate.validator.constraints.Length;
@@ -26,6 +28,7 @@ public class CommunityCircle implements Serializable {
     @NotNull(message="[唯一id]不能为空")
     @NotNull(message="[唯一id]不能为空")
     @ApiModelProperty("唯一id")
     @ApiModelProperty("唯一id")
     @TableId("id")
     @TableId("id")
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
     private Long id;
     /**
     /**
     * 圈子名称
     * 圈子名称

+ 3 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/domain/Community/CommunityClass.java

@@ -1,6 +1,8 @@
 package com.ruoyi.generator.domain.Community;
 package com.ruoyi.generator.domain.Community;
 
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 import org.hibernate.validator.constraints.Length;
 import org.hibernate.validator.constraints.Length;
@@ -23,6 +25,7 @@ public class CommunityClass implements Serializable {
     */
     */
     @NotNull(message="[唯一id]不能为空")
     @NotNull(message="[唯一id]不能为空")
     @ApiModelProperty("唯一id")
     @ApiModelProperty("唯一id")
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
     private Long id;
     /**
     /**
     * 分类名称
     * 分类名称

+ 3 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/domain/Community/CommunityCollection.java

@@ -3,6 +3,8 @@ package com.ruoyi.generator.domain.Community;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 import org.hibernate.validator.constraints.Length;
 import org.hibernate.validator.constraints.Length;
@@ -26,6 +28,7 @@ public class CommunityCollection implements Serializable {
     @NotNull(message="[唯一id]不能为空")
     @NotNull(message="[唯一id]不能为空")
     @ApiModelProperty("唯一id")
     @ApiModelProperty("唯一id")
     @TableId("id")
     @TableId("id")
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
     private Long id;
     /**
     /**
     * 用户id
     * 用户id

+ 3 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/domain/Community/CommunityTag.java

@@ -3,6 +3,8 @@ package com.ruoyi.generator.domain.Community;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 import org.hibernate.validator.constraints.Length;
 import org.hibernate.validator.constraints.Length;
@@ -27,6 +29,7 @@ public class CommunityTag implements Serializable {
     @NotNull(message="[标签id]不能为空")
     @NotNull(message="[标签id]不能为空")
     @ApiModelProperty("标签id")
     @ApiModelProperty("标签id")
     @TableId("id")
     @TableId("id")
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
     private Long id;
     /**
     /**
     * 标签名称
     * 标签名称

+ 3 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/vo/CommunityArticleVo.java

@@ -1,6 +1,8 @@
 package com.ruoyi.generator.vo;
 package com.ruoyi.generator.vo;
 
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.ruoyi.common.core.domain.BaseEntity;
 import com.ruoyi.common.core.domain.BaseEntity;
 import com.ruoyi.generator.domain.Community.CommunityArticleImages;
 import com.ruoyi.generator.domain.Community.CommunityArticleImages;
 import com.ruoyi.generator.domain.Community.CommunityTag;
 import com.ruoyi.generator.domain.Community.CommunityTag;
@@ -35,6 +37,7 @@ public class CommunityArticleVo extends BaseEntity implements Serializable {
     */
     */
     @NotNull(message="[文章id]不能为空")
     @NotNull(message="[文章id]不能为空")
     @ApiModelProperty("文章id")
     @ApiModelProperty("文章id")
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
     private Long id;
     /**
     /**
     * 创建人id
     * 创建人id

+ 3 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/vo/CommunityCircleVo.java

@@ -3,6 +3,8 @@ package com.ruoyi.generator.vo;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 import org.hibernate.validator.constraints.Length;
 import org.hibernate.validator.constraints.Length;
@@ -26,6 +28,7 @@ public class CommunityCircleVo implements Serializable {
     @NotNull(message="[唯一id]不能为空")
     @NotNull(message="[唯一id]不能为空")
     @ApiModelProperty("唯一id")
     @ApiModelProperty("唯一id")
     @TableId("id")
     @TableId("id")
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
     private Long id;
     /**
     /**
     * 圈子名称
     * 圈子名称

+ 3 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/vo/CommunityCollectionArticleVo.java

@@ -3,6 +3,8 @@ package com.ruoyi.generator.vo;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 
 
@@ -24,6 +26,7 @@ public class CommunityCollectionArticleVo implements Serializable {
     @NotNull(message="[唯一id]不能为空")
     @NotNull(message="[唯一id]不能为空")
     @ApiModelProperty("唯一id")
     @ApiModelProperty("唯一id")
     @TableId("id")
     @TableId("id")
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
     private Long id;
     /**
     /**
     * 合集id
     * 合集id

+ 3 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/vo/CommunityCollectionVo.java

@@ -3,6 +3,8 @@ package com.ruoyi.generator.vo;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 import org.hibernate.validator.constraints.Length;
 import org.hibernate.validator.constraints.Length;
@@ -26,6 +28,7 @@ public class CommunityCollectionVo implements Serializable {
     @NotNull(message="[唯一id]不能为空")
     @NotNull(message="[唯一id]不能为空")
     @ApiModelProperty("唯一id")
     @ApiModelProperty("唯一id")
     @TableId("id")
     @TableId("id")
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
     private Long id;
     /**
     /**
     * 用户id
     * 用户id

+ 3 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/vo/CommunityUserInfoVo.java

@@ -1,6 +1,8 @@
 package com.ruoyi.generator.vo;
 package com.ruoyi.generator.vo;
 
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 
 
@@ -20,6 +22,7 @@ public class CommunityUserInfoVo implements Serializable {
     */
     */
     @NotNull(message="[唯一id]不能为空")
     @NotNull(message="[唯一id]不能为空")
     @ApiModelProperty("唯一id")
     @ApiModelProperty("唯一id")
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
     private Long id;
     /**
     /**
     * 用户id
     * 用户id

+ 3 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/vo/CommunityUserLikeVo.java

@@ -3,6 +3,8 @@ package com.ruoyi.generator.vo;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 
 
@@ -24,6 +26,7 @@ public class CommunityUserLikeVo implements Serializable {
     @NotNull(message="[唯一id]不能为空")
     @NotNull(message="[唯一id]不能为空")
     @ApiModelProperty("唯一id")
     @ApiModelProperty("唯一id")
     @TableId("id")
     @TableId("id")
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
     private Long id;
     /**
     /**
     * 关注人id
     * 关注人id

+ 3 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/vo/SysDictDataVo.java

@@ -1,6 +1,8 @@
 package com.ruoyi.generator.vo;
 package com.ruoyi.generator.vo;
 
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.annotation.Excel.ColumnType;
 import com.ruoyi.common.annotation.Excel.ColumnType;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
@@ -18,6 +20,7 @@ public class SysDictDataVo
 {
 {
     /** 字典编码 */
     /** 字典编码 */
     @Excel(name = "字典编码", cellType = ColumnType.NUMERIC)
     @Excel(name = "字典编码", cellType = ColumnType.NUMERIC)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long dictCode;
     private Long dictCode;
 
 
     /** 字典标签 */
     /** 字典标签 */