update 企业管理员登录

This commit is contained in:
lijiarao
2022-08-15 11:37:02 +08:00
parent ad95d6fe68
commit b8341a84dd
9 changed files with 288 additions and 49 deletions
@@ -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_
}
@@ -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");//会员系统推送会议
@@ -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;
}
/**
@@ -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<PayManagerManagement> 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);
@@ -66,6 +66,9 @@ public class PayManagerManagementController extends JeroController<PayManagerMan
QueryWrapper<PayManagerManagement> queryWrapper = QueryGenerator.initQueryWrapper(payManagerManagement, req.getParameterMap());
Page<PayManagerManagement> page = new Page<>(pageNo, pageSize);
IPage<PayManagerManagement> pageList = payManagerManagementService.page(page, queryWrapper);
pageList.getRecords().forEach(record -> {
record.setPhone(PasswordUtil.decrypt(record.getPhone()));
});
return Result.OK(pageList);
}
@@ -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;
}
@@ -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<SysUser> {
PayContactsManagement getPayContactsManagementByPhone(@Param("username") String username);
PayManagerManagement getCompanyManagementByPhone(@Param("username") String username);
void forgetPassword(@Param("user") SysUser user);
}
@@ -212,4 +212,9 @@
update sys_user set password = #{user.password}
where username = #{user.username}
</update>
<select id="getCompanyManagementByPhone" resultType="com.jero.modules.pay.company.entity.PayManagerManagement">
select *
from pay_manager_management where phone = #{username} and del_flag = 0;
</select>
</mapper>
@@ -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<String> roleByUserName = sysUserRoleMapper.getRoleByUserName(username);
loginUser.setRoleCode(StringUtils.join(roleByUserName, ","));
loginUser.setIsCompanyUser(false);
loginUser.setIsCompanyManager(false);
}
}else {
BeanUtils.copyProperties(sysUser, loginUser);
List<String> roleByUserName = sysUserRoleMapper.getRoleByUserName(username);
loginUser.setRoleCode(StringUtils.join(roleByUserName, ","));
loginUser.setIsCompanyUser(false);
}
return loginUser;
}