优化: 调整前端登录相关接口 (接口分离)

This commit is contained in:
TinyAnts 2023-03-14 12:07:40 +08:00
parent 44975bfd86
commit 1d0d314aee
40 changed files with 430 additions and 410 deletions

View File

@ -19,7 +19,7 @@ public class UserAuth implements Serializable {
private Integer userId; // 用户Id
private String openid; // Openid
private String unionid; // Unionid
private Integer client; // 客户端类型: [1=微信小程序, 2=微信公众号, 3=手机H54=电脑PC, 5=苹果APP, 6=安卓APP]
private Integer terminal; // 客户端类型: [1=微信小程序, 2=微信公众号, 3=手机H54=电脑PC, 5=苹果APP, 6=安卓APP]
private Long createTime; // 创建时间
private Long updateTime; // 更新时间

View File

@ -44,6 +44,10 @@ public class LikeFrontInterceptor implements HandlerInterceptor {
@NonNull HttpServletResponse response,
@NonNull Object handler) throws Exception {
// 记录当前平台
String terminal = request.getHeader("terminal");
LikeFrontThreadLocal.put("terminal", terminal);
// 判断请求接口
response.setContentType("application/json;charset=utf-8");
if (!(handler instanceof HandlerMethod)) {
@ -113,12 +117,14 @@ public class LikeFrontInterceptor implements HandlerInterceptor {
private void checkLogin(Method method) {
for (int i=0; i<=0; i++) {
// 免登校验
Object id = StpUtil.getLoginId();
if (StringUtils.isNotNull(method) && method.isAnnotationPresent(NotLogin.class)) {
if (StringUtils.isNotNull(id)) {
Integer userId = Integer.parseInt(id.toString());
LikeFrontThreadLocal.put("userId", userId);
}
try {
Object id = StpUtil.getLoginId();
if (StringUtils.isNotNull(id)) {
Integer userId = Integer.parseInt(id.toString());
LikeFrontThreadLocal.put("userId", userId);
}
} catch (Exception ignored) {}
break;
}
@ -131,6 +137,7 @@ public class LikeFrontInterceptor implements HandlerInterceptor {
}
// 登录校验
Object id = StpUtil.getLoginId();
if (StringUtils.isNull(id)) {
Integer errCode = HttpEnum.TOKEN_INVALID.getCode();
String errMsg = HttpEnum.TOKEN_INVALID.getMsg();

View File

@ -50,6 +50,17 @@ public class LikeFrontThreadLocal {
return Integer.parseInt(adminId.toString());
}
/**
* 获取平台标识
*/
public static Integer getTerminal() {
Object adminId = LikeFrontThreadLocal.get("terminal");
if (adminId == null || adminId.toString().equals("")) {
return 0;
}
return Integer.parseInt(adminId.toString());
}
/**
* 删除本地线程
*/

View File

@ -6,9 +6,9 @@ import com.mdd.common.core.PageResult;
import com.mdd.common.validator.annotation.IDMust;
import com.mdd.front.LikeFrontThreadLocal;
import com.mdd.front.service.IArticleService;
import com.mdd.front.validate.ArticleCollectValidate;
import com.mdd.front.validate.ArticleSearchValidate;
import com.mdd.front.validate.commons.PageValidate;
import com.mdd.front.validate.article.ArticleCollectValidate;
import com.mdd.front.validate.article.ArticleSearchValidate;
import com.mdd.front.validate.common.PageValidate;
import com.mdd.front.vo.article.ArticleCateVo;
import com.mdd.front.vo.article.ArticleCollectVo;
import com.mdd.front.vo.article.ArticleDetailVo;
@ -17,7 +17,6 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
import java.util.List;
/**

View File

@ -1,19 +1,27 @@
package com.mdd.front.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mdd.common.aop.NotLogin;
import com.mdd.common.core.AjaxResult;
import com.mdd.common.core.PageResult;
import com.mdd.common.entity.notice.NoticeRecord;
import com.mdd.common.enums.NoticeEnum;
import com.mdd.common.exception.OperateException;
import com.mdd.common.mapper.notice.NoticeRecordMapper;
import com.mdd.common.plugin.notice.NoticeDriver;
import com.mdd.common.plugin.notice.vo.NoticeSmsVo;
import com.mdd.common.util.StringUtils;
import com.mdd.common.util.ToolUtils;
import com.mdd.common.validator.annotation.IDMust;
import com.mdd.front.service.IIndexService;
import com.mdd.front.validate.commons.PageValidate;
import com.mdd.front.validate.common.PageValidate;
import com.mdd.front.validate.common.SmsValidate;
import com.mdd.front.vo.article.ArticleListedVo;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@ -21,9 +29,12 @@ import java.util.Map;
* 主页管理
*/
@RestController
@RequestMapping("/api")
@RequestMapping("api/index")
public class IndexController {
@Resource
NoticeRecordMapper noticeRecordMapper;
@Resource
IIndexService iIndexService;
@ -110,4 +121,39 @@ public class IndexController {
return AjaxResult.success(list);
}
/**
* 发送短信
*
* @author fzr
* @param smsValidate 参数
* @return AjaxResult<Object>
*/
@NotLogin
@PostMapping("/sendSms")
public AjaxResult<Object> sendSms(@Validated @RequestBody SmsValidate smsValidate) {
NoticeRecord noticeRecord = noticeRecordMapper.selectOne(new QueryWrapper<NoticeRecord>()
.eq("account", smsValidate.getMobile())
.eq("scene", smsValidate.getScene())
.eq("status", Arrays.asList(NoticeEnum.STATUS_WAIT, NoticeEnum.STATUS_OK))
.orderByDesc("id")
.last("limit 1"));
if (StringUtils.isNotNull(noticeRecord)) {
if (noticeRecord.getCreateTime() >= (System.currentTimeMillis() / 1000 - 60)){
throw new OperateException("操作频繁,请稍后再试!");
}
}
NoticeSmsVo params = new NoticeSmsVo()
.setScene(smsValidate.getScene())
.setMobile(smsValidate.getMobile())
.setExpire(900)
.setParams(new String[] {
"code:" + ToolUtils.randomInt(4)
});
NoticeDriver.handle(params);
return AjaxResult.success();
}
}

View File

@ -1,24 +1,19 @@
package com.mdd.front.controller;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.mdd.common.aop.NotLogin;
import com.mdd.common.core.AjaxResult;
import com.mdd.common.enums.ClientEnum;
import com.mdd.common.util.StringUtils;
import com.mdd.front.LikeFrontThreadLocal;
import com.mdd.front.service.ILoginService;
import com.mdd.front.validate.login.RegisterValidate;
import com.mdd.front.validate.login.ForgetPwdValidate;
import com.mdd.front.validate.login.OaLoginValidate;
import com.mdd.front.validate.login.ScanLoginValidate;
import com.mdd.front.vo.LoginUrlsVo;
import com.mdd.front.vo.LoginTokenVo;
import com.mdd.front.validate.login.*;
import com.mdd.front.vo.login.LoginUrlsVo;
import com.mdd.front.vo.login.LoginTokenVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.Map;
import javax.validation.constraints.NotNull;
/**
* 登录管理
@ -35,45 +30,67 @@ public class LoginController {
* 注册账号
*
* @author fzr
* @param registerValidate 参数
* @param valid 注册参数
* @return AjaxResult<Object>
*/
@NotLogin
@PostMapping("/register")
public AjaxResult<Object> register(@Validated @RequestBody RegisterValidate registerValidate) {
iLoginService.register(registerValidate);
public AjaxResult<Object> register(@Validated @RequestBody RegisterValidate valid) {
Integer terminal = LikeFrontThreadLocal.getTerminal();
String username = valid.getUsername();
String password = valid.getPassword();
iLoginService.register(username, password, terminal);
return AjaxResult.success();
}
/**
* 登录验证
* 账号登录
*
* @author fzr
* @param params 参数
* @param valid 登录参数
* @return AjaxResult<LoginTokenVo>
*/
@NotLogin
@PostMapping("/check")
public AjaxResult<LoginTokenVo> check(@RequestBody Map<String, String> params) {
Assert.notNull(params.get("scene"), "scene参数缺失!");
LoginTokenVo vo = new LoginTokenVo();
@PostMapping("/accountLogin")
public AjaxResult<LoginTokenVo> accountLogin(@Validated @RequestBody LoginPwdValidate valid) {
Integer terminal = LikeFrontThreadLocal.getTerminal();
String username = valid.getUsername();
String password = valid.getPassword();
switch (params.get("scene")) {
case "mnp":
Assert.notNull(params.get("code"), "code参数缺失!");
Assert.notNull(params.get("client"), "client参数缺失!");
String code = params.get("code");
Integer client = Integer.parseInt(params.get("client"));
vo = iLoginService.mnpLogin(code, client);
break;
case "mobile":
vo = iLoginService.mobileLogin(params);
break;
case "account":
vo = iLoginService.accountLogin(params);
break;
}
LoginTokenVo vo = iLoginService.accountLogin(username, password, terminal);
return AjaxResult.success(vo);
}
/**
* 手机登录
*
* @param valid 登录参数
* @return AjaxResult<LoginTokenVo>
*/
@NotLogin
@PostMapping("/mobileLogin")
public AjaxResult<LoginTokenVo> mobileLogin(@Validated @RequestBody LoginPhoneValidate valid) {
Integer terminal = LikeFrontThreadLocal.getTerminal();
String mobile = valid.getMobile();
String code = valid.getCode();
LoginTokenVo vo = iLoginService.mobileLogin(mobile, code, terminal);
return AjaxResult.success(vo);
}
/**
* 微信登录
*
* @param valid 登录参数
* @return AjaxResult<LoginTokenVo>
*/
@NotLogin
@PostMapping("/mnpLogin")
public AjaxResult<LoginTokenVo> mnpLogin(@Validated @RequestBody LoginCodeValidate valid) {
Integer terminal = LikeFrontThreadLocal.getTerminal();
String code = valid.getCode();
LoginTokenVo vo = iLoginService.mnpLogin(code, terminal);
return AjaxResult.success(vo);
}
@ -81,51 +98,34 @@ public class LoginController {
* 公众号登录
*
* @author fzr
* @param oaLoginValidate 参数
* @param valid 登录参数
* @return AjaxResult<LoginTokenVo>
*/
@NotLogin
@PostMapping("/oaLogin")
public AjaxResult<LoginTokenVo> oaLogin(@Validated @RequestBody OaLoginValidate oaLoginValidate) {
String code = oaLoginValidate.getCode();
Integer client = oaLoginValidate.getClient();
client = StringUtils.isNotNull(client) ? client : ClientEnum.OA.getCode();
public AjaxResult<LoginTokenVo> oaLogin(@Validated @RequestBody LoginCodeValidate valid) {
Integer terminal = LikeFrontThreadLocal.getTerminal();
String code = valid.getCode();
LoginTokenVo vo = iLoginService.officeLogin(code, client);
LoginTokenVo vo = iLoginService.officeLogin(code, terminal);
return AjaxResult.success(vo);
}
/**
* 公众号跳转url
* 公众号链接
*
* @author fzr
* @param url
* @param url 跳转链
* @return AjaxResult<LoginCodesVo>
*/
@NotLogin
@GetMapping("/codeUrl")
public AjaxResult<LoginUrlsVo> codeUrl(@RequestParam String url) {
Assert.notNull(url, "url参数不能为空");
@GetMapping("/oaCodeUrl")
public AjaxResult<LoginUrlsVo> oaCodeUrl(@Validated @NotNull() @RequestParam("url") String url) {
LoginUrlsVo vo = new LoginUrlsVo();
vo.setUrl(iLoginService.codeUrl(url));
vo.setUrl(iLoginService.oaCodeUrl(url));
return AjaxResult.success(vo);
}
/**
* 忘记密码
*
* @author fzr
* @param forgetPwdValidate 参数
* @return AjaxResult<Object>
*/
@NotLogin
@PostMapping("/forgotPassword")
public AjaxResult<Object> forgotPassword(@Validated @RequestBody ForgetPwdValidate forgetPwdValidate) {
iLoginService.forgotPassword(forgetPwdValidate);
return AjaxResult.success();
}
/**
* 扫码链接
*
@ -134,9 +134,9 @@ public class LoginController {
* @return AjaxResult<LoginUrlsVo>
*/
@NotLogin
@GetMapping("/getScanCode")
public AjaxResult<LoginUrlsVo> getScanCode(@RequestParam String url, HttpSession session) {
String qrcodeUrl = iLoginService.getScanCode(url, session);
@GetMapping("/scanCodeUrl")
public AjaxResult<LoginUrlsVo> scanCodeUrl(@Validated @NotNull() @RequestParam("url") String url, HttpSession session) {
String qrcodeUrl = iLoginService.scanCodeUrl(url, session);
LoginUrlsVo vo = new LoginUrlsVo();
vo.setUrl(qrcodeUrl);
return AjaxResult.success(vo);
@ -146,13 +146,17 @@ public class LoginController {
* 扫码登录
*
* @author fzr
* @param scanLoginValidate 参数
* @param valid 扫码参数
* @return AjaxResult<Object>
*/
@NotLogin
@PostMapping("/scanLogin")
public AjaxResult<Object> scanLogin(@Validated @RequestBody ScanLoginValidate scanLoginValidate, HttpSession session) {
LoginTokenVo vo = iLoginService.scanLogin(scanLoginValidate, session);
public AjaxResult<Object> scanLogin(@Validated @RequestBody LoginScanValidate valid, HttpSession session) {
Integer terminal = LikeFrontThreadLocal.getTerminal();
String code = valid.getCode();
String state = valid.getState();
LoginTokenVo vo = iLoginService.scanLogin(code, state, terminal, session);
return AjaxResult.success(vo);
}

View File

@ -5,8 +5,8 @@ import com.mdd.common.core.AjaxResult;
import com.mdd.common.validator.annotation.IDMust;
import com.mdd.front.LikeFrontThreadLocal;
import com.mdd.front.service.IPcService;
import com.mdd.front.vo.PcArticleCenterVo;
import com.mdd.front.vo.PcArticleDetailVo;
import com.mdd.front.vo.article.PcArticleCenterVo;
import com.mdd.front.vo.article.PcArticleDetailVo;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

View File

@ -1,67 +0,0 @@
package com.mdd.front.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mdd.common.core.AjaxResult;
import com.mdd.common.entity.notice.NoticeRecord;
import com.mdd.common.enums.NoticeEnum;
import com.mdd.common.exception.OperateException;
import com.mdd.common.mapper.notice.NoticeRecordMapper;
import com.mdd.common.plugin.notice.NoticeDriver;
import com.mdd.common.plugin.notice.vo.NoticeSmsVo;
import com.mdd.common.util.StringUtils;
import com.mdd.common.util.ToolUtils;
import com.mdd.front.validate.commons.SmsValidate;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.Arrays;
/**
* 短信管理
*/
@RestController
@RequestMapping("/api/sms")
public class SmsController {
@Resource
NoticeRecordMapper noticeRecordMapper;
/**
* 发送短信
*
* @author fzr
* @param smsValidate 参数
* @return AjaxResult<Object>
*/
@PostMapping("/send")
public AjaxResult<Object> send(@Validated @RequestBody SmsValidate smsValidate) {
NoticeRecord noticeRecord = noticeRecordMapper.selectOne(new QueryWrapper<NoticeRecord>()
.eq("mobile", smsValidate.getMobile())
.eq("scene", smsValidate.getScene())
.eq("status", Arrays.asList(NoticeEnum.STATUS_WAIT, NoticeEnum.STATUS_OK))
.orderByDesc("id")
.last("limit 1"));
if (StringUtils.isNotNull(noticeRecord)) {
if (noticeRecord.getCreateTime() >= (System.currentTimeMillis() / 1000 - 60)){
throw new OperateException("操作频繁,请稍后再试!");
}
}
NoticeSmsVo params = new NoticeSmsVo()
.setScene(smsValidate.getScene())
.setMobile(smsValidate.getMobile())
.setExpire(900)
.setParams(new String[] {
"code:" + ToolUtils.randomInt(4)
});
NoticeDriver.handle(params);
return AjaxResult.success();
}
}

View File

@ -1,12 +1,14 @@
package com.mdd.front.controller;
import com.mdd.common.aop.NotLogin;
import com.mdd.common.core.AjaxResult;
import com.mdd.front.LikeFrontThreadLocal;
import com.mdd.front.service.IUserService;
import com.mdd.front.validate.UserBindMobileValidate;
import com.mdd.front.validate.UserMnpMobileValidate;
import com.mdd.front.validate.UserPasswordValidate;
import com.mdd.front.validate.UserUpdateValidate;
import com.mdd.front.validate.users.UserForgetPwdValidate;
import com.mdd.front.validate.users.UserPhoneBindValidate;
import com.mdd.front.validate.users.UserPhoneMnpValidate;
import com.mdd.front.validate.users.UserChangePwdValidate;
import com.mdd.front.validate.users.UserUpdateValidate;
import com.mdd.front.vo.users.UserCenterVo;
import com.mdd.front.vo.users.UserInfoVo;
import org.springframework.validation.annotation.Validated;
@ -32,7 +34,8 @@ public class UserController {
*/
@GetMapping("/center")
public AjaxResult<UserCenterVo> center() {
UserCenterVo vo = iUserService.center(LikeFrontThreadLocal.getUserId());
Integer userId = LikeFrontThreadLocal.getUserId();
UserCenterVo vo = iUserService.center(userId);
return AjaxResult.success(vo);
}
@ -44,7 +47,8 @@ public class UserController {
*/
@GetMapping("/info")
public AjaxResult<UserInfoVo> info() {
UserInfoVo vo = iUserService.info(LikeFrontThreadLocal.getUserId());
Integer userId = LikeFrontThreadLocal.getUserId();
UserInfoVo vo = iUserService.info(userId);
return AjaxResult.success(vo);
}
@ -70,12 +74,26 @@ public class UserController {
* @return AjaxResult<Object>
*/
@PostMapping("/changePwd")
public AjaxResult<Object> changePwd(@Validated @RequestBody UserPasswordValidate passwordValidate) {
public AjaxResult<Object> changePwd(@Validated @RequestBody UserChangePwdValidate passwordValidate) {
Integer userId = LikeFrontThreadLocal.getUserId();
iUserService.changePwd(passwordValidate.getPassword(), passwordValidate.getOldPassword(), userId);
return AjaxResult.success();
}
/**
* 忘记密码
*
* @author fzr
* @param userForgetPwdValidate 参数
* @return AjaxResult<Object>
*/
@NotLogin
@PostMapping("/forgotPwd")
public AjaxResult<Object> forgotPwd(@Validated @RequestBody UserForgetPwdValidate userForgetPwdValidate) {
iUserService.forgotPwd(userForgetPwdValidate);
return AjaxResult.success();
}
/**
* 绑定手机号
*
@ -84,7 +102,7 @@ public class UserController {
* @return AjaxResult<Object>
*/
@PostMapping("/bindMobile")
public AjaxResult<Object> bindMobile(@Validated @RequestBody UserBindMobileValidate mobileValidate) {
public AjaxResult<Object> bindMobile(@Validated @RequestBody UserPhoneBindValidate mobileValidate) {
Integer userId = LikeFrontThreadLocal.getUserId();
iUserService.bindMobile(mobileValidate, userId);
return AjaxResult.success();
@ -98,7 +116,7 @@ public class UserController {
* @return AjaxResult<Object>
*/
@PostMapping("/mnpMobile")
public AjaxResult<Object> mnpMobile(@Validated @RequestBody UserMnpMobileValidate mobileValidate) {
public AjaxResult<Object> mnpMobile(@Validated @RequestBody UserPhoneMnpValidate mobileValidate) {
iUserService.mnpMobile(mobileValidate.getCode().trim());
return AjaxResult.success();
}

View File

@ -1,8 +1,8 @@
package com.mdd.front.service;
import com.mdd.common.core.PageResult;
import com.mdd.front.validate.ArticleSearchValidate;
import com.mdd.front.validate.commons.PageValidate;
import com.mdd.front.validate.article.ArticleSearchValidate;
import com.mdd.front.validate.common.PageValidate;
import com.mdd.front.vo.article.ArticleCateVo;
import com.mdd.front.vo.article.ArticleCollectVo;
import com.mdd.front.vo.article.ArticleDetailVo;

View File

@ -1,7 +1,7 @@
package com.mdd.front.service;
import com.mdd.common.core.PageResult;
import com.mdd.front.validate.commons.PageValidate;
import com.mdd.front.validate.common.PageValidate;
import com.mdd.front.vo.article.ArticleListedVo;
import java.util.List;

View File

@ -1,12 +1,8 @@
package com.mdd.front.service;
import com.mdd.front.validate.login.RegisterValidate;
import com.mdd.front.validate.login.ForgetPwdValidate;
import com.mdd.front.validate.login.ScanLoginValidate;
import com.mdd.front.vo.LoginTokenVo;
import com.mdd.front.vo.login.LoginTokenVo;
import javax.servlet.http.HttpSession;
import java.util.Map;
/**
* 登录服务接口类
@ -17,47 +13,53 @@ public interface ILoginService {
* 账号注册
*
* @author fzr
* @param registerValidate 参数
* @param username 账号
* @param password 密码
* @param terminal 终端
*/
void register(RegisterValidate registerValidate);
void register(String username, String password, Integer terminal);
/**
* 账号登录
*
* @author fzr
* @param params 参数
* @param username 账号
* @param password 密码
* @param terminal 终端
* @return LoginTokenVo
*/
LoginTokenVo accountLogin(Map<String, String> params);
LoginTokenVo accountLogin(String username, String password, Integer terminal);
/**
* 手机登录
*
* @author fzr
* @param params 参数
* @param mobile 手机号
* @param code 验证码
* @param terminal 终端
* @return LoginTokenVo
*/
LoginTokenVo mobileLogin(Map<String, String> params);
LoginTokenVo mobileLogin(String mobile, String code, Integer terminal);
/**
* 微信登录
*
* @author fzr
* @param code 微信code
* @param client 来源客户
* @param terminal
* @return LoginTokenVo
*/
LoginTokenVo mnpLogin(String code, Integer client);
LoginTokenVo mnpLogin(String code, Integer terminal);
/**
* 公众号登录
*
* @author fzr
* @param code 参数
* @param client 参数
* @param code 微信Code
* @param terminal 终端
* @return LoginTokenVo
*/
LoginTokenVo officeLogin(String code, Integer client);
LoginTokenVo officeLogin(String code, Integer terminal);
/**
* 公众号跳转url
@ -66,15 +68,7 @@ public interface ILoginService {
* @param url 连接
* @return String
*/
String codeUrl(String url);
/**
* 忘记密码
*
* @author fzr
* @param forgetPwdValidate 参数
*/
void forgotPassword(ForgetPwdValidate forgetPwdValidate);
String oaCodeUrl(String url);
/**
* 扫码链接
@ -83,11 +77,17 @@ public interface ILoginService {
* @param session session
* @return String
*/
String getScanCode(String url, HttpSession session);
String scanCodeUrl(String url, HttpSession session);
/**
* 扫码登录
*
* @param code 编码
* @param state 标识
* @param terminal 终端
* @param session 会话
* @return LoginTokenVo
*/
LoginTokenVo scanLogin(ScanLoginValidate scanLoginValidate, HttpSession session);
LoginTokenVo scanLogin(String code, String state, Integer terminal, HttpSession session);
}

View File

@ -1,7 +1,7 @@
package com.mdd.front.service;
import com.mdd.front.vo.PcArticleCenterVo;
import com.mdd.front.vo.PcArticleDetailVo;
import com.mdd.front.vo.article.PcArticleCenterVo;
import com.mdd.front.vo.article.PcArticleDetailVo;
import java.util.List;
import java.util.Map;

View File

@ -1,18 +0,0 @@
package com.mdd.front.service;
import java.util.Map;
/**
* 上传服务接口类
*/
public interface IUploadService {
/**
* 上传图片
*
* @author fzr
* @return Map<String, Object>
*/
Map<String, Object> image();
}

View File

@ -1,7 +1,8 @@
package com.mdd.front.service;
import com.mdd.front.validate.UserBindMobileValidate;
import com.mdd.front.validate.UserUpdateValidate;
import com.mdd.front.validate.users.UserForgetPwdValidate;
import com.mdd.front.validate.users.UserPhoneBindValidate;
import com.mdd.front.validate.users.UserUpdateValidate;
import com.mdd.front.vo.users.UserCenterVo;
import com.mdd.front.vo.users.UserInfoVo;
@ -47,6 +48,8 @@ public interface IUserService {
*/
void changePwd(String password, String oldPassword, Integer userId);
void forgotPwd(UserForgetPwdValidate userForgetPwdValidate);
/**
* 绑定手机
*
@ -54,7 +57,7 @@ public interface IUserService {
* @param mobileValidate 参数
* @param userId 用户ID
*/
void bindMobile(UserBindMobileValidate mobileValidate, Integer userId);
void bindMobile(UserPhoneBindValidate mobileValidate, Integer userId);
/**
* 微信手机

View File

@ -17,8 +17,8 @@ import com.mdd.common.util.StringUtils;
import com.mdd.common.util.TimeUtils;
import com.mdd.common.util.UrlUtils;
import com.mdd.front.service.IArticleService;
import com.mdd.front.validate.ArticleSearchValidate;
import com.mdd.front.validate.commons.PageValidate;
import com.mdd.front.validate.article.ArticleSearchValidate;
import com.mdd.front.validate.common.PageValidate;
import com.mdd.front.vo.article.ArticleCateVo;
import com.mdd.front.vo.article.ArticleCollectVo;
import com.mdd.front.vo.article.ArticleDetailVo;

View File

@ -17,7 +17,7 @@ import com.mdd.common.mapper.DecorateTabbarMapper;
import com.mdd.common.mapper.setting.HotSearchMapper;
import com.mdd.common.util.*;
import com.mdd.front.service.IIndexService;
import com.mdd.front.validate.commons.PageValidate;
import com.mdd.front.validate.common.PageValidate;
import com.mdd.front.vo.article.ArticleListedVo;
import org.springframework.stereotype.Service;

View File

@ -15,12 +15,8 @@ import com.mdd.common.mapper.user.UserMapper;
import com.mdd.common.plugin.notice.NoticeCheck;
import com.mdd.common.util.*;
import com.mdd.front.cache.ScanLoginCache;
import com.mdd.front.config.FrontConfig;
import com.mdd.front.service.ILoginService;
import com.mdd.front.validate.login.RegisterValidate;
import com.mdd.front.validate.login.ForgetPwdValidate;
import com.mdd.front.validate.login.ScanLoginValidate;
import com.mdd.front.vo.LoginTokenVo;
import com.mdd.front.vo.login.LoginTokenVo;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
@ -53,30 +49,32 @@ public class LoginServiceImpl implements ILoginService {
* 注册账号
*
* @author fzr
* @param registerValidate 参数
* @param username 账号
* @param password 密码
* @param terminal 总端
*/
@Override
public void register(RegisterValidate registerValidate) {
public void register(String username, String password, Integer terminal) {
User model = userMapper.selectOne(new QueryWrapper<User>()
.select("id,sn,username")
.eq("username", registerValidate.getUsername())
.eq("username", username)
.eq("is_delete", 0)
.last("limit 1"));
Assert.isNull(model, "账号已存在,换一个吧!");
Integer sn = this.randMakeSn();
Integer sn = this.__generateSn();
String salt = ToolUtils.randomString(5);
String pwd = ToolUtils.makeMd5(registerValidate.getPassword()+salt);
String pwd = ToolUtils.makeMd5(password+salt);
User user = new User();
user.setSn(sn);
user.setNickname("用户"+sn);
user.setUsername(registerValidate.getUsername());
user.setUsername(username);
user.setPassword(pwd);
user.setSalt(salt);
user.setAvatar("/api/static/default_avatar.png");
user.setChannel(registerValidate.getClient());
user.setChannel(terminal);
user.setCreateTime(System.currentTimeMillis() / 1000);
user.setUpdateTime(System.currentTimeMillis() / 1000);
userMapper.insert(user);
@ -86,16 +84,12 @@ public class LoginServiceImpl implements ILoginService {
* 账号登录
*
* @author fzr
* @param params 参数
* @param username 账号
* @param password 密码
* @return LoginTokenVo
*/
@Override
public LoginTokenVo accountLogin(Map<String, String> params) {
Assert.notNull(params.get("username"), "username参数缺失!");
Assert.notNull(params.get("password"), "password参数缺失!");
String username = params.get("username");
String password = params.get("password");
public LoginTokenVo accountLogin(String username, String password, Integer terminal) {
User user = userMapper.selectOne(new QueryWrapper<User>()
.select("id,username,password,salt,mobile,is_disable")
.eq("username", username)
@ -107,23 +101,19 @@ public class LoginServiceImpl implements ILoginService {
Assert.isFalse(!pwd.equals(user.getPassword()), "账号或密码错误!");
Assert.isFalse(!user.getIsDisable().equals(0), "账号已被禁用!");
return this.makeLoginToken(user.getId(), user.getMobile());
return this.__loginToken(user.getId(), user.getMobile(), terminal);
}
/**
* 手机号登录
*
* @author fzr
* @param params 参数
* @param mobile 手机号
* @param code 验证码
* @return LoginTokenVo
*/
@Override
public LoginTokenVo mobileLogin(Map<String, String> params) {
Assert.notNull(params.get("mobile"), "mobile参数缺失!");
Assert.notNull(params.get("code"), "code参数缺失!");
String mobile = params.get("mobile");
String code = params.get("code").toLowerCase();
public LoginTokenVo mobileLogin(String mobile, String code, Integer terminal) {
// 校验验证码
int sceneCode = NoticeEnum.LOGIN_CODE.getCode();
if (!NoticeCheck.verify(sceneCode, code)) {
@ -140,20 +130,20 @@ public class LoginServiceImpl implements ILoginService {
Assert.notNull(user, "账号不存在!");
Assert.isFalse(user.getIsDisable() != 0, "账号已禁用!");
return this.makeLoginToken(user.getId(), user.getMobile());
return this.__loginToken(user.getId(), user.getMobile(), terminal);
}
/**
* 微信小程序登录
*
* @author fzr
* @param code 微信code
* @param client 来源客户
* @param code 编码
* @param terminal
* @return LoginTokenVo
*/
@Override
@Transactional
public LoginTokenVo mnpLogin(String code, Integer client) {
public LoginTokenVo mnpLogin(String code, Integer terminal) {
try {
WxMaService wxMaService = WeChatUtils.mnp();
WxMaJscode2SessionResult sessionResult = wxMaService.getUserService().getSessionInfo(code);
@ -161,7 +151,7 @@ public class LoginServiceImpl implements ILoginService {
String uniId = sessionResult.getUnionid();
String unionId = uniId == null ? "0" : uniId;
return this.userService(openId, unionId, client);
return this.__wxLoginHandle(openId, unionId, terminal);
} catch (WxErrorException e) {
throw new OperateException(e.getError().getErrorCode() + ", " + e.getError().getErrorMsg());
}
@ -171,17 +161,19 @@ public class LoginServiceImpl implements ILoginService {
* 公众号登录
*
* @author fzr
* @param code 编码
* @param terminal 终端
* @return LoginTokenVo
*/
@Override
public LoginTokenVo officeLogin(String code, Integer client) {
public LoginTokenVo officeLogin(String code, Integer terminal) {
try {
WxMpService wxMpService = WeChatUtils.official();
WxOAuth2AccessToken wxOAuth2AccessToken = wxMpService.getOAuth2Service().getAccessToken(code);
String uniId = wxOAuth2AccessToken.getUnionId();
String openId = wxOAuth2AccessToken.getOpenId();
String unionId = uniId == null ? "0" : uniId;
return this.userService(openId, unionId, client);
return this.__wxLoginHandle(openId, unionId, terminal);
} catch (WxErrorException e) {
throw new OperateException(e.getError().getErrorCode() + ", " + e.getError().getErrorMsg());
}
@ -195,50 +187,12 @@ public class LoginServiceImpl implements ILoginService {
* @return String
*/
@Override
public String codeUrl(String url) {
public String oaCodeUrl(String url) {
WxMpService wxMpService = WeChatUtils.official();
WxMpOAuth2ServiceImpl wxMpOAuth2Service = new WxMpOAuth2ServiceImpl(wxMpService);
return wxMpOAuth2Service.buildAuthorizationUrl(url, WxConsts.OAuth2Scope.SNSAPI_USERINFO, null);
}
/**
* 忘记密码
*
* @author fzr
* @param forgetPwdValidate 参数
*/
@Override
public void forgotPassword(ForgetPwdValidate forgetPwdValidate) {
String mobile = forgetPwdValidate.getMobile();
String code = forgetPwdValidate.getCode();
String password = forgetPwdValidate.getPassword();
// 校验验证码
int sceneCode = NoticeEnum.FORGOT_PASSWORD_CODE.getCode();
if (!NoticeCheck.verify(sceneCode, code)) {
throw new OperateException("验证码错误!");
}
// 查询手机号
User user = userMapper.selectOne(new QueryWrapper<User>()
.select("id,username,mobile,is_disable")
.eq("is_delete", 0)
.eq("mobile", mobile)
.last("limit 1"));
// 验证账号
Assert.notNull(user, "账号不存在!");
String salt = ToolUtils.randomString(5);
String pwd = ToolUtils.makeMd5(password.trim()+salt);
// 更新密码
user.setPassword(pwd);
user.setSalt(salt);
user.setUpdateTime(System.currentTimeMillis() / 1000);
userMapper.updateById(user);
}
/**
* 扫码链接
*
@ -247,7 +201,7 @@ public class LoginServiceImpl implements ILoginService {
* @return String
*/
@Override
public String getScanCode(String url, HttpSession session) {
public String scanCodeUrl(String url, HttpSession session) {
// 获取AppId
String appId = ConfigUtils.get("op_channel", "appId", "");
@ -280,18 +234,14 @@ public class LoginServiceImpl implements ILoginService {
* 扫码登录
*
* @author fzr
* @param scanLoginValidate 参数
* @param session 当前会话
* @param code 编码
* @param state 标识
* @param terminal 终端
* @param session 会话
*/
@Override
public LoginTokenVo scanLogin(ScanLoginValidate scanLoginValidate, HttpSession session) {
// 验证唯一标识是否过期
if (ScanLoginCache.get(session.getId()).equals(scanLoginValidate.getState())) {
throw new OperateException("二维码已失效或不存在,请重新操作");
}
public LoginTokenVo scanLogin(String code, String state, Integer terminal, HttpSession session) {
// 得到配置和授权临时票据code
String code = scanLoginValidate.getCode();
String appId = ConfigUtils.get("op_channel", "appId", "");
String appSecret = ConfigUtils.get("op_channel", "appSecret", "");
@ -327,44 +277,18 @@ public class LoginServiceImpl implements ILoginService {
String openId = userinfoMap.get("openid");
String uniId = userinfoMap.get("unionid");
String unionId = uniId == null ? "0" : uniId;
return this.userService(openId, unionId, ClientEnum.PC.getCode());
return this.__wxLoginHandle(openId, unionId, terminal);
}
/**
* 生成登录Token
* 处理微信登录
*
* @author fzr
* @param userId 用户ID
* @param mobile 用户手机
* @param openId (openId)
* @param unionId (unionId)
* @param terminal (terminal)
* @return LoginTokenVo
*/
private LoginTokenVo makeLoginToken(Integer userId, String mobile) {
// 实现账号登录
StpUtil.login(userId);
// 更新登录信息
User user = new User();
user.setLastLoginIp(IpUtils.getHostIp());
user.setLastLoginTime(System.currentTimeMillis() / 1000);
userMapper.update(user, new QueryWrapper<User>().eq("id", userId));
// 返回登录信息
LoginTokenVo vo = new LoginTokenVo();
vo.setId(userId);
vo.setIsBindMobile(!StringUtils.isEmpty(mobile));
vo.setToken(StpUtil.getTokenValue());
return vo;
}
/**
* 用户创建服务
*
* @param openId (openId)
* @param unionId (unionId)
* @param client (client)
* @return LoginTokenVo
*/
private LoginTokenVo userService(String openId, String unionId, Integer client) {
private LoginTokenVo __wxLoginHandle(String openId, String unionId, Integer terminal) {
UserAuth userAuth = userAuthMapper.selectOne(new QueryWrapper<UserAuth>()
.nested(wq->wq
.eq("unionid", unionId).or()
@ -381,7 +305,7 @@ public class LoginServiceImpl implements ILoginService {
}
if (StringUtils.isNull(user)) {
Integer sn = this.randMakeSn();
Integer sn = this.__generateSn();
User model = new User();
model.setSn(sn);
model.setAvatar("/api/static/default_avatar.png");
@ -402,7 +326,7 @@ public class LoginServiceImpl implements ILoginService {
auth.setUserId(model.getId());
auth.setUnionid(unionId);
auth.setOpenid(openId);
auth.setClient(client);
auth.setTerminal(terminal);
auth.setCreateTime(System.currentTimeMillis() / 1000);
auth.setUpdateTime(System.currentTimeMillis() / 1000);
userAuthMapper.insert(auth);
@ -414,7 +338,7 @@ public class LoginServiceImpl implements ILoginService {
.nested(wq->wq
.eq("unionid", unionId).or()
.eq("openid", openId)
).eq("client", client)
).eq("terminal", terminal)
.last("limit 1"));
if (StringUtils.isNull(auth)) {
@ -422,7 +346,7 @@ public class LoginServiceImpl implements ILoginService {
authModel.setUserId(user.getId());
authModel.setUnionid(unionId);
authModel.setOpenid(openId);
authModel.setClient(client);
authModel.setTerminal(terminal);
authModel.setCreateTime(System.currentTimeMillis() / 1000);
authModel.setUpdateTime(System.currentTimeMillis() / 1000);
userAuthMapper.insert(authModel);
@ -432,7 +356,34 @@ public class LoginServiceImpl implements ILoginService {
}
}
return this.makeLoginToken(userId, user.getMobile());
return this.__loginToken(userId, user.getMobile(), terminal);
}
/**
* 处理录令牌
*
* @author fzr
* @param userId 用户ID
* @param mobile 用户手机
* @param terminal 终端
* @return LoginTokenVo
*/
private LoginTokenVo __loginToken(Integer userId, String mobile, Integer terminal) {
// 实现账号登录
StpUtil.login(userId, terminal);
// 更新登录信息
User user = new User();
user.setLastLoginIp(IpUtils.getHostIp());
user.setLastLoginTime(System.currentTimeMillis() / 1000);
userMapper.update(user, new QueryWrapper<User>().eq("id", userId));
// 返回登录信息
LoginTokenVo vo = new LoginTokenVo();
vo.setId(userId);
vo.setIsBindMobile(!StringUtils.isEmpty(mobile));
vo.setToken(StpUtil.getTokenValue());
return vo;
}
/**
@ -441,7 +392,7 @@ public class LoginServiceImpl implements ILoginService {
* @author fzr
* @return Integer
*/
private Integer randMakeSn() {
private Integer __generateSn() {
Integer sn;
while (true) {
sn = Integer.parseInt(ToolUtils.randomInt(8));

View File

@ -13,8 +13,8 @@ import com.mdd.common.mapper.article.ArticleCollectMapper;
import com.mdd.common.mapper.article.ArticleMapper;
import com.mdd.common.util.*;
import com.mdd.front.service.IPcService;
import com.mdd.front.vo.PcArticleCenterVo;
import com.mdd.front.vo.PcArticleDetailVo;
import com.mdd.front.vo.article.PcArticleCenterVo;
import com.mdd.front.vo.article.PcArticleDetailVo;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

View File

@ -1,19 +0,0 @@
package com.mdd.front.service.impl;
import com.mdd.front.service.IUploadService;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
* 上传服务实现类
*/
@Service
public class UploadServiceImpl implements IUploadService {
@Override
public Map<String, Object> image() {
return null;
}
}

View File

@ -17,8 +17,9 @@ import com.mdd.common.plugin.notice.NoticeCheck;
import com.mdd.common.util.*;
import com.mdd.front.LikeFrontThreadLocal;
import com.mdd.front.service.IUserService;
import com.mdd.front.validate.UserBindMobileValidate;
import com.mdd.front.validate.UserUpdateValidate;
import com.mdd.front.validate.users.UserForgetPwdValidate;
import com.mdd.front.validate.users.UserPhoneBindValidate;
import com.mdd.front.validate.users.UserUpdateValidate;
import com.mdd.front.vo.users.UserCenterVo;
import com.mdd.front.vo.users.UserInfoVo;
import me.chanjar.weixin.common.error.WxErrorException;
@ -201,6 +202,43 @@ public class UserServiceImpl implements IUserService {
userMapper.updateById(u);
}
/**
* 忘记密码
*
* @param userForgetPwdValidate
*/
@Override
public void forgotPwd(UserForgetPwdValidate userForgetPwdValidate) {
String mobile = userForgetPwdValidate.getMobile();
String code = userForgetPwdValidate.getCode();
String password = userForgetPwdValidate.getPassword();
// 校验验证码
int sceneCode = NoticeEnum.FORGOT_PASSWORD_CODE.getCode();
if (!NoticeCheck.verify(sceneCode, code)) {
throw new OperateException("验证码错误!");
}
// 查询手机号
User user = userMapper.selectOne(new QueryWrapper<User>()
.select("id,username,mobile,is_disable")
.eq("is_delete", 0)
.eq("mobile", mobile)
.last("limit 1"));
// 验证账号
com.baomidou.mybatisplus.core.toolkit.Assert.notNull(user, "账号不存在!");
String salt = ToolUtils.randomString(5);
String pwd = ToolUtils.makeMd5(password.trim()+salt);
// 更新密码
user.setPassword(pwd);
user.setSalt(salt);
user.setUpdateTime(System.currentTimeMillis() / 1000);
userMapper.updateById(user);
}
/**
* 绑定手机
*
@ -209,7 +247,7 @@ public class UserServiceImpl implements IUserService {
* @param userId 用户ID
*/
@Override
public void bindMobile(UserBindMobileValidate mobileValidate, Integer userId) {
public void bindMobile(UserPhoneBindValidate mobileValidate, Integer userId) {
String type = mobileValidate.getType();
String mobile = mobileValidate.getMobile();
String code = mobileValidate.getCode().toLowerCase();

View File

@ -1,4 +1,4 @@
package com.mdd.front.validate;
package com.mdd.front.validate.article;
import com.mdd.common.validator.annotation.IDMust;
import lombok.Data;

View File

@ -1,4 +1,4 @@
package com.mdd.front.validate;
package com.mdd.front.validate.article;
import com.mdd.common.validator.annotation.StringContains;
import lombok.Data;

View File

@ -1,4 +1,4 @@
package com.mdd.front.validate.commons;
package com.mdd.front.validate.common;
import lombok.Data;

View File

@ -1,4 +1,4 @@
package com.mdd.front.validate.commons;
package com.mdd.front.validate.common;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

View File

@ -0,0 +1,16 @@
package com.mdd.front.validate.login;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* 微信登录参数
*/
@Data
public class LoginCodeValidate {
@NotNull(message = "code参数缺失")
private String code;
}

View File

@ -0,0 +1,27 @@
package com.mdd.front.validate.login;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
/**
* 手机号登录参数
*/
@Data
public class LoginPhoneValidate {
@NotNull(message = "mobile参数缺失")
@NotEmpty(message = "手机号不能为空")
@Length(min = 11, max = 11, message = "手机号只能为11位")
@Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "手机号格式有误")
private String mobile;
@NotNull(message = "code参数缺失")
@NotEmpty(message = "code不能为空")
@Length(min = 4, max = 6, message = "验证码长度不符合")
private String code;
}

View File

@ -0,0 +1,22 @@
package com.mdd.front.validate.login;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
/**
* 账号密码登录参数
*/
@Data
public class LoginPwdValidate {
@NotNull(message = "username参数缺失")
@NotEmpty(message = "账号不能为空")
private String username;
@NotNull(message = "password参数缺失")
@NotEmpty(message = "密码不能为空")
private String password;
}

View File

@ -2,6 +2,7 @@ package com.mdd.front.validate.login;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@ -9,14 +10,16 @@ import java.io.Serializable;
* 网站扫码登录验证
*/
@Data
public class ScanLoginValidate implements Serializable {
public class LoginScanValidate implements Serializable {
private static final long serialVersionUID = 1L;
@NotNull(message = "code参数缺失")
@NotEmpty(message = "code不能为空")
private String code;
@NotNull(message = "state参数缺失")
@NotNull(message = "二维码已失效或不存在,请重新操作")
@NotEmpty(message = "二维码已失效或不存在,请重新操作")
private String state;
}

View File

@ -1,23 +0,0 @@
package com.mdd.front.validate.login;
import com.mdd.common.validator.annotation.IntegerContains;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* 公众号登录参数
*/
@Data
public class OaLoginValidate implements Serializable {
private static final long serialVersionUID = 1L;
@NotNull(message = "code参数缺失")
private String code;
@IntegerContains(values = {1, 2, 3, 4, 5, 6}, message = "client参数值不符合")
private Integer client;
}

View File

@ -1,6 +1,5 @@
package com.mdd.front.validate.login;
import com.mdd.common.validator.annotation.IntegerContains;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
@ -28,8 +27,4 @@ public class RegisterValidate implements Serializable {
@Length(min = 6, max = 12, message = "密码必须在6~12个字符内")
private String password;
@NotNull(message = "client参数缺失")
@IntegerContains(values = {1, 2, 3, 4, 5, 6}, message = "不是合法客户端")
private Integer client;
}

View File

@ -1,4 +1,4 @@
package com.mdd.front.validate;
package com.mdd.front.validate.users;
import lombok.Data;
@ -10,7 +10,7 @@ import java.io.Serializable;
* 用户修改密码参数
*/
@Data
public class UserPasswordValidate implements Serializable {
public class UserChangePwdValidate implements Serializable {
private static final long serialVersionUID = 1L;
@ -18,6 +18,8 @@ public class UserPasswordValidate implements Serializable {
@Pattern(message = "密码必须是6-20字母+数字组合!", regexp="^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$")
private String password;
@NotNull(message = "oldPassword参数缺失")
@NotNull(message = "旧密码不能为空")
private String oldPassword="";
}

View File

@ -1,7 +1,8 @@
package com.mdd.front.validate.login;
package com.mdd.front.validate.users;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@ -9,17 +10,20 @@ import java.io.Serializable;
* 忘记密码参数
*/
@Data
public class ForgetPwdValidate implements Serializable {
public class UserForgetPwdValidate implements Serializable {
private static final long serialVersionUID = 1L;
@NotNull(message = "mobile参数缺失")
@NotEmpty(message = "手机号不能为空")
private String mobile;
@NotNull(message = "code参数缺失")
@NotEmpty(message = "验证码不能为空")
private String code;
@NotNull(message = "password参数缺失")
@NotEmpty(message = "新密码不能为空")
private String password;
}

View File

@ -1,4 +1,4 @@
package com.mdd.front.validate;
package com.mdd.front.validate.users;
import com.mdd.common.validator.annotation.StringContains;
import lombok.Data;
@ -13,7 +13,7 @@ import java.io.Serializable;
* 绑定或修改手机参数
*/
@Data
public class UserBindMobileValidate implements Serializable {
public class UserPhoneBindValidate implements Serializable {
private static final long serialVersionUID = 1L;
@ -28,6 +28,7 @@ public class UserBindMobileValidate implements Serializable {
private String mobile;
@NotNull(message = "code参数缺失")
@NotEmpty(message = "验证码不能为空")
private String code;
}

View File

@ -1,4 +1,4 @@
package com.mdd.front.validate;
package com.mdd.front.validate.users;
import lombok.Data;
@ -9,7 +9,7 @@ import java.io.Serializable;
* 获取微信手机号参数
*/
@Data
public class UserMnpMobileValidate implements Serializable {
public class UserPhoneMnpValidate implements Serializable {
private static final long serialVersionUID = 1L;

View File

@ -1,4 +1,4 @@
package com.mdd.front.validate;
package com.mdd.front.validate.users;
import com.mdd.common.validator.annotation.StringContains;
import lombok.Data;

View File

@ -1,4 +1,4 @@
package com.mdd.front.vo;
package com.mdd.front.vo.article;
import lombok.Data;

View File

@ -1,4 +1,4 @@
package com.mdd.front.vo;
package com.mdd.front.vo.article;
import lombok.Data;

View File

@ -1,4 +1,4 @@
package com.mdd.front.vo;
package com.mdd.front.vo.login;
import lombok.Data;

View File

@ -1,4 +1,4 @@
package com.mdd.front.vo;
package com.mdd.front.vo.login;
import lombok.Data;