add 企业端用户登录判断是否为有密码,增加短信修改密码,发送验证码,登出

This commit is contained in:
lijiarao
2021-09-23 15:38:41 +08:00
parent 54eeb8c310
commit 916ec71b55
7 changed files with 139 additions and 21 deletions
@@ -93,6 +93,12 @@ public class ShiroConfig {
filterChainDefinitionMap.put("/sys/common/pdf/**", "anon");//pdf预览
filterChainDefinitionMap.put("/generic/**", "anon");//pdf预览需要文件
filterChainDefinitionMap.put("/paymentRecord/payPaymentRecord/standardsAddAR", "anon");//标协会员添加来款
//企业端登录
filterChainDefinitionMap.put("/company/login", "anon");//登录接口排除
filterChainDefinitionMap.put("/company/logout", "anon");//登出接口排除
filterChainDefinitionMap.put("/company/changePassword", "anon");//短信验证码修改密码
filterChainDefinitionMap.put("/company/sendVerificationCode", "anon");//企业端发送验证码
//和会员系统交互的接口
filterChainDefinitionMap.put("/meeting/payMeeting/addStandards","anon");//会员系统推送会议
filterChainDefinitionMap.put("/meeting/payMeeting/addStandardsFile","anon");//会员系统推送文件
@@ -108,7 +114,6 @@ public class ShiroConfig {
filterChainDefinitionMap.put("/company/payContactsManagement/queryByName","anon");//联系人校验
filterChainDefinitionMap.put("/sys/common/download/**","anon");//下载接口
filterChainDefinitionMap.put("/sys/oss/file/queryById","anon");//通过id查询文件
filterChainDefinitionMap.put("/company/login", "anon"); //登录接口排除
filterChainDefinitionMap.put("/", "anon");
filterChainDefinitionMap.put("/doc.html", "anon");
@@ -3,6 +3,7 @@ package com.jero.company.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.api.vo.Result;
import com.jero.common.constant.CacheConstant;
import com.jero.common.constant.CommonConstant;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.api.ISysBaseAPI;
@@ -11,19 +12,22 @@ import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.*;
import com.jero.company.entity.PayContactsManagement;
import com.jero.company.service.IPayContactsManagementService;
import com.jero.company.vo.CompanyLoginVO;
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.apache.shiro.SecurityUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Objects;
/**
@@ -136,6 +140,37 @@ public class CompanyLoginController {
return result;
}
/**
* 退出登录
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/logout")
public Result<Object> logout(HttpServletRequest request, HttpServletResponse response) {
//用户退出逻辑
String token = request.getHeader(CommonConstant.X_ACCESS_TOKEN);
if (oConvertUtils.isEmpty(token)) {
return Result.error("退出登录失败!");
}
String phone = JwtUtil.getUsername(token);
LambdaQueryWrapper<PayContactsManagement> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PayContactsManagement::getPhone, phone);
PayContactsManagement contactsManagement = payContactsManagementService.getOne(queryWrapper);
if (contactsManagement != null) {
baseCommonService.addLog("用户名: " + contactsManagement.getName() + ",退出成功!", CommonConstant.LOG_TYPE_1, null, null);
log.info(" 企业端用户: " + contactsManagement.getName() + ",退出成功! ");
//清空用户登录Token缓存
redisUtil.del(CommonConstant.PREFIX_USER_TOKEN + token);
//调用shiro的logout
SecurityUtils.getSubject().logout();
return Result.OK("退出登录成功!");
} else {
return Result.error("Token无效!");
}
}
/**
* 用户信息
*
@@ -179,10 +214,10 @@ public class CompanyLoginController {
return Result.OK();
}
@ApiOperation(value = "忘记密码", notes = "忘记密码")
@PostMapping(value = "/forgetPassword")
public Result<?> forgetPassword(@RequestBody PayContactsManagement user) {
//payContactsManagementService.forgetPassword(user);
@ApiOperation(value = "短信验证码修改密码")
@PostMapping(value = "/changePassword")
public Result<?> changePassword(@RequestBody CompanyLoginVO companyLoginVO) {
payContactsManagementService.changePassword(companyLoginVO);
return Result.OK("修改密码成功");
}
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.company.entity.PayContactsManagement;
import com.jero.company.vo.CompanyLoginVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -12,15 +13,15 @@ import java.util.List;
/**
* @Description: pay_contacts_management
* @Author: jeecg-boot
* @Date: 2021-08-25
* @Date: 2021-08-25
* @Version: V1.0
*/
public interface PayContactsManagementMapper extends BaseMapper<PayContactsManagement> {
/**
* @Description 分页查询
* @Author lqt
* @Date 2021/8/27
* @Author lqt
* @Date 2021/8/27
* @Param
* @Return
* @Exception
@@ -29,11 +30,13 @@ public interface PayContactsManagementMapper extends BaseMapper<PayContactsManag
/**
* @Description 根据手机号查询联系人信息
* @Author lqt
* @Date 2021/8/30
* @Param phoneList 手机号集合
* @Author lqt
* @Date 2021/8/30
* @Param phoneList 手机号集合
* @Return
* @Exception
*/
List<PayContactsManagement> listPayContactsManagement(List<String> phoneList);
void forgetPassword(@Param("companyLoginVO") CompanyLoginVO companyLoginVO);
}
@@ -59,4 +59,11 @@
#{item}
</foreach>
</select>
<update id="forgetPassword">
update pay_contacts_management set password = #{companyLoginVO.password}
<where>
phone = #{companyLoginVO.phone}
</where>
</update>
</mapper>
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.company.entity.PayCompanyManagement;
import com.jero.company.entity.PayContactsManagement;
import com.jero.company.vo.CompanyLoginVO;
import java.util.List;
@@ -48,4 +49,5 @@ public interface IPayContactsManagementService extends IService<PayContactsManag
*/
List<PayContactsManagement> listPayContactsManagement(List<String> phoneList);
void changePassword(CompanyLoginVO companyLoginVO);
}
@@ -1,16 +1,25 @@
package com.jero.company.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.CommonUtils;
import com.jero.common.util.PasswordUtil;
import com.jero.common.util.RedisUtil;
import com.jero.common.util.ValidUtil;
import com.jero.company.entity.PayContactsManagement;
import com.jero.company.mapper.PayContactsManagementMapper;
import com.jero.company.service.IPayContactsManagementService;
import com.jero.company.vo.CompanyLoginVO;
import com.jero.modules.system.entity.SysUser;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.util.List;
@@ -28,6 +37,8 @@ public class PayContactsManagementServiceImpl extends ServiceImpl<PayContactsMan
@Resource
PayContactsManagementMapper payContactsManagementMapper;
@Resource
private RedisUtil redisUtil;
@Override
public IPage<PayContactsManagement> queryPageList(Page<PayContactsManagement> page, PayContactsManagement payContactsManagement) {
@@ -51,4 +62,48 @@ public class PayContactsManagementServiceImpl extends ServiceImpl<PayContactsMan
public List<PayContactsManagement> listPayContactsManagement(List<String> phoneList) {
return payContactsManagementMapper.listPayContactsManagement(phoneList);
}
@Override
public void changePassword(CompanyLoginVO companyLoginVO) {
ValidUtil.validate(companyLoginVO);
//前端传入密码解密
String phone = companyLoginVO.getPhone();
String password = companyLoginVO.getPassword();
String verifyPassword = companyLoginVO.getVerifyPassword();
String RSAPublicKey = companyLoginVO.getRsapublickey();
String RSAPrivateKey = String.valueOf(redisUtil.get(RSAPublicKey));
try {
password = CommonUtils.decryptBtRsaPriKey(password, RSAPrivateKey);
verifyPassword = CommonUtils.decryptBtRsaPriKey(verifyPassword, RSAPrivateKey);
companyLoginVO.setPassword(password);
companyLoginVO.setVerifyPassword(verifyPassword);
} catch (Exception e) {
e.printStackTrace();
}
//处理手机获取验证码的逻辑
Object obj = redisUtil.get("_verification:_phone:" + companyLoginVO.getPhone());
if (obj == null) {
throw new JeroBootException("验证码失效,请重新发送");
}
String code = obj.toString();
if (!companyLoginVO.getVerifyCode().equals(code)) {
throw new JeroBootException("验证码错误!");
}
if (!password.equals(verifyPassword)) {
throw new JeroBootException("新密码和确认密码不一致,请重新输入");
}
LambdaQueryWrapper<PayContactsManagement> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PayContactsManagement::getPhone, phone);
PayContactsManagement contactsManagement = this.getOne(queryWrapper);
if (ObjectUtils.isEmpty(contactsManagement)) {
throw new JeroBootException("用户不存在");
}
String passwordEncode = PasswordUtil.encrypt(contactsManagement.getPhone(), password, contactsManagement.getSalt());
companyLoginVO.setPassword(passwordEncode);
payContactsManagementMapper.forgetPassword(companyLoginVO);
redisUtil.del("_verification:_phone:" + companyLoginVO.getPhone());
}
}
@@ -3,6 +3,7 @@ package com.jero.company.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import javax.validation.constraints.NotEmpty;
@@ -13,6 +14,7 @@ import javax.validation.constraints.Pattern;
* @author liJiaRao
* @date 2021-09-23 14:59
*/
@Data
public class CompanyLoginVO {
/**手机号*/
@ApiModelProperty(value = "手机号")
@@ -21,21 +23,30 @@ public class CompanyLoginVO {
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 = "密码")
@NotEmpty(message = "密码不能为空!")
private String password;
/**
* 确认密码
*/
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
@ApiModelProperty(value = "确认密码")
@TableField(exist = false)
@NotEmpty(message = "确认密码不能为空!")
private String verifyPassword;
/**
* 验证码
*/
@ApiModelProperty(value = "验证码")
@NotEmpty(message = "验证码不能为空!")
private String verifyCode;
@ApiModelProperty(value = "RSA公钥")
@NotEmpty(message = "RSA公钥不能为空!")
private String rsapublickey;
}