add 用户登录判断是否为初始密码,增加忘记密码,发送验证码
This commit is contained in:
+4
-1
@@ -310,5 +310,8 @@ public interface ISysBaseAPI extends CommonAPI {
|
||||
* @param list 文件集合(路径+文件)
|
||||
*/
|
||||
void sendEmailMsgAndFile(String email, String title, String content,List<String> list);
|
||||
|
||||
/**
|
||||
* 发送短信验证码
|
||||
*/
|
||||
void sendVerificationCode(String phone, String codeType, String codeTime,String templateParas);
|
||||
}
|
||||
|
||||
+1
@@ -85,6 +85,7 @@ public class ShiroConfig {
|
||||
filterChainDefinitionMap.put("/sys/user/checkOnlyUser", "anon");//校验用户是否存在
|
||||
filterChainDefinitionMap.put("/sys/user/register", "anon");//用户注册
|
||||
filterChainDefinitionMap.put("/sys/user/querySysUser", "anon");//根据手机号获取用户信息
|
||||
filterChainDefinitionMap.put("/sys/user/forgetPassword", "anon");//忘记密码
|
||||
filterChainDefinitionMap.put("/sys/user/phoneVerification", "anon");//用户忘记密码验证手机号
|
||||
filterChainDefinitionMap.put("/sys/user/passwordChange", "anon");//用户更改密码
|
||||
filterChainDefinitionMap.put("/auth/2step-code", "anon");//登录验证码
|
||||
|
||||
+27
@@ -12,11 +12,13 @@ import com.jero.common.util.*;
|
||||
import com.jero.company.entity.PayContactsManagement;
|
||||
import com.jero.company.service.IPayContactsManagementService;
|
||||
import com.jero.modules.base.service.BaseCommonService;
|
||||
import com.jero.modules.system.entity.SysUser;
|
||||
import com.jero.modules.system.model.SysLoginModel;
|
||||
import com.jero.modules.system.service.ISysDictService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
@@ -159,4 +161,29 @@ public class CompanyLoginController {
|
||||
result.setResult(obj);
|
||||
result.success("登录成功");
|
||||
}
|
||||
|
||||
@ApiOperation(value = "发送手机号验证码")
|
||||
@GetMapping(value = "/sendVerificationCode")
|
||||
public Result<?> sendVerificationCode(String mobile) {
|
||||
mobile = PasswordUtil.encrypt(mobile);
|
||||
LambdaQueryWrapper<PayContactsManagement> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(PayContactsManagement::getPhone, mobile);
|
||||
PayContactsManagement contactsManagement = payContactsManagementService.getOne(queryWrapper);
|
||||
if (Objects.isNull(contactsManagement)){
|
||||
throw new JeroBootException("手机号不是企业联系人");
|
||||
}
|
||||
sysBaseAPI.sendVerificationCode(mobile,"2",null,null);
|
||||
if (StringUtils.isBlank(contactsManagement.getPassword())){
|
||||
return Result.error("updatePassword");
|
||||
}
|
||||
return Result.OK();
|
||||
}
|
||||
|
||||
@ApiOperation(value = "忘记密码", notes = "忘记密码")
|
||||
@PostMapping(value = "/forgetPassword")
|
||||
public Result<?> forgetPassword(@RequestBody PayContactsManagement user) {
|
||||
//payContactsManagementService.forgetPassword(user);
|
||||
return Result.OK("修改密码成功");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.jero.company.vo;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import org.jeecgframework.poi.excel.annotation.Excel;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.Pattern;
|
||||
|
||||
/**
|
||||
* 企业端登录
|
||||
* @author liJiaRao
|
||||
* @date 2021-09-23 14:59
|
||||
*/
|
||||
public class CompanyLoginVO {
|
||||
/**手机号*/
|
||||
@ApiModelProperty(value = "手机号")
|
||||
@NotEmpty(message = "手机号不能为空!")
|
||||
@Pattern(regexp = "^((13[0-9])|(14[579])|(15([0-3]|[5-9]))|(17[0135678])|(18[0-9])|(19[8|9])|(16[6]))\\d{8}$",message = "手机号码格式错误")
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 验证码
|
||||
*/
|
||||
@ApiModelProperty(value = "验证码")
|
||||
@TableField(exist = false)
|
||||
private String verifyCode;
|
||||
|
||||
@TableField(exist = false)
|
||||
@ApiModelProperty(value = "RSA公钥")
|
||||
private String rsapublickey;
|
||||
|
||||
/**
|
||||
* 确认密码
|
||||
*/
|
||||
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
|
||||
@ApiModelProperty(value = "确认密码")
|
||||
@TableField(exist = false)
|
||||
private String verifyPassword;
|
||||
}
|
||||
+16
-1
@@ -28,6 +28,7 @@ import com.jero.modules.system.service.ISysUserService;
|
||||
import com.jero.modules.system.util.RandImageUtil;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
@@ -74,6 +75,9 @@ public class LoginController {
|
||||
*/
|
||||
public static final int RETRY_LOGIN_MAX_COUNT = 5;
|
||||
|
||||
@Value("${defaultPassword}")
|
||||
private String defaultPassword;
|
||||
|
||||
@ApiOperation("登录接口")
|
||||
@RequestMapping(value = "/login", method = RequestMethod.POST)
|
||||
public Result<JSONObject> login(@RequestBody SysLoginModel sysLoginModel) {
|
||||
@@ -146,7 +150,11 @@ public class LoginController {
|
||||
}
|
||||
//登录成功,清除错误登录次数
|
||||
redisUtil.del(RETRY_LOGIN_PREFIX + username);
|
||||
|
||||
//如果用初始密码登录,前端就跳转到修改密码界面
|
||||
if(defaultPassword.equals(password)){
|
||||
result.error500("updatePassword");
|
||||
return result;
|
||||
}
|
||||
//用户登录信息
|
||||
userInfo(sysUser, result);
|
||||
//update-begin--Author:wangshuai Date:20200714 for:登录日志没有记录人员
|
||||
@@ -585,4 +593,11 @@ public class LoginController {
|
||||
public String getStandardsRSAPublicKey() {
|
||||
return authenticationUtils.getPublicKey();
|
||||
}
|
||||
|
||||
@ApiOperation(value = "忘记密码", notes = "忘记密码")
|
||||
@PostMapping(value = "/forgetPassword")
|
||||
public Result<?> forgetPassword(@RequestBody SysUser user) {
|
||||
sysUserService.forgetPassword(user);
|
||||
return Result.OK("修改密码成功");
|
||||
}
|
||||
}
|
||||
@@ -2,11 +2,13 @@ package com.jero.modules.system.entity;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.jero.common.aspect.annotation.Dict;
|
||||
import com.jero.modules.system.volid.group.CreateGroup;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import org.jeecgframework.poi.excel.annotation.Excel;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
@@ -187,4 +189,23 @@ public class SysUser implements Serializable {
|
||||
|
||||
/**设备id uniapp推送用*/
|
||||
private String clientId;
|
||||
|
||||
/**
|
||||
* 验证码
|
||||
*/
|
||||
@ApiModelProperty(value = "验证码")
|
||||
@TableField(exist = false)
|
||||
private String verifyCode;
|
||||
|
||||
@TableField(exist = false)
|
||||
@ApiModelProperty(value = "RSA公钥")
|
||||
private String rsapublickey;
|
||||
|
||||
/**
|
||||
* 确认密码
|
||||
*/
|
||||
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
|
||||
@ApiModelProperty(value = "确认密码")
|
||||
@TableField(exist = false)
|
||||
private String verifyPassword;
|
||||
}
|
||||
|
||||
+3
@@ -165,4 +165,7 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
|
||||
List<SysRole> getRoleNameByUserIds(@Param("userIds") List<String> userIds);
|
||||
|
||||
PayContactsManagement getPayContactsManagementByPhone(@Param("username") String username);
|
||||
|
||||
void forgetPassword(@Param("user") SysUser user);
|
||||
|
||||
}
|
||||
|
||||
+5
@@ -204,4 +204,9 @@
|
||||
select *
|
||||
from pay_contacts_management where phone = #{username};
|
||||
</select>
|
||||
|
||||
<update id="forgetPassword">
|
||||
update sys_user set password = #{user.password}
|
||||
where username = #{user.username}
|
||||
</update>
|
||||
</mapper>
|
||||
+2
@@ -240,4 +240,6 @@ public interface ISysUserService extends IService<SysUser> {
|
||||
Map<String, String> getRoleNameByUserIds(List<String> userIds);
|
||||
|
||||
String resetPassword(String username);
|
||||
|
||||
void forgetPassword(SysUser user);
|
||||
}
|
||||
|
||||
+8
@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.google.common.base.Joiner;
|
||||
import com.jero.common.util.HuaWeiSmsUtil;
|
||||
import com.jero.modules.oss.mapper.OSSFileMapper;
|
||||
import com.jero.modules.pay.company.entity.PayContactsManagement;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -96,6 +97,8 @@ public class SysBaseApiImpl implements ISysBaseAPI {
|
||||
private SysPermissionMapper sysPermissionMapper;
|
||||
@Autowired
|
||||
private ISysPermissionDataRuleService sysPermissionDataRuleService;
|
||||
@Resource
|
||||
private HuaWeiSmsUtil huaWeiSmsUtil;
|
||||
@Override
|
||||
@Cacheable(cacheNames=CacheConstant.SYS_USERS_CACHE, key="#username")
|
||||
public LoginUser getUserByName(String username) {
|
||||
@@ -1021,6 +1024,11 @@ public class SysBaseApiImpl implements ISysBaseAPI {
|
||||
emailHandle.SendMsgAndFile(email, title, content,list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendVerificationCode(String phone, String codeType, String codeTime, String templateParas) {
|
||||
huaWeiSmsUtil.sendVerificationCode(phone, codeType, codeTime, templateParas);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据部门id查询部门所有的父级(不包含自己)
|
||||
* @author 马志朝
|
||||
|
||||
+78
-3
@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.jero.common.exception.JeroBootException;
|
||||
import com.jero.common.util.*;
|
||||
import com.jero.modules.system.vo.SysUserVo;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import com.jero.common.api.vo.Result;
|
||||
@@ -14,9 +16,6 @@ import com.jero.common.system.api.ISysBaseAPI;
|
||||
import com.jero.modules.base.service.BaseCommonService;
|
||||
import com.jero.common.system.vo.LoginUser;
|
||||
import com.jero.common.system.vo.SysUserCacheInfo;
|
||||
import com.jero.common.util.PasswordUtil;
|
||||
import com.jero.common.util.UUIDGenerator;
|
||||
import com.jero.common.util.oConvertUtils;
|
||||
import com.jero.modules.system.entity.*;
|
||||
import com.jero.modules.system.mapper.*;
|
||||
import com.jero.modules.system.model.SysUserSysDepartModel;
|
||||
@@ -27,6 +26,7 @@ import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.cache.annotation.CacheEvict;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.*;
|
||||
@@ -64,6 +64,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
private SysDepartRoleMapper sysDepartRoleMapper;
|
||||
@Resource
|
||||
private BaseCommonService baseCommonService;
|
||||
@Autowired
|
||||
private RedisUtil redisUtil;
|
||||
@Value("${defaultPassword}")
|
||||
private String defaultPassword;
|
||||
|
||||
@@ -472,4 +474,77 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
return "密码重置成功!,默认密码为:"+defaultPassword;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forgetPassword(SysUser user) {
|
||||
fPRuleCheck(user);
|
||||
//前端传入密码解密
|
||||
String username = user.getUsername();
|
||||
String password = user.getPassword();
|
||||
String verifyPassword = user.getVerifyPassword();
|
||||
String RSAPublicKey = user.getRsapublickey();
|
||||
String RSAPrivateKey = String.valueOf(redisUtil.get(RSAPublicKey));
|
||||
try {
|
||||
password = CommonUtils.decryptBtRsaPriKey(password, RSAPrivateKey);
|
||||
verifyPassword = CommonUtils.decryptBtRsaPriKey(verifyPassword, RSAPrivateKey);
|
||||
user.setPassword(password);
|
||||
user.setVerifyPassword(verifyPassword);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
//处理手机获取验证码的逻辑
|
||||
Object obj = redisUtil.get("_verification:_phone:" + user.getPhone());
|
||||
if (obj == null) {
|
||||
throw new JeroBootException("验证码失效,请重新发送");
|
||||
}
|
||||
String code = obj.toString();
|
||||
if (!user.getVerifyCode().equals(code)) {
|
||||
throw new JeroBootException("验证码错误!");
|
||||
}
|
||||
|
||||
if (!password.equals(verifyPassword)) {
|
||||
throw new JeroBootException("新密码和确认密码不一致,请重新输入");
|
||||
}
|
||||
LambdaQueryWrapper<SysUser> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(SysUser::getUsername, username);
|
||||
SysUser sysUser = userMapper.selectOne(wrapper);
|
||||
if (ObjectUtils.isEmpty(sysUser)) {
|
||||
throw new JeroBootException("用户不存在");
|
||||
}
|
||||
String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(), password, sysUser.getSalt());
|
||||
user.setPassword(passwordEncode);
|
||||
userMapper.forgetPassword(user);
|
||||
redisUtil.del("_verification:_phone:" + user.getPhone());
|
||||
List<String> roles = sysBaseAPI.getRolesByUsername(sysUser.getUsername());
|
||||
//SysRole sysRole = sysRoleMapper.selectOne(new LambdaQueryWrapper<SysRole>().eq(SysRole::getRoleCode, roles.get(0)));
|
||||
}
|
||||
|
||||
/**
|
||||
* 忘记密码校验
|
||||
* @param user
|
||||
*/
|
||||
private void fPRuleCheck(SysUser user){
|
||||
if(ObjectUtils.isEmpty(user.getUsername())){
|
||||
throw new JeroBootException("用户名为必填");
|
||||
}else if(user.getUsername().length()>50){
|
||||
throw new JeroBootException("用户名长度不超过50个字符");
|
||||
}
|
||||
if(ObjectUtils.isEmpty(user.getPhone())){
|
||||
throw new JeroBootException("手机号为必填");
|
||||
}else if(!Assert.isTel(user.getPhone())){
|
||||
throw new JeroBootException("请输入正确的手机号");
|
||||
}
|
||||
if(ObjectUtils.isEmpty(user.getVerifyCode())){
|
||||
throw new JeroBootException("验证码为必填");
|
||||
}else if(user.getVerifyCode().length()>50){
|
||||
throw new JeroBootException("验证码长度不超过50个字符");
|
||||
}
|
||||
if(ObjectUtils.isEmpty(user.getPassword())){
|
||||
throw new JeroBootException("新密码为必填");
|
||||
}
|
||||
if(ObjectUtils.isEmpty(user.getVerifyPassword())){
|
||||
throw new JeroBootException("确认密码为必填");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user