From eb8a176d3e67c9569d4168a27a05d153c3ba48b5 Mon Sep 17 00:00:00 2001 From: baozhipeng <961815525@qq.com> Date: Thu, 7 Apr 2022 16:19:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=95=E7=82=B9=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/controller/LoginController.java | 54 +------ .../system/service/ISysUserService.java | 11 +- .../service/impl/SysUserServiceImpl.java | 136 ++++++++++++++++-- 3 files changed, 141 insertions(+), 60 deletions(-) diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/LoginController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/LoginController.java index 38157e58..a9fefb8d 100644 --- a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/LoginController.java +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/LoginController.java @@ -56,8 +56,6 @@ public class LoginController { private RedisUtil redisUtil; @Autowired private ISysDepartService sysDepartService; - @Autowired - private ISysDictService sysDictService; @Resource private BaseCommonService baseCommonService; @Resource @@ -160,7 +158,7 @@ public class LoginController { return result; } //用户登录信息 - userInfo(sysUser, result); + sysUserService.userInfo(sysUser, result); //update-begin--Author:wangshuai Date:20200714 for:登录日志没有记录人员 LoginUser loginUser = new LoginUser(); BeanUtils.copyProperties(sysUser, loginUser); @@ -413,7 +411,7 @@ public class LoginController { return result; } //用户信息 - userInfo(sysUser, result); + sysUserService.userInfo(sysUser, result); //添加日志 baseCommonService.addLog("账号: " + sysUser.getUsername() + ",登录成功!", CommonConstant.LOG_TYPE_1, null); @@ -421,50 +419,7 @@ public class LoginController { } - /** - * 用户信息 - * - * @param sysUser - * @param result - * @return - */ - private Result userInfo(SysUser sysUser, Result result) { - String syspassword = sysUser.getPassword(); - String username = sysUser.getUsername(); - // 生成token - String token = JwtUtil.sign(username, syspassword); - // 设置token缓存有效时间 - redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); - redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000); - // 获取用户部门信息 - JSONObject obj = new JSONObject(); - List departs = sysDepartService.queryUserDeparts(sysUser.getId()); - obj.put("departs", departs); - if (departs == null || departs.size() == 0) { - obj.put("multi_depart", 0); - } else if (departs.size() == 1) { - sysUserService.updateUserDepart(username, departs.get(0).getOrgCode()); - obj.put("multi_depart", 1); - } else { - //查询当前是否有登录部门 - // update-begin--Author:wangshuai Date:20200805 for:如果用戶为选择部门,数据库为存在上一次登录部门,则取一条存进去 - SysUser sysUserById = sysUserService.getById(sysUser.getId()); - if (oConvertUtils.isEmpty(sysUserById.getOrgCode())) { - sysUserService.updateUserDepart(username, departs.get(0).getOrgCode()); - } - // update-end--Author:wangshuai Date:20200805 for:如果用戶为选择部门,数据库为存在上一次登录部门,则取一条存进去 - obj.put("multi_depart", 2); - } - sysUser.setPhone(PasswordUtil.decrypt(sysUser.getPhone())); - sysUser.setEmail(PasswordUtil.decrypt(sysUser.getEmail())); - obj.put("token", token); - obj.put("userInfo", sysUser); - obj.put("sysAllDictItems", sysDictService.queryAllDictItems()); - result.setResult(obj); - result.success("登录成功"); - return result; - } /** * 获取加密字符串 @@ -647,10 +602,7 @@ public class LoginController { @ApiOperation(value = "单点登录") @PostMapping(value = "/singleSignOn") public Result singleSignOn(@RequestParam(name="code") String code) { - Result result = new Result<>(); - - sysUserService.singleSignOn(code); - return result; + return sysUserService.singleSignOn(code); } } diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserService.java index 56be8466..1b214713 100644 --- a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserService.java +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserService.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -265,6 +266,14 @@ public interface ISysUserService extends IService { PayContactsManagement getPayContactsManagementByPhone(String phone); //单点登录 - void singleSignOn(String code); + Result singleSignOn(String code); + /** + * 用户信息 + * + * @param sysUser + * @param result + * @return + */ + Result userInfo(SysUser sysUser, Result result); } diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserServiceImpl.java index ca584c11..7ad83b18 100644 --- a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserServiceImpl.java +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserServiceImpl.java @@ -1,15 +1,19 @@ package com.jero.modules.system.service.impl; import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.system.util.JwtUtil; import com.jero.common.util.*; import com.jero.modules.pay.company.entity.PayContactsManagement; +import com.jero.modules.system.model.SysLoginModel; import com.jero.modules.system.model.SysLoginVO; +import com.jero.modules.system.service.*; import com.jero.modules.system.vo.SysUserVo; import lombok.extern.slf4j.Slf4j; import com.jero.common.api.vo.Result; @@ -22,7 +26,6 @@ import com.jero.common.system.vo.SysUserCacheInfo; import com.jero.modules.system.entity.*; import com.jero.modules.system.mapper.*; import com.jero.modules.system.model.SysUserSysDepartModel; -import com.jero.modules.system.service.ISysUserService; import com.jero.modules.system.vo.SysUserDepVo; import org.apache.commons.lang.StringUtils; import org.springframework.beans.BeanUtils; @@ -33,11 +36,14 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; +import org.springframework.web.bind.annotation.RequestBody; import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; +import static com.jero.modules.system.controller.LoginController.RETRY_LOGIN_PREFIX; + /** *

* 用户表 服务实现类 @@ -72,6 +78,14 @@ public class SysUserServiceImpl extends ServiceImpl impl private BaseCommonService baseCommonService; @Autowired private RedisUtil redisUtil; + @Autowired + private ISysDictService sysDictService; + @Autowired + private ISysDepartService sysDepartService; + @Resource + private ISysRoleService sysRoleService; + @Resource + private ISysUserRoleService sysUserRoleService; @Value("${defaultPassword}") private String defaultPassword; @Value("${singleSignON.client_id}") @@ -628,13 +642,119 @@ public class SysUserServiceImpl extends ServiceImpl impl } //单点登录 - public void singleSignOn(String code){ - HashMap paramMap = new HashMap<>(); - paramMap.put("client_id", client_id); - paramMap.put("client_secret", client_secret); - paramMap.put("code", 1); - paramMap.put("grant_type", "authorization_code"); + public Result singleSignOn(String code){ + //根据授权码获取access_token + HashMap tokenParam = new HashMap<>(); + tokenParam.put("client_id", client_id); + tokenParam.put("client_secret", client_secret); + tokenParam.put("code", 1); + tokenParam.put("grant_type", "authorization_code"); - String token= HttpUtil.post("https://idmtest.catarc.ac.cn/bam-protocol-service/oauth2/getToken", paramMap); + String tokenRes= HttpUtil.post("https://idmtest.catarc.ac.cn/bam-protocol-service/oauth2/getToken", tokenParam); + JSONObject tokenJson = JSONObject.parseObject(tokenRes); + String access_token = tokenJson.getString("access_token"); + + //根据access_token获取用户信息 + HashMap userInfoParam = new HashMap<>(); + userInfoParam.put("access_token", access_token); + userInfoParam.put("client_id", client_id); + + String userInfoRes= HttpUtil.get("https://idmtest.catarc.ac.cn/bam-protocol-service/oauth2/getUserInfo", userInfoParam); + + //根据工号登录 + return loginByUserNo("01433"); + } + + /** + * 根据工号登录 + * @return + */ + public Result loginByUserNo(String workNo) { + Result result = new Result<>(); + + //1. 校验用户是否有效 + //update-begin-author:wangshuai date:20200601 for: 登录代码验证用户是否注销bug,if条件永远为false + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysUser::getWorkNo, workNo); + SysUser sysUser = getOne(queryWrapper); + //update-end-author:wangshuai date:20200601 for: 登录代码验证用户是否注销bug,if条件永远为false + result= (Result) checkUserIsEffective(sysUser); + if (!result.isSuccess()) { + return result; + } + + //用户登录信息 + userInfo(sysUser, result); + //update-begin--Author:wangshuai Date:20200714 for:登录日志没有记录人员 + LoginUser loginUser = new LoginUser(); + BeanUtils.copyProperties(sysUser, loginUser); + // 新增用户角色code + LambdaQueryWrapper querySysUserRole = new LambdaQueryWrapper(); + querySysUserRole.eq(SysUserRole::getUserId,sysUser.getId()); + List listSysUserRole = sysUserRoleService.list(querySysUserRole); + if(!org.apache.commons.collections.CollectionUtils.isEmpty(listSysUserRole)){ + List listStr = listSysUserRole.stream().map(SysUserRole::getRoleId).collect(Collectors.toList()); + LambdaQueryWrapper querySysRole = new LambdaQueryWrapper(); + querySysRole.in(SysRole::getId,listStr); + List listSysRole = sysRoleService.list(querySysRole); + if(!org.apache.commons.collections.CollectionUtils.isEmpty(listSysRole)){ + StringBuilder sb = new StringBuilder(); + listSysRole.forEach(p->{ + sb.append(p.getRoleCode()); + if(listSysRole.indexOf(p) != (listSysRole.size() - 1)){ + sb.append(","); + } + }); + loginUser.setRoleCode(sb.toString()); + } + } + baseCommonService.addLog("账号: " + sysUser.getUsername() + ",第三方登录成功!", CommonConstant.LOG_TYPE_1, null, loginUser); + //update-end--Author:wangshuai Date:20200714 for:登录日志没有记录人员 + return result; + } + + /** + * 用户信息 + * + * @param sysUser + * @param result + * @return + */ + public Result userInfo(SysUser sysUser, Result result) { + String syspassword = sysUser.getPassword(); + String username = sysUser.getUsername(); + // 生成token + String token = JwtUtil.sign(username, syspassword); + // 设置token缓存有效时间 + redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000); + + // 获取用户部门信息 + JSONObject obj = new JSONObject(); + List departs = sysDepartService.queryUserDeparts(sysUser.getId()); + obj.put("departs", departs); + if (departs == null || departs.size() == 0) { + obj.put("multi_depart", 0); + } else if (departs.size() == 1) { + updateUserDepart(username, departs.get(0).getOrgCode()); + obj.put("multi_depart", 1); + } else { + //查询当前是否有登录部门 + // update-begin--Author:wangshuai Date:20200805 for:如果用戶为选择部门,数据库为存在上一次登录部门,则取一条存进去 + SysUser sysUserById = getById(sysUser.getId()); + if (oConvertUtils.isEmpty(sysUserById.getOrgCode())) { + updateUserDepart(username, departs.get(0).getOrgCode()); + } + // update-end--Author:wangshuai Date:20200805 for:如果用戶为选择部门,数据库为存在上一次登录部门,则取一条存进去 + obj.put("multi_depart", 2); + } + sysUser.setPhone(PasswordUtil.decrypt(sysUser.getPhone())); + sysUser.setEmail(PasswordUtil.decrypt(sysUser.getEmail())); + obj.put("token", token); + obj.put("userInfo", sysUser); + obj.put("sysAllDictItems", sysDictService.queryAllDictItems()); + result.setResult(obj); + result.success("登录成功"); + return result; } }