diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/LoginUserTypeEnum.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/LoginUserTypeEnum.java new file mode 100644 index 00000000..1be8cf7a --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/LoginUserTypeEnum.java @@ -0,0 +1,14 @@ +package com.jero.common.constant.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author liJiaRao + * @date 2022-08-15 10:27 + */ +@Getter +@AllArgsConstructor +public enum LoginUserTypeEnum { + system_, company_management_, company_ +} 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 86d4ee9b..610af898 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 @@ -109,6 +109,15 @@ public class ShiroConfig { filterChainDefinitionMap.put("/company/WCLogin", "anon");//微信登录 filterChainDefinitionMap.put("/company/jscode2session", "anon");//微信登录凭证校验 + filterChainDefinitionMap.put("/companyManager/login", "anon");//登录接口排除 + filterChainDefinitionMap.put("/companyManager/smsLogin", "anon");//短信登录接口排除 + filterChainDefinitionMap.put("/companyManager/logout", "anon");//登出接口排除 + filterChainDefinitionMap.put("/companyManager/verificationChangePassword", "anon");//短信验证码修改密码 + filterChainDefinitionMap.put("/companyManager/changePasswordWithToken", "anon");//token修改密码 + filterChainDefinitionMap.put("/companyManager/sendVerificationCode", "anon");//企业端发送验证码 + filterChainDefinitionMap.put("/companyManager/WCLogin", "anon");//微信登录 + filterChainDefinitionMap.put("/companyManager/jscode2session", "anon");//微信登录凭证校验 + //和会员系统交互的接口 //filterChainDefinitionMap.put("/meeting/payMeeting/addStandards","anon");//会员系统推送会议 diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroRealm.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroRealm.java index dd77876c..9fec08de 100644 --- a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroRealm.java +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroRealm.java @@ -1,6 +1,7 @@ package com.jero.config.shiro; import cn.hutool.crypto.SecureUtil; +import com.jero.common.constant.enums.LoginUserTypeEnum; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; @@ -144,26 +145,36 @@ public class ShiroRealm extends AuthorizingRealm { * @return */ public boolean jwtTokenRefresh(String token, String userName, String passWord) { - String cacheToken = String.valueOf(redisUtil.get(CommonConstant.PREFIX_USER_TOKEN + token)); - if (oConvertUtils.isNotEmpty(cacheToken)) { - // 校验token有效性 - if (!JwtUtil.verify(cacheToken, userName, passWord)) { - String newAuthorization = JwtUtil.sign(userName, passWord); - // 设置超时时间 - redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, newAuthorization); - redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME *2 / 1000); - log.debug("——————————用户在线操作,更新token保证不掉线—————————jwtTokenRefresh——————— "+ token); + if (userName.startsWith(LoginUserTypeEnum.company_management_.toString())){ + String cacheToken = String.valueOf(redisUtil.get(CommonConstant.PREFIX_USER_TOKEN + userName)); + if (oConvertUtils.isNotEmpty(cacheToken)) { + // 校验token有效性 + if (!JwtUtil.verify(cacheToken, userName, passWord)) { + //String newAuthorization = JwtUtil.sign(userName, passWord); + // 设置超时时间 + //redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, newAuthorization); + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + userName, JwtUtil.EXPIRE_TIME *2 / 1000); + + log.debug("——————————用户在线操作,更新token保证不掉线—————————jwtTokenRefresh——————— "+ token); + } + return true; } - //update-begin--Author:scott Date:20191005 for:解决每次请求,都重写redis中 token缓存问题 -// else { -// // 设置超时时间 -// redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, cacheToken); -// redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 1000); -// } - //update-end--Author:scott Date:20191005 for:解决每次请求,都重写redis中 token缓存问题 - return true; + return false; + }else{ + String cacheToken = String.valueOf(redisUtil.get(CommonConstant.PREFIX_USER_TOKEN + token)); + if (oConvertUtils.isNotEmpty(cacheToken)) { + // 校验token有效性 + if (!JwtUtil.verify(cacheToken, userName, passWord)) { + //String newAuthorization = JwtUtil.sign(userName, passWord); + // 设置超时时间 + //redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, newAuthorization); + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME *2 / 1000); + log.debug("——————————用户在线操作,更新token保证不掉线—————————jwtTokenRefresh——————— "+ token); + } + return true; + } + return false; } - return false; } /** diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/company/controller/CompanyManagerLoginController.java b/jero-boot-incoming-payment/src/main/java/com/jero/company/controller/CompanyManagerLoginController.java index b86af879..c8cc9780 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/company/controller/CompanyManagerLoginController.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/company/controller/CompanyManagerLoginController.java @@ -5,22 +5,17 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.jero.common.api.vo.Result; import com.jero.common.constant.CommonConstant; +import com.jero.common.constant.enums.LoginUserTypeEnum; import com.jero.common.exception.JeroBootException; import com.jero.common.system.api.ISysBaseAPI; import com.jero.common.system.util.JwtUtil; import com.jero.common.system.vo.LoginUser; import com.jero.common.util.*; import com.jero.company.entity.PayCompanyManagement; -import com.jero.company.entity.PayContactsManagement; import com.jero.company.entity.PayManagerManagement; -import com.jero.company.mapper.WxSecretMapper; import com.jero.company.service.IPayCompanyManagementService; -import com.jero.company.service.IPayContactsManagementService; import com.jero.company.service.IPayManagerManagementService; -import com.jero.company.vo.CompanyLoginVO; import com.jero.company.vo.CompanyManagerLoginVO; -import com.jero.data.entity.PayCaseCouncilSubitem; -import com.jero.data.service.IPayCaseCouncilSubitemService; import com.jero.modules.base.service.BaseCommonService; import com.jero.modules.system.model.SysLoginModel; import com.jero.modules.system.service.ISysDictService; @@ -228,15 +223,13 @@ public class CompanyManagerLoginController { if (oConvertUtils.isEmpty(token)) { return Result.error("退出登录失败!"); } - String phone = JwtUtil.getUsername(token); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(PayManagerManagement::getPhone, phone); - PayManagerManagement managerManagement = payManagerManagementService.getOne(queryWrapper); - if (managerManagement != null) { - baseCommonService.addLog("手机号: " + PasswordUtil.decrypt(phone) + ",退出成功!", CommonConstant.LOG_TYPE_1, null, null); - log.info(" 企业端用户: " + managerManagement.getName() + ",退出成功! "); + String username = JwtUtil.getUsername(token); + LoginUser sysUser = sysBaseAPI.getUserByName(username); + if (sysUser != null) { + baseCommonService.addLog("手机号: " + PasswordUtil.decrypt(sysUser.getPhone()) + ",退出成功!", CommonConstant.LOG_TYPE_1, null, null); + log.info(" 企业端用户: " + sysUser.getRealname() + ",退出成功! "); //清空用户登录Token缓存 - redisUtil.del(CommonConstant.PREFIX_USER_TOKEN + token); + redisUtil.del(CommonConstant.PREFIX_USER_TOKEN + username); //调用shiro的logout SecurityUtils.getSubject().logout(); return Result.OK("退出登录成功!"); @@ -320,10 +313,10 @@ public class CompanyManagerLoginController { managerManagement.setCompanyRole(one.getRoleCode()); } // 生成token - String token = JwtUtil.sign(phone, syspassword); + String token = JwtUtil.sign(LoginUserTypeEnum.company_management_ + phone, syspassword); // 设置token缓存有效时间 - redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); - redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000); + redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + LoginUserTypeEnum.company_management_ + phone, token); + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + LoginUserTypeEnum.company_management_ + phone, JwtUtil.EXPIRE_TIME * 2 / 1000); JSONObject obj = new JSONObject(); obj.put("token", token); diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/company/controller/PayManagerManagementController.java b/jero-boot-incoming-payment/src/main/java/com/jero/company/controller/PayManagerManagementController.java index 1679e6c5..a00acdee 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/company/controller/PayManagerManagementController.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/company/controller/PayManagerManagementController.java @@ -66,6 +66,9 @@ public class PayManagerManagementController extends JeroController queryWrapper = QueryGenerator.initQueryWrapper(payManagerManagement, req.getParameterMap()); Page page = new Page<>(pageNo, pageSize); IPage pageList = payManagerManagementService.page(page, queryWrapper); + pageList.getRecords().forEach(record -> { + record.setPhone(PasswordUtil.decrypt(record.getPhone())); + }); return Result.OK(pageList); } diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/pay/company/entity/PayManagerManagement.java b/jero-boot-module-system/src/main/java/com/jero/modules/pay/company/entity/PayManagerManagement.java new file mode 100644 index 00000000..d047f804 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/pay/company/entity/PayManagerManagement.java @@ -0,0 +1,181 @@ +package com.jero.modules.pay.company.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.jero.common.aspect.annotation.Dict; +import com.jero.common.util.superSearch.ConstantUtils; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; +import java.io.Serializable; +import java.util.Date; + +/** + * @Description: 企业管理员管理 + * @Author: jero-boot + * @Date: 2022-07-26 + * @Version: V1.0 + */ +@Data +@TableName("pay_manager_management") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="pay_manager_management对象", description="企业管理员管理") +public class PayManagerManagement implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键") + private String id; + + /**企业id*/ + @ApiModelProperty(value = "企业id") + @Size(max = 32, message = "企业id长度不能大于32个字符") + private String companyId; + + /**企业名称(未审核状态下会多出5位,因此修改成55长度)*/ + @Excel(name = "企业名称", width = 15) + @ApiModelProperty(value = "企业名称") + private String companyName; + + /**姓名*/ + @Excel(name = "姓名", width = 15) + @ApiModelProperty(value = "姓名") + @NotEmpty(message = "姓名不能为空") + @Size(max = 50, message = "姓名长度不能大于50个字符") + private String name; + + /**性别(1:男,2:女)*/ + //@Excel(name = "性别", width = 15) + //@ApiModelProperty(value = "性别") + //@Dict(dicCode = "sex") + //private String gender; + + /**职务*/ + //@Excel(name = "职务", width = 15) + //@ApiModelProperty(value = "职务") + //@Size(max = 50, message = "职务长度不能大于50个字符") + //private String post; + + /**手机号*/ + @Excel(name = "手机号", width = 15) + @ApiModelProperty(value = "手机号") + @NotEmpty(message = "手机号不能为空") + @Pattern(regexp = ConstantUtils.TEL_PHONE,message = "手机号格式错误") + private String phone; + + /**邮箱*/ + //@Excel(name = "邮箱", width = 15) + //@ApiModelProperty(value = "邮箱") + //@Pattern(regexp = "^\\w[-\\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\\.)+[A-Za-z]{2,14}$",message = "邮箱格式错误") + //@NotEmpty(message = "邮箱不能为空") + //private String email; + + /**邮箱授权码*/ + //@ApiModelProperty(value = "邮箱授权码") + //private String emailPassword; + + /**通讯地址*/ + //@Excel(name = "通讯地址", width = 15) + //@ApiModelProperty(value = "通讯地址") + //@Size(max = 50, message = "通讯地址长度不能大于50个字符") + //@NotEmpty(message = "通讯地址不能为空") + //private String contactAddress; + + /**邮政编码*/ + //@Excel(name = "邮政编码", width = 15) + //@ApiModelProperty(value = "邮政编码") + //@Size(min=6,max = 6,message = "邮政编码长度必须为6个字符") + //@Pattern(regexp = "^[0-9]\\d{5}$",message = "邮政编码格式错误") + //@NotEmpty(message = "邮政编码不能为空") + //private String postalCode; + + /** + * 密码 + */ + @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) + private String password; + + /** + * md5密码盐 + */ + @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) + private String salt; + + /** + * openId + */ + private String openId; + + /**备注*/ + //@Excel(name = "备注", width = 15) + //@ApiModelProperty(value = "备注") + //@Size(max = 200, message = "备注长度不能大于200个字符") + //private String remarks; + + /**创建人*/ + @ApiModelProperty(value = "创建人") + private String createBy; + + /**创建时间*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建时间") + private Date createTime; + + /**更新人*/ + @ApiModelProperty(value = "更新人") + private String updateBy; + + /**更新时间*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新时间") + private Date updateTime; + + /**删除状态 0:通过 1:未通过(会员系统审核状态)*/ + @Excel(name = "删除状态 ", width = 15) + @ApiModelProperty(value = "删除状态 ") + private String delFlag; + + /**用户名用于会员系统使用*/ + @ApiModelProperty(value = "用户名用于会员系统使用") + private String username; + + /**企业角色1:普通企业、2:会员企业*/ + @Excel(name = "企业角色", width = 15) + @ApiModelProperty(value = "企业角色") + @Dict(dicCode = "company_role") + private String roleCode; + + /**会员性质字段*/ + @ApiModelProperty(value = "会员性质字段") + private String memberNature; + + /**会员企业id*/ + @ApiModelProperty(value = "会员企业id") + private String memberId; + + /**企业角色1:普通企业、2:会员企业*/ + @TableField(exist = false) + @ApiModelProperty(value = "企业角色1:普通企业、2:会员企业") + private String companyRole; + + @TableField(exist = false) + @ApiModelProperty(value = "RSA公钥") + private String rsaPublicKey; + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserMapper.java index b21f0292..0b3dd6b8 100644 --- a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserMapper.java +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserMapper.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.jero.modules.pay.company.entity.PayContactsManagement; +import com.jero.modules.pay.company.entity.PayManagerManagement; import com.jero.modules.system.entity.SysRole; import com.jero.modules.system.vo.SysUserVo; import org.apache.ibatis.annotations.Param; @@ -166,6 +167,8 @@ public interface SysUserMapper extends BaseMapper { PayContactsManagement getPayContactsManagementByPhone(@Param("username") String username); + PayManagerManagement getCompanyManagementByPhone(@Param("username") String username); + void forgetPassword(@Param("user") SysUser user); } diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserMapper.xml index 60a0cca3..79e6adee 100644 --- a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserMapper.xml +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserMapper.xml @@ -212,4 +212,9 @@ update sys_user set password = #{user.password} where username = #{user.username} + + \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysBaseApiImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysBaseApiImpl.java index 6b2b117f..4feeff24 100644 --- a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysBaseApiImpl.java +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysBaseApiImpl.java @@ -9,9 +9,11 @@ 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.constant.enums.LoginUserTypeEnum; import com.jero.common.util.HuaWeiSmsUtil; import com.jero.modules.oss.mapper.OSSFileMapper; import com.jero.modules.pay.company.entity.PayContactsManagement; +import com.jero.modules.pay.company.entity.PayManagerManagement; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; @@ -115,24 +117,42 @@ public class SysBaseApiImpl implements ISysBaseAPI { return null; } LoginUser loginUser = new LoginUser(); - SysUser sysUser = userMapper.getUserByName(username); - if(sysUser==null) { - PayContactsManagement contactsManagement = userMapper.getPayContactsManagementByPhone(username); - if (contactsManagement == null){ + if (username.startsWith(LoginUserTypeEnum.company_management_.toString())){ + username = username.substring(LoginUserTypeEnum.company_management_.toString().length()); + PayManagerManagement companyManagementByPhone = userMapper.getCompanyManagementByPhone(username); + if (companyManagementByPhone == null){ return null; }else { - BeanUtils.copyProperties(contactsManagement, loginUser); - loginUser.setIsCompanyUser(true); - loginUser.setUsername(contactsManagement.getPhone()); - loginUser.setRealname(contactsManagement.getName()); - loginUser.setRoleCode("企业用户"); + BeanUtils.copyProperties(companyManagementByPhone, loginUser); + loginUser.setIsCompanyUser(false); + loginUser.setIsCompanyManager(true); + loginUser.setUsername(companyManagementByPhone.getPhone()); + loginUser.setRealname(companyManagementByPhone.getName()); + loginUser.setRoleCode("企业管理员"); + } + }else{ + SysUser sysUser = userMapper.getUserByName(username); + if(sysUser==null) { + PayContactsManagement contactsManagement = userMapper.getPayContactsManagementByPhone(username); + if (contactsManagement == null){ + return null; + }else { + BeanUtils.copyProperties(contactsManagement, loginUser); + loginUser.setIsCompanyUser(true); + loginUser.setIsCompanyManager(false); + loginUser.setUsername(contactsManagement.getPhone()); + loginUser.setRealname(contactsManagement.getName()); + loginUser.setRoleCode("企业用户"); + } + }else { + BeanUtils.copyProperties(sysUser, loginUser); + List roleByUserName = sysUserRoleMapper.getRoleByUserName(username); + loginUser.setRoleCode(StringUtils.join(roleByUserName, ",")); + loginUser.setIsCompanyUser(false); + loginUser.setIsCompanyManager(false); } - }else { - BeanUtils.copyProperties(sysUser, loginUser); - List roleByUserName = sysUserRoleMapper.getRoleByUserName(username); - loginUser.setRoleCode(StringUtils.join(roleByUserName, ",")); - loginUser.setIsCompanyUser(false); } + return loginUser; }