优化用户端登录代码

This commit is contained in:
TinyAnts 2022-12-20 16:13:45 +08:00
parent 864b54951a
commit 8fed83cd15
6 changed files with 117 additions and 65 deletions

View File

@ -2,8 +2,12 @@ package com.mdd.front.controller;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.mdd.common.core.AjaxResult;
import com.mdd.common.enums.ClientEnum;
import com.mdd.common.util.StringUtils;
import com.mdd.front.service.ILoginService;
import com.mdd.front.validate.UserRegisterValidate;
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.vo.LoginCodesVo;
import com.mdd.front.vo.LoginTokenVo;
import lombok.extern.slf4j.Slf4j;
@ -12,8 +16,6 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.LinkedHashMap;
import java.util.Map;
@ -32,12 +34,12 @@ public class LoginController {
* 注册账号
*
* @author fzr
* @param userRegisterValidate 参数
* @param registerValidate 参数
* @return AjaxResult<Object>
*/
@PostMapping("/register")
public AjaxResult<Object> register(@Validated @RequestBody UserRegisterValidate userRegisterValidate) {
iLoginService.register(userRegisterValidate);
public AjaxResult<Object> register(@Validated @RequestBody RegisterValidate registerValidate) {
iLoginService.register(registerValidate);
return AjaxResult.success();
}
@ -52,9 +54,14 @@ public class LoginController {
public AjaxResult<LoginTokenVo> check(@RequestBody Map<String, String> params) {
Assert.notNull(params.get("scene"), "scene参数缺失!");
LoginTokenVo vo = new LoginTokenVo();
switch (params.get("scene")) {
case "mnp":
vo = iLoginService.mnpLogin(params);
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);
@ -63,6 +70,7 @@ public class LoginController {
vo = iLoginService.accountLogin(params);
break;
}
return AjaxResult.success(vo);
}
@ -70,12 +78,16 @@ public class LoginController {
* 公众号登录
*
* @author fzr
* @param params 参数
* @param oaLoginValidate 参数
* @return AjaxResult<LoginTokenVo>
*/
@GetMapping("/oaLogin")
public AjaxResult<LoginTokenVo> oaLogin(@RequestParam Map<String, String> params) {
LoginTokenVo vo = iLoginService.officeLogin(params);
@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();
LoginTokenVo vo = iLoginService.officeLogin(code, client);
return AjaxResult.success(vo);
}
@ -99,15 +111,22 @@ public class LoginController {
* 忘记密码
*
* @author fzr
* @param params 参数
* @param forgetPwdValidate 参数
* @return AjaxResult<Object>
*/
@PostMapping("/forgotPassword")
public AjaxResult<Object> forgotPassword(@RequestBody Map<String, String> params) {
iLoginService.forgotPassword(params);
public AjaxResult<Object> forgotPassword(@Validated @RequestBody ForgetPwdValidate forgetPwdValidate) {
iLoginService.forgotPassword(forgetPwdValidate);
return AjaxResult.success();
}
/**
* 扫码链接
*
* @author fzr
* @param session session
* @return AjaxResult<Map<String, String>>
*/
@GetMapping("/getScanCode")
public AjaxResult<Map<String, String>> getScanCode(HttpSession session) {
String qrcodeUrl = iLoginService.getScanCode(session);

View File

@ -1,6 +1,7 @@
package com.mdd.front.service;
import com.mdd.front.validate.UserRegisterValidate;
import com.mdd.front.validate.login.RegisterValidate;
import com.mdd.front.validate.login.ForgetPwdValidate;
import com.mdd.front.vo.LoginTokenVo;
import javax.servlet.http.HttpSession;
@ -15,9 +16,9 @@ public interface ILoginService {
* 账号注册
*
* @author fzr
* @param userRegisterValidate 参数
* @param registerValidate 参数
*/
void register(UserRegisterValidate userRegisterValidate);
void register(RegisterValidate registerValidate);
/**
* 账号登录
@ -41,19 +42,21 @@ public interface ILoginService {
* 微信登录
*
* @author fzr
* @param params 参数
* @param code 微信code
* @param client 来源客户端
* @return LoginTokenVo
*/
LoginTokenVo mnpLogin(Map<String, String> params);
LoginTokenVo mnpLogin(String code, Integer client);
/**
* 公众号登录
*
* @author fzr
* @param params 参数
* @param code 参数
* @param client 参数
* @return LoginTokenVo
*/
LoginTokenVo officeLogin(Map<String, String> params);
LoginTokenVo officeLogin(String code, Integer client);
/**
* 公众号跳转url
@ -68,9 +71,9 @@ public interface ILoginService {
* 忘记密码
*
* @author fzr
* @param params 参数
* @param forgetPwdValidate 参数
*/
void forgotPassword(Map<String, String> params);
void forgotPassword(ForgetPwdValidate forgetPwdValidate);
String getScanCode(HttpSession session);
}

View File

@ -15,7 +15,8 @@ import com.mdd.common.mapper.user.UserMapper;
import com.mdd.common.util.*;
import com.mdd.front.config.FrontConfig;
import com.mdd.front.service.ILoginService;
import com.mdd.front.validate.UserRegisterValidate;
import com.mdd.front.validate.login.RegisterValidate;
import com.mdd.front.validate.login.ForgetPwdValidate;
import com.mdd.front.vo.LoginTokenVo;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.api.WxConsts;
@ -49,13 +50,13 @@ public class LoginServiceImpl implements ILoginService {
* 注册账号
*
* @author fzr
* @param userRegisterValidate 参数
* @param registerValidate 参数
*/
@Override
public void register(UserRegisterValidate userRegisterValidate) {
public void register(RegisterValidate registerValidate) {
User model = userMapper.selectOne(new QueryWrapper<User>()
.select("id,sn,username")
.eq("username", userRegisterValidate.getUsername())
.eq("username", registerValidate.getUsername())
.eq("is_delete", 0)
.last("limit 1"));
@ -63,16 +64,16 @@ public class LoginServiceImpl implements ILoginService {
Integer sn = this.randMakeSn();
String salt = ToolsUtils.randomString(5);
String pwd = ToolsUtils.makeMd5(userRegisterValidate.getPassword()+salt);
String pwd = ToolsUtils.makeMd5(registerValidate.getPassword()+salt);
User user = new User();
user.setSn(sn);
user.setNickname("用户"+sn);
user.setUsername(userRegisterValidate.getUsername());
user.setUsername(registerValidate.getUsername());
user.setPassword(pwd);
user.setSalt(salt);
user.setAvatar("/api/static/default_avatar.png");
user.setChannel(userRegisterValidate.getClient());
user.setChannel(registerValidate.getClient());
user.setCreateTime(System.currentTimeMillis() / 1000);
user.setUpdateTime(System.currentTimeMillis() / 1000);
userMapper.insert(user);
@ -157,19 +158,13 @@ public class LoginServiceImpl implements ILoginService {
* 微信小程序登录
*
* @author fzr
* @param params 参数
* @param code 微信code
* @param client 来源客户端
* @return LoginTokenVo
*/
@Override
@Transactional
public LoginTokenVo mnpLogin(Map<String, String> params) {
Assert.notNull(params.get("code"), "code参数缺失!");
String code = params.get("code");
String avatarUrl = params.getOrDefault("avatarUrl", "/api/static/default_avatar.png");
String nickName = params.getOrDefault("nickName", "微信用户");
String gender = params.getOrDefault("gender", "0");
Integer client = Integer.parseInt(params.getOrDefault("client", "1"));
public LoginTokenVo mnpLogin(String code, Integer client) {
try {
WxMaService wxMaService = WeChatUtils.mnp();
WxMaJscode2SessionResult sessionResult = wxMaService.getUserService().getSessionInfo(code);
@ -196,10 +191,10 @@ public class LoginServiceImpl implements ILoginService {
Integer sn = this.randMakeSn();
User model = new User();
model.setSn(sn);
model.setAvatar(avatarUrl);
model.setNickname(nickName.equals("") ? "用户"+sn : nickName);
model.setAvatar("/api/static/default_avatar.png");
model.setNickname("用户"+sn);
model.setUsername("u"+sn);
model.setSex(Integer.parseInt(gender));
model.setSex(0);
model.setChannel(client);
model.setLastLoginIp(IpUtils.getHostIp());
model.setLastLoginTime(System.currentTimeMillis() / 1000);
@ -227,13 +222,6 @@ public class LoginServiceImpl implements ILoginService {
userAuthMapper.updateById(userAuth);
}
// 更新用户信息
if (StringUtils.isEmpty(user.getAvatar()) && StringUtils.isNotEmpty(avatarUrl)) {
user.setAvatar(avatarUrl);
user.setNickname(nickName);
user.setSex(Integer.parseInt(gender));
}
// 更新登录信息
user.setLastLoginIp(IpUtils.getHostIp());
user.setLastLoginTime(System.currentTimeMillis() / 1000);
@ -254,10 +242,7 @@ public class LoginServiceImpl implements ILoginService {
* @return LoginTokenVo
*/
@Override
public LoginTokenVo officeLogin(Map<String, String> params) {
Assert.notNull(params.get("code"), "code参数缺失!");
String code = params.get("code");
public LoginTokenVo officeLogin(String code, Integer client) {
try {
WxMpService wxMpService = WeChatUtils.official();
WxOAuth2AccessToken wxOAuth2AccessToken = wxMpService.getOAuth2Service().getAccessToken(code);
@ -286,8 +271,8 @@ public class LoginServiceImpl implements ILoginService {
model.setSn(sn);
model.setAvatar("/api/static/default_avatar.png");
model.setNickname("用户" + sn);
model.setUsername("u"+sn);
model.setChannel(ClientEnum.OA.getCode());
model.setUsername("u" + sn);
model.setChannel(client);
model.setSex(0);
model.setLastLoginIp(IpUtils.getHostIp());
model.setLastLoginTime(System.currentTimeMillis() / 1000);
@ -345,16 +330,13 @@ public class LoginServiceImpl implements ILoginService {
* 忘记密码
*
* @author fzr
* @param params 参数
* @param forgetPwdValidate 参数
*/
@Override
public void forgotPassword(Map<String, String> params) {
Assert.notNull(params.get("mobile"), "mobile参数缺失!");
Assert.notNull(params.get("code"), "code参数缺失!");
Assert.notNull(params.get("password"), "password参数缺失!");
String mobile = params.get("mobile");
String code = params.get("code");
String password = params.get("password");
public void forgotPassword(ForgetPwdValidate forgetPwdValidate) {
String mobile = forgetPwdValidate.getMobile();
String code = forgetPwdValidate.getCode();
String password = forgetPwdValidate.getPassword();
// 校验验证码
int typeCode = NoticeEnum.SMS_FORGOT_PASSWORD_CODE.getCode();

View File

@ -0,0 +1,25 @@
package com.mdd.front.validate.login;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* 忘记密码参数
*/
@Data
public class ForgetPwdValidate implements Serializable {
private static final long serialVersionUID = 1L;
@NotNull(message = "mobile参数缺失")
private String mobile;
@NotNull(message = "code参数缺失")
private String code;
@NotNull(message = "password参数缺失")
private String password;
}

View File

@ -0,0 +1,23 @@
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,4 +1,4 @@
package com.mdd.front.validate;
package com.mdd.front.validate.login;
import com.mdd.common.validator.annotation.IntegerContains;
import lombok.Data;
@ -13,7 +13,7 @@ import java.io.Serializable;
* 注册参数类
*/
@Data
public class UserRegisterValidate implements Serializable {
public class RegisterValidate implements Serializable {
private static final long serialVersionUID = 1L;