diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/user/convert/UserInfoConvertor.java b/pmapi/src/main/java/com/ningdatech/pmapi/user/convert/UserInfoConvertor.java
new file mode 100644
index 0000000..7fa0e38
--- /dev/null
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/user/convert/UserInfoConvertor.java
@@ -0,0 +1,38 @@
+package com.ningdatech.pmapi.user.convert;
+
+import com.ningdatech.pmapi.user.security.auth.model.UserFullInfoDTO;
+import com.ningdatech.pmapi.user.security.auth.model.UserInfoDetails;
+
+/**
+ *
+ * UserInfoConvertor
+ *
+ *
+ * @author WendyYang
+ * @since 2023/5/5
+ **/
+public class UserInfoConvertor {
+
+ private UserInfoConvertor() {
+
+ }
+
+ public static UserInfoDetails toUserInfoDetails(UserFullInfoDTO userFullInfo) {
+ UserInfoDetails userInfoDetails = new UserInfoDetails();
+ userInfoDetails.setUserId(userFullInfo.getUserId());
+ userInfoDetails.setUsername(userFullInfo.getUsername());
+ userInfoDetails.setRealName(userFullInfo.getRealName());
+ userInfoDetails.setUserRoleList(userFullInfo.getUserRoleList());
+ userInfoDetails.setRegionCode(userFullInfo.getRegionCode());
+ userInfoDetails.setRegionLevel(userFullInfo.getRegionLevel());
+ userInfoDetails.setIdentifier(userFullInfo.getIdentifier());
+ userInfoDetails.setPassword(userFullInfo.getCredential());
+ userInfoDetails.setEmployeeCode(userFullInfo.getEmployeeCode());
+ userInfoDetails.setOrganizationCode(userFullInfo.getOrganizationCode());
+ userInfoDetails.setOrganizationName(userFullInfo.getOrganizationName());
+ userInfoDetails.setEmpPosUnitCode(userFullInfo.getEmpPosUnitCode());
+ userInfoDetails.setEmpPosUnitName(userFullInfo.getEmpPosUnitName());
+ return userInfoDetails;
+ }
+
+}
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/user/manage/UserAuthLoginManage.java b/pmapi/src/main/java/com/ningdatech/pmapi/user/manage/UserAuthLoginManage.java
index 50a4ce3..66d94d3 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/user/manage/UserAuthLoginManage.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/user/manage/UserAuthLoginManage.java
@@ -43,8 +43,8 @@ public class UserAuthLoginManage {
/**
* 根据用户id 获取用户全量信息
*
- * @param userId
- * @return
+ * @param userId /
+ * @return /
*/
public UserFullInfoDTO getUserFullInfo(Long userId) {
UserInfo userInfo = iUserInfoService.getById(userId);
@@ -53,15 +53,15 @@ public class UserAuthLoginManage {
}
// 返回用户全量信息
UserFullInfoDTO userFullInfoDTO = new UserFullInfoDTO();
- userFullInfoDTOAssembler(userInfo, userFullInfoDTO);
+ userFullInfoAssembler(userInfo, userFullInfoDTO);
return userFullInfoDTO;
}
/**
* 根据用户名获取
*
- * @param username
- * @return
+ * @param username /
+ * @return /
*/
public UserFullInfoDTO queryUserInfoInPasswordAuth(String username) {
// TODO 目前账号密码登陆测试使用 强制用户登录 userId 1L
@@ -71,15 +71,15 @@ public class UserAuthLoginManage {
}
// 返回用户全量信息
UserFullInfoDTO userFullInfoDTO = new UserFullInfoDTO();
- userFullInfoDTOAssembler(userInfo, userFullInfoDTO);
+ userFullInfoAssembler(userInfo, userFullInfoDTO);
return userFullInfoDTO;
}
/**
* 根据手机号获取
*
- * @param phoneNo
- * @return
+ * @param phoneNo /
+ * @return /
*/
public UserFullInfoDTO queryUserInfoInPhoneNoAuth(String phoneNo) {
UserInfo userInfo = iUserInfoService.getOne(Wrappers.lambdaQuery(UserInfo.class)
@@ -89,15 +89,15 @@ public class UserAuthLoginManage {
}
// 返回用户全量信息
UserFullInfoDTO userFullInfoDTO = new UserFullInfoDTO();
- userFullInfoDTOAssembler(userInfo, userFullInfoDTO);
+ userFullInfoAssembler(userInfo, userFullInfoDTO);
return userFullInfoDTO;
}
/**
* 根据accountId(浙政钉扫码登陆)
*
- * @param accountId
- * @return
+ * @param accountId /
+ * @return /
*/
public UserFullInfoDTO queryUserInfoInAccountIdAuth(String accountId) {
@@ -109,12 +109,12 @@ public class UserAuthLoginManage {
}
// 返回用户全量信息
UserFullInfoDTO userFullInfoDTO = new UserFullInfoDTO();
- userFullInfoDTOAssembler(userInfo, userFullInfoDTO);
+ userFullInfoAssembler(userInfo, userFullInfoDTO);
return userFullInfoDTO;
}
- private void userFullInfoDTOAssembler(UserInfo userInfo, UserFullInfoDTO userFullInfoDTO) {
+ private void userFullInfoAssembler(UserInfo userInfo, UserFullInfoDTO userFullInfoDTO) {
// 获取浙政钉雇员信息 组织信息
String employeeCode = userInfo.getEmployeeCode();
if (StringUtils.isNotBlank(employeeCode)) {
@@ -128,9 +128,7 @@ public class UserAuthLoginManage {
// 装配用户任职所在单位
String empPosUnitCode = dingEmployeeInfo.getEmpPosUnitCode();
if (StringUtils.isNotBlank(empPosUnitCode)) {
- DingOrganization dingOrganization = iDingOrganizationService
- .getOne(Wrappers.lambdaQuery(DingOrganization.class)
- .eq(DingOrganization::getOrganizationCode, empPosUnitCode));
+ DingOrganization dingOrganization = iDingOrganizationService.getByOrgCode(empPosUnitCode);
if (Objects.nonNull(dingOrganization)) {
userFullInfoDTO.setEmpPosUnitCode(empPosUnitCode);
userFullInfoDTO.setEmpPosUnitName(dingOrganization.getOrganizationName());
@@ -139,9 +137,9 @@ public class UserAuthLoginManage {
// 装配用户所在orgCode
String organizationCode = dingEmployeeInfo.getOrganizationCode();
- List dingOrganizationList = iDingOrganizationService
- .list(Wrappers.lambdaQuery(DingOrganization.class)
- .eq(DingOrganization::getOrganizationCode, organizationCode));
+ List dingOrganizationList = iDingOrganizationService.list(Wrappers
+ .lambdaQuery(DingOrganization.class)
+ .eq(DingOrganization::getOrganizationCode, organizationCode));
if (CollectionUtil.isNotEmpty(dingOrganizationList)) {
DingOrganization dingOrganization = dingOrganizationList.get(0);
userFullInfoDTO.setOrganizationCode(dingOrganization.getOrganizationCode());
@@ -174,7 +172,7 @@ public class UserAuthLoginManage {
userFullInfoDTO.setEmployeeCode(employeeCode);
userFullInfoDTO.setUsername(userInfo.getRealName());
userFullInfoDTO.setMobile(userInfo.getMobile());
-
+ userFullInfoDTO.setAccountId(userInfo.getAccountId());
}
public UserFullInfoDTO getUserFullInfoByEmployeeCode(String employeeCode) {
@@ -185,7 +183,7 @@ public class UserAuthLoginManage {
}
// 返回用户全量信息
UserFullInfoDTO userFullInfoDTO = new UserFullInfoDTO();
- userFullInfoDTOAssembler(userInfo, userFullInfoDTO);
+ userFullInfoAssembler(userInfo, userFullInfoDTO);
return userFullInfoDTO;
}
}
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/user/manage/UserInfoManage.java b/pmapi/src/main/java/com/ningdatech/pmapi/user/manage/UserInfoManage.java
index 51f688c..008e1c3 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/user/manage/UserInfoManage.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/user/manage/UserInfoManage.java
@@ -20,6 +20,7 @@ import com.ningdatech.pmapi.sys.model.entity.UserRole;
import com.ningdatech.pmapi.sys.service.IRoleService;
import com.ningdatech.pmapi.sys.service.IUserRoleService;
import com.ningdatech.pmapi.user.constant.UserAvailableEnum;
+import com.ningdatech.pmapi.user.convert.UserInfoConvertor;
import com.ningdatech.pmapi.user.entity.UserInfo;
import com.ningdatech.pmapi.user.model.po.ReqUserDetailEditPO;
import com.ningdatech.pmapi.user.model.po.ReqUserDetailPO;
@@ -28,11 +29,17 @@ import com.ningdatech.pmapi.user.model.po.ReqUserInfoListPO;
import com.ningdatech.pmapi.user.model.vo.ResUserDetailVO;
import com.ningdatech.pmapi.user.model.vo.ResUserInfoListVO;
import com.ningdatech.pmapi.user.model.vo.UserRoleVO;
+import com.ningdatech.pmapi.user.security.auth.credential.CredentialAuthToken;
import com.ningdatech.pmapi.user.security.auth.model.UserFullInfoDTO;
+import com.ningdatech.pmapi.user.security.auth.model.UserInfoDetails;
import com.ningdatech.pmapi.user.service.IUserInfoService;
import com.ningdatech.pmapi.user.util.LoginUserUtil;
import com.wflow.workflow.bean.dto.ProcessInstanceUserDto;
import lombok.RequiredArgsConstructor;
+import org.springframework.security.core.context.SecurityContextImpl;
+import org.springframework.session.Session;
+import org.springframework.session.SessionRepository;
+import org.springframework.session.data.redis.RedisIndexedSessionRepository;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@@ -54,8 +61,9 @@ public class UserInfoManage {
private final IUserRoleService iUserRoleService;
private final IRoleService iRoleService;
private final UserInfoHelper userInfoHelper;
-
+ private final RedisIndexedSessionRepository redisIndexedSessionRepository;
private final RegionCacheHelper regionCacheHelper;
+ private final UserAuthLoginManage userAuthLoginManage;
public PageVo list(ReqUserInfoListPO req) {
PageVo pageVo = new PageVo<>();
@@ -207,7 +215,7 @@ public class UserInfoManage {
return new ArrayList<>();
}
return iUserInfoService.list(Wrappers.lambdaQuery(UserInfo.class)
- .in(UserInfo::getId, compliantUserIdList))
+ .in(UserInfo::getId, compliantUserIdList))
.stream().map(UserInfo::getId).collect(Collectors.toList());
}
@@ -332,6 +340,8 @@ public class UserInfoManage {
}).collect(Collectors.toList());
iUserRoleService.saveBatch(userRoleList);
}
+ // 刷新用户权限
+ refreshSession(userId);
}
/**
@@ -492,6 +502,28 @@ public class UserInfoManage {
return processInstanceUserDto;
}
+ public void refreshSession(Long userId) {
+ UserFullInfoDTO ufi = userAuthLoginManage.getUserFullInfo(userId);
+ List sessionIds = new ArrayList<>();
+ BizUtils.notNull(ufi.getIdentifier(), w -> sessionIds.addAll(redisIndexedSessionRepository.findByPrincipalName(w).keySet()));
+ BizUtils.notNull(ufi.getMobile(), w -> sessionIds.addAll(redisIndexedSessionRepository.findByPrincipalName(w).keySet()));
+ BizUtils.notNull(ufi.getAccountId(), w -> sessionIds.addAll(redisIndexedSessionRepository.findByPrincipalName(w.toString()).keySet()));
+ if (sessionIds.isEmpty()) {
+ return;
+ }
+ SessionRepository redisSessionRepository = redisIndexedSessionRepository;
+ UserInfoDetails details = UserInfoConvertor.toUserInfoDetails(ufi);
+ CredentialAuthToken cat = new CredentialAuthToken(details, details.getPassword(), details.getAuthorities());
+ sessionIds.forEach(sessionId -> {
+ Session session = redisIndexedSessionRepository.findById(sessionId);
+ SecurityContextImpl context = session.getAttribute("SPRING_SECURITY_CONTEXT");
+ context.setAuthentication(cat);
+ session.setAttribute("SPRING_SECURITY_CONTEXT", context);
+ redisSessionRepository.save(session);
+ });
+ }
+
+
/**
* 获取当前用户可控角色列表
*
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/user/security/auth/credential/CredentialLoginUserDetailService.java b/pmapi/src/main/java/com/ningdatech/pmapi/user/security/auth/credential/CredentialLoginUserDetailService.java
index 854db99..455c0b9 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/user/security/auth/credential/CredentialLoginUserDetailService.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/user/security/auth/credential/CredentialLoginUserDetailService.java
@@ -2,6 +2,7 @@ package com.ningdatech.pmapi.user.security.auth.credential;
import com.ningdatech.pmapi.user.constant.LoginTypeEnum;
+import com.ningdatech.pmapi.user.convert.UserInfoConvertor;
import com.ningdatech.pmapi.user.manage.UserAuthLoginManage;
import com.ningdatech.pmapi.user.security.auth.constants.UserDeatilsServiceConstant;
import com.ningdatech.pmapi.user.security.auth.model.UserFullInfoDTO;
@@ -32,25 +33,25 @@ public class CredentialLoginUserDetailService implements UserDetailsService {
String loginTypeStr = split[1];
LoginTypeEnum loginTypeEnum = LoginTypeEnum.valueOf(loginTypeStr);
- UserFullInfoDTO userFullInfoDTO = null;
+ UserFullInfoDTO userFullInfo;
switch (loginTypeEnum) {
case PHONE_VERIFICATION_CODE_LOGIN: {
- userFullInfoDTO = userAuthLoginManage.queryUserInfoInPhoneNoAuth(username);
- if (Objects.isNull(userFullInfoDTO)) {
+ userFullInfo = userAuthLoginManage.queryUserInfoInPhoneNoAuth(username);
+ if (Objects.isNull(userFullInfo)) {
throw new CommonLoginException("改手机号未绑定用户");
}
}
break;
case USERNAME_PASSWORD_LOGIN: {
- userFullInfoDTO = userAuthLoginManage.queryUserInfoInPasswordAuth(username);
- if (Objects.isNull(userFullInfoDTO)) {
+ userFullInfo = userAuthLoginManage.queryUserInfoInPasswordAuth(username);
+ if (Objects.isNull(userFullInfo)) {
throw new UsernameNotFoundException(String.format("%s user not exist", username));
}
}
break;
case DING_QR_LOGIN: {
- userFullInfoDTO = userAuthLoginManage.queryUserInfoInAccountIdAuth(username);
- if (Objects.isNull(userFullInfoDTO)) {
+ userFullInfo = userAuthLoginManage.queryUserInfoInAccountIdAuth(username);
+ if (Objects.isNull(userFullInfo)) {
throw new CommonLoginException("浙政钉账号无法登陆");
}
}
@@ -59,21 +60,6 @@ public class CredentialLoginUserDetailService implements UserDetailsService {
throw new UsernameNotFoundException(String.format("%s user not exist", username));
}
}
-
- UserInfoDetails userInfoDetails = new UserInfoDetails();
- userInfoDetails.setUserId(userFullInfoDTO.getUserId());
- userInfoDetails.setUsername(userFullInfoDTO.getUsername());
- userInfoDetails.setRealName(userFullInfoDTO.getRealName());
- userInfoDetails.setUserRoleList(userFullInfoDTO.getUserRoleList());
- userInfoDetails.setRegionCode(userFullInfoDTO.getRegionCode());
- userInfoDetails.setRegionLevel(userFullInfoDTO.getRegionLevel());
- userInfoDetails.setIdentifier(userFullInfoDTO.getIdentifier());
- userInfoDetails.setPassword(userFullInfoDTO.getCredential());
- userInfoDetails.setEmployeeCode(userFullInfoDTO.getEmployeeCode());
- userInfoDetails.setOrganizationCode(userFullInfoDTO.getOrganizationCode());
- userInfoDetails.setOrganizationName(userFullInfoDTO.getOrganizationName());
- userInfoDetails.setEmpPosUnitCode(userFullInfoDTO.getEmpPosUnitCode());
- userInfoDetails.setEmpPosUnitName(userFullInfoDTO.getEmpPosUnitName());
- return userInfoDetails;
+ return UserInfoConvertor.toUserInfoDetails(userFullInfo);
}
}
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/user/security/auth/model/UserFullInfoDTO.java b/pmapi/src/main/java/com/ningdatech/pmapi/user/security/auth/model/UserFullInfoDTO.java
index 5482f45..f4291be 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/user/security/auth/model/UserFullInfoDTO.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/user/security/auth/model/UserFullInfoDTO.java
@@ -71,6 +71,8 @@ public class UserFullInfoDTO {
*/
private List userRoleList;
+ private Long accountId;
+
/**
* 取最高的权限
*