From 916ec71b55cad152b8318a9a26b344bba5a53764 Mon Sep 17 00:00:00 2001 From: lijiarao Date: Thu, 23 Sep 2021 15:38:41 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E4=BC=81=E4=B8=9A=E7=AB=AF=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=99=BB=E5=BD=95=E5=88=A4=E6=96=AD=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E4=B8=BA=E6=9C=89=E5=AF=86=E7=A0=81=EF=BC=8C=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E4=BF=AE=E6=94=B9=E5=AF=86=E7=A0=81=EF=BC=8C?= =?UTF-8?q?=E5=8F=91=E9=80=81=E9=AA=8C=E8=AF=81=E7=A0=81=EF=BC=8C=E7=99=BB?= =?UTF-8?q?=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jero/config/shiro/ShiroConfig.java | 7 ++- .../controller/CompanyLoginController.java | 45 +++++++++++++-- .../mapper/PayContactsManagementMapper.java | 15 +++-- .../xml/PayContactsManagementMapper.xml | 7 +++ .../IPayContactsManagementService.java | 2 + .../PayContactsManagementServiceImpl.java | 55 +++++++++++++++++++ .../com/jero/company/vo/CompanyLoginVO.java | 29 +++++++--- 7 files changed, 139 insertions(+), 21 deletions(-) diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java index b1f8bae5..b8839932 100644 --- a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java @@ -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"); diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/company/controller/CompanyLoginController.java b/jero-boot-incoming-payment/src/main/java/com/jero/company/controller/CompanyLoginController.java index d23cb58b..09029dd3 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/company/controller/CompanyLoginController.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/company/controller/CompanyLoginController.java @@ -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 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 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("修改密码成功"); } diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/company/mapper/PayContactsManagementMapper.java b/jero-boot-incoming-payment/src/main/java/com/jero/company/mapper/PayContactsManagementMapper.java index 0c528409..5610f887 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/company/mapper/PayContactsManagementMapper.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/company/mapper/PayContactsManagementMapper.java @@ -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 { /** * @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 listPayContactsManagement(List phoneList); + + void forgetPassword(@Param("companyLoginVO") CompanyLoginVO companyLoginVO); } diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/company/mapper/xml/PayContactsManagementMapper.xml b/jero-boot-incoming-payment/src/main/java/com/jero/company/mapper/xml/PayContactsManagementMapper.xml index e1253cd6..81307450 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/company/mapper/xml/PayContactsManagementMapper.xml +++ b/jero-boot-incoming-payment/src/main/java/com/jero/company/mapper/xml/PayContactsManagementMapper.xml @@ -59,4 +59,11 @@ #{item} + + + update pay_contacts_management set password = #{companyLoginVO.password} + + phone = #{companyLoginVO.phone} + + \ No newline at end of file diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/company/service/IPayContactsManagementService.java b/jero-boot-incoming-payment/src/main/java/com/jero/company/service/IPayContactsManagementService.java index fa92f946..8047fad2 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/company/service/IPayContactsManagementService.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/company/service/IPayContactsManagementService.java @@ -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 listPayContactsManagement(List phoneList); + void changePassword(CompanyLoginVO companyLoginVO); } diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/company/service/impl/PayContactsManagementServiceImpl.java b/jero-boot-incoming-payment/src/main/java/com/jero/company/service/impl/PayContactsManagementServiceImpl.java index 4845da49..14184292 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/company/service/impl/PayContactsManagementServiceImpl.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/company/service/impl/PayContactsManagementServiceImpl.java @@ -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 queryPageList(Page page, PayContactsManagement payContactsManagement) { @@ -51,4 +62,48 @@ public class PayContactsManagementServiceImpl extends ServiceImpl listPayContactsManagement(List 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 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()); + } } diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/company/vo/CompanyLoginVO.java b/jero-boot-incoming-payment/src/main/java/com/jero/company/vo/CompanyLoginVO.java index 35f18ce0..88cc6e9a 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/company/vo/CompanyLoginVO.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/company/vo/CompanyLoginVO.java @@ -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; + }