diff --git a/login-base/src/main/java/ink/wgink/login/base/service/user/UserDetailServiceImpl.java b/login-base/src/main/java/ink/wgink/login/base/service/user/UserDetailServiceImpl.java index c14dae4f..b3e9d1fd 100644 --- a/login-base/src/main/java/ink/wgink/login/base/service/user/UserDetailServiceImpl.java +++ b/login-base/src/main/java/ink/wgink/login/base/service/user/UserDetailServiceImpl.java @@ -2,26 +2,19 @@ package ink.wgink.login.base.service.user; import com.alibaba.fastjson.JSONObject; import ink.wgink.exceptions.SearchException; -import ink.wgink.interfaces.consts.ISystemConstant; import ink.wgink.interfaces.user.IUserDetailCheckService; import ink.wgink.login.base.exceptions.UserAuthenticationException; -import ink.wgink.login.base.manager.ConfigManager; -import ink.wgink.pojo.bos.LoginUser; +import ink.wgink.login.base.util.UserLoginUtil; import ink.wgink.service.user.enums.UserStateEnum; import ink.wgink.service.user.pojo.pos.UserPO; import ink.wgink.service.user.service.IUserService; import ink.wgink.util.date.DateUtil; -import org.apache.commons.lang3.StringUtils; -import org.joda.time.DateTime; -import org.joda.time.format.DateTimeFormat; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; -import java.util.Map; - /** * @ClassName: UserDetailServiceImpl * @Description: User Detail @@ -65,79 +58,7 @@ public class UserDetailServiceImpl implements UserDetailsService, IUserDetailChe if (DateUtil.isDateExpired(userPO.getUserExpiredDate())) { throw new UserAuthenticationException("账号已经过期"); } - return createUserBO(userPO); - } - - /** - * 创建UserBO - * - * @param userPO - * @return - */ - private LoginUser createUserBO(UserPO userPO) { - LoginUser loginUser = new LoginUser(userPO.getUserUsername(), userPO.getUserPassword(), - userPO.getUserType() == 1 ? true : false, - isAccountNonExpired(userPO), - isCredentialsNonExpired(userPO), - userPO.getUserState() == 0 ? true : false); - loginUser.setUserId(userPO.getUserId()); - loginUser.setUserName(userPO.getUserName()); - loginUser.setUserPhone(userPO.getUserPhone()); - loginUser.setUserUKey(userPO.getUserUKey()); - loginUser.setLoginType(userPO.getLoginType()); - loginUser.setUserEmail(userPO.getUserEmail()); - loginUser.setUserAvatar(userPO.getUserAvatar()); - return loginUser; - } - - /** - * 账号是否没有过期 - * - * @param userPO - * @return - */ - private boolean isAccountNonExpired(UserPO userPO) { - if (StringUtils.equals(userPO.getUserUsername(), ISystemConstant.ADMIN)) { - return true; - } - if (!StringUtils.isBlank(userPO.getUserExpiredDate())) { - // 判断用户是否超时失效 - DateTime expiredDateTime = DateTime.parse(userPO.getUserExpiredDate(), DateTimeFormat.forPattern(ISystemConstant.DATE_FORMATTER_YYYY_MM_DD_HH_MM_SS)); - DateTime nowDateTime = DateTime.now(); - if (expiredDateTime.isBefore(nowDateTime)) { - return false; - } - } - return true; - } - - /** - * 密码是否没有过期 - * - * @param userPO - * @return - */ - private boolean isCredentialsNonExpired(UserPO userPO) { - if (StringUtils.equals(userPO.getUserUsername(), ISystemConstant.ADMIN)) { - return true; - } - Map config = ConfigManager.getInstance().getConfig(); - String passwordValidity = config.get("passwordValidity"); - // 自定义密码有效期 - if (StringUtils.equals(passwordValidity, "custom")) { - Object passwordValidityDays = config.get("passwordValidityDays"); - int validityDays = passwordValidityDays == null ? 0 : (Integer) passwordValidityDays; - if (validityDays <= 0) { - return true; - } - DateTime passwordModifiedDateTime = DateTime.parse(userPO.getGmtPasswordModified(), DateTimeFormat.forPattern(ISystemConstant.DATE_FORMATTER_YYYY_MM_DD_HH_MM_SS)); - DateTime passwordExpiredDateTime = passwordModifiedDateTime.plusDays(validityDays); - DateTime nowDateTime = DateTime.now(); - if (passwordExpiredDateTime.isBefore(nowDateTime)) { - return false; - } - } - return true; + return UserLoginUtil.createLoginUser(userPO); } } diff --git a/login-base/src/main/java/ink/wgink/login/base/util/UserLoginUtil.java b/login-base/src/main/java/ink/wgink/login/base/util/UserLoginUtil.java new file mode 100644 index 00000000..c33b0ee2 --- /dev/null +++ b/login-base/src/main/java/ink/wgink/login/base/util/UserLoginUtil.java @@ -0,0 +1,93 @@ +package ink.wgink.login.base.util; + +import ink.wgink.interfaces.consts.ISystemConstant; +import ink.wgink.login.base.manager.ConfigManager; +import ink.wgink.pojo.bos.LoginUser; +import ink.wgink.service.user.pojo.pos.UserPO; +import org.apache.commons.lang3.StringUtils; +import org.joda.time.DateTime; +import org.joda.time.format.DateTimeFormat; + +import java.util.Map; + +/** + * @Description: 用户登录 + * @Author: WenG + * @Date: 2022/5/19 13:23 + * @Version: 1.0 + **/ +public class UserLoginUtil { + + /** + * 创建登录用户 + * + * @param userPO + * @return + */ + public static LoginUser createLoginUser(UserPO userPO) { + LoginUser loginUser = new LoginUser(userPO.getUserUsername(), userPO.getUserPassword(), + userPO.getUserType() == 1 ? true : false, + isAccountNonExpired(userPO), + isCredentialsNonExpired(userPO), + userPO.getUserState() == 0 ? true : false); + loginUser.setUserId(userPO.getUserId()); + loginUser.setUserName(userPO.getUserName()); + loginUser.setUserPhone(userPO.getUserPhone()); + loginUser.setUserUKey(userPO.getUserUKey()); + loginUser.setLoginType(userPO.getLoginType()); + loginUser.setUserEmail(userPO.getUserEmail()); + loginUser.setUserAvatar(userPO.getUserAvatar()); + return loginUser; + } + + /** + * 账号是否没有过期 + * + * @param userPO + * @return + */ + private static boolean isAccountNonExpired(UserPO userPO) { + if (StringUtils.equals(userPO.getUserUsername(), ISystemConstant.ADMIN)) { + return true; + } + if (!StringUtils.isBlank(userPO.getUserExpiredDate())) { + // 判断用户是否超时失效 + DateTime expiredDateTime = DateTime.parse(userPO.getUserExpiredDate(), DateTimeFormat.forPattern(ISystemConstant.DATE_FORMATTER_YYYY_MM_DD_HH_MM_SS)); + DateTime nowDateTime = DateTime.now(); + if (expiredDateTime.isBefore(nowDateTime)) { + return false; + } + } + return true; + } + + /** + * 密码是否没有过期 + * + * @param userPO + * @return + */ + private static boolean isCredentialsNonExpired(UserPO userPO) { + if (StringUtils.equals(userPO.getUserUsername(), ISystemConstant.ADMIN)) { + return true; + } + Map config = ConfigManager.getInstance().getConfig(); + String passwordValidity = config.get("passwordValidity"); + // 自定义密码有效期 + if (StringUtils.equals(passwordValidity, "custom")) { + Object passwordValidityDays = config.get("passwordValidityDays"); + int validityDays = passwordValidityDays == null ? 0 : (Integer) passwordValidityDays; + if (validityDays <= 0) { + return true; + } + DateTime passwordModifiedDateTime = DateTime.parse(userPO.getGmtPasswordModified(), DateTimeFormat.forPattern(ISystemConstant.DATE_FORMATTER_YYYY_MM_DD_HH_MM_SS)); + DateTime passwordExpiredDateTime = passwordModifiedDateTime.plusDays(validityDays); + DateTime nowDateTime = DateTime.now(); + if (passwordExpiredDateTime.isBefore(nowDateTime)) { + return false; + } + } + return true; + } + +} diff --git a/mongo-login/pom.xml b/mongo-login/pom.xml index 35847b99..a518863d 100644 --- a/mongo-login/pom.xml +++ b/mongo-login/pom.xml @@ -20,7 +20,7 @@ ink.wgink - service-user + login-base 1.0-SNAPSHOT provided diff --git a/mongo-login/src/main/java/ink/wgink/mongo/login/service/impl/MongoLoginServiceImpl.java b/mongo-login/src/main/java/ink/wgink/mongo/login/service/impl/MongoLoginServiceImpl.java index 1352c3e9..8016ce01 100644 --- a/mongo-login/src/main/java/ink/wgink/mongo/login/service/impl/MongoLoginServiceImpl.java +++ b/mongo-login/src/main/java/ink/wgink/mongo/login/service/impl/MongoLoginServiceImpl.java @@ -1,6 +1,7 @@ package ink.wgink.mongo.login.service.impl; import ink.wgink.common.base.DefaultBaseService; +import ink.wgink.interfaces.consts.ISystemConstant; import ink.wgink.interfaces.department.IDepartmentUserBaseService; import ink.wgink.interfaces.group.IGroupUserBaseService; import ink.wgink.interfaces.login.mongo.IMongoLoginService; @@ -8,9 +9,21 @@ import ink.wgink.interfaces.position.IPositionUserBaseService; import ink.wgink.interfaces.role.IRoleMenuBaseService; import ink.wgink.interfaces.role.IRolePermissionBaseService; import ink.wgink.interfaces.role.IRoleUserBaseService; +import ink.wgink.login.base.util.UserLoginUtil; +import ink.wgink.pojo.bos.LoginUser; +import ink.wgink.pojo.bos.RoleGrantedAuthorityBO; +import ink.wgink.pojo.dtos.department.DepartmentSimpleDTO; +import ink.wgink.pojo.dtos.group.GroupSimpleDTO; +import ink.wgink.pojo.dtos.position.PositionSimpleDTO; +import ink.wgink.pojo.dtos.role.RoleSimpleDTO; +import ink.wgink.pojo.pos.DepartmentPO; +import ink.wgink.pojo.pos.GroupPO; +import ink.wgink.pojo.pos.PositionPO; +import ink.wgink.pojo.pos.RolePO; import ink.wgink.pojo.pos.user.mongo.MongoUserPO; import ink.wgink.service.user.pojo.pos.UserPO; import ink.wgink.service.user.service.IUserService; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; @@ -51,10 +64,11 @@ public class MongoLoginServiceImpl extends DefaultBaseService implements IMongoL @Override public void update(String userId) { UserPO userPO = userService.getPO(userId); - MongoUserPO mongoUserPO = new MongoUserPO(); - BeanUtils.copyProperties(userPO, mongoUserPO); - + UserLoginUtil.createLoginUser(userPO); + // 非系统管理员 + if (!StringUtils.equalsIgnoreCase(userPO.getUserUsername(), ISystemConstant.ADMIN)) { + } } @@ -73,4 +87,48 @@ public class MongoLoginServiceImpl extends DefaultBaseService implements IMongoL return mongoTemplate.findOne(new Query().addCriteria(Criteria.where("userUsername").is(username)), MongoUserPO.class, COLLECTION_NAME); } + /** + * 设置用户信息 + * + * @param userPO + */ + private void setMongoUserInfo(MongoUserPO mongoUserPO) { + + } + + private boolean hasAdmin(List roleIds) { + for (String roleId : roleIds) { + if (StringUtils.equals(ISystemConstant.ADMIN, roleId)) { + return true; + } + } + return false; + } + + /** + * 删除重复的角色 + * + * @param rolePOs + */ + private void removalDuplicateRole(List rolePOs) { + if (rolePOs == null || rolePOs.isEmpty()) { + return; + } + for (int i = 0; i < rolePOs.size(); i++) { + RolePO rolePO = rolePOs.get(i); + boolean isExist = false; + for (int j = i + 1; j < rolePOs.size(); j++) { + if (StringUtils.equals(rolePO.getRoleId(), rolePOs.get(j).getRoleId())) { + isExist = true; + break; + } + } + if (isExist) { + rolePOs.remove(i); + i--; + break; + } + } + } + }