Переглянути джерело

1.完善生产力平台登录

GouGengquan 9 місяців тому
батько
коміт
05b9bf2531

+ 1 - 0
biz-base/src/main/java/com/dayou/controller/AuthController.java

@@ -12,6 +12,7 @@ import org.springframework.web.bind.annotation.*;
 @RestController
 @RequestMapping("/auth")
 @Slf4j
+@CrossOrigin
 public class AuthController {
 
     @Autowired

+ 1 - 1
biz-base/src/main/java/com/dayou/handler/GlobalException.java

@@ -59,7 +59,7 @@ public class GlobalException {
         else {
             // 其他异常
             log.error("Exception Message:",e);
-            return Result.build(Status.SYSTEM_ERROR,"请联系开发人员处理!", e.getMessage());
+            return Result.build(Status.SYSTEM_ERROR,e.getMessage());
         }
     }
 }

+ 1 - 1
common/src/main/java/com/dayou/auth/StpInterfaceImpl.java

@@ -26,7 +26,7 @@ public class StpInterfaceImpl implements StpInterface {
     @Override
     public List<String> getRoleList(Object loginId, String loginType) {
         // 从登录信息中获取用户信息
-        LoginUserInfo loginUserInfo = (LoginUserInfo) StpUtil.getExtra(loginId.toString());
+        LoginUserInfo loginUserInfo = (LoginUserInfo) StpUtil.getSession().get((String) loginId);
         List<String> roleList = new ArrayList<String>();
         // 如果账号是ADMIN,那么拥有所有角色
         if (loginUserInfo.getRole().equals(RoleEnum.ADMIN.getCode())){

+ 1 - 1
dao/src/main/resources/mapper/UserMapper.xml

@@ -24,7 +24,7 @@
     <select id="getUserInfoById" resultType="com.dayou.vo.UserVO">
         SELECT user.id, user.user_oa_id, name, staff_no, role, department_name, post_name
         FROM user
-        LEFT JOIN user_post ON user_post.user_oa_id = user.user_oa_id AND user_post.delete_status = false
+        LEFT JOIN user_post ON user_post.user_id = user.id AND user_post.delete_status = false
         WHERE user.id = #{id}
         AND user.delete_status = false
     </select>

+ 15 - 8
service/src/main/java/com/dayou/service/impl/AuthServiceImpl.java

@@ -38,6 +38,7 @@ public class AuthServiceImpl implements AuthService {
 
     /**
      * 通过oa系统的信息登录到生产力平台,并同步用户信息
+     *
      * @param oaToken oa系统token
      * @return UserVO
      */
@@ -49,40 +50,46 @@ public class AuthServiceImpl implements AuthService {
         String result = HttpRequest.post(oaApiUrl + "/auth/checkOaToken?token=" + oaToken)
                 .timeout(20000)//超时,毫秒
                 .execute().body();
+        if (ObjectUtil.isNull(result) || ObjectUtil.isEmpty(result)) {
+            throw new RuntimeException("登录失败!Token无效!");
+        }
         JSONObject jsonObject = JSONUtil.parseObj(result);
         OALoginDTO oaLoginDTO = jsonObject.toBean(OALoginDTO.class);
 
         // 判断是否拿到了登录信息
-        if (ObjectUtil.isNotNull(oaLoginDTO)){
+        if (ObjectUtil.isNotNull(oaLoginDTO)) {
 
             // 判断生产力平台的该用户是否存在或最后更新信息的时间是否在oa系统之前
             User user = userMapper.selectOne(new LambdaQueryWrapper<User>().eq(User::getUserOaId, oaLoginDTO.getUserOaId()).eq(BaseEntity::getDeleteStatus, false));
             if (ObjectUtil.isNull(user)) {
+                user = new User();
                 // 新增oa的user信息到生产力平台
                 setUserInfo(oaLoginDTO, user);
                 userMapper.insert(user);
                 UserPost userPost = new UserPost().setUserId(user.getId());
-                setUserPostInfo(oaLoginDTO,userPost);
+                setUserPostInfo(oaLoginDTO, userPost);
                 userPostMapper.insert(userPost);
-            }else if (user.getUpdateTime().before(oaLoginDTO.getLastUpdateTime())){
+            } else if (user.getUpdateTime().before(oaLoginDTO.getLastUpdateTime())) {
                 // 更新oa的user信息到生产力平台
                 setUserInfo(oaLoginDTO, user);
                 userMapper.updateById(user);
                 UserPost userPost = new UserPost().setUserId(user.getId());
-                setUserPostInfo(oaLoginDTO,userPost);
+                setUserPostInfo(oaLoginDTO, userPost);
                 userPostMapper.update(userPost, new UpdateWrapper<UserPost>().eq("user_oa_id", oaLoginDTO.getUserOaId()).eq("delete_status", false));
             }
             UserVO userVO = userMapper.getUserInfoById(user.getId());
-            if (ObjectUtil.isNotNull(userVO)){
+            if (ObjectUtil.isNotNull(userVO)) {
                 // 在生产力平台登录
                 StpUtil.login(userVO.getId(), new SaLoginModel()
                         .setDevice("PC")                // 此次登录的客户端设备类型, 用于[同端互斥登录]时指定此次登录的设备类型
                         .setIsLastingCookie(true)       // 是否为持久Cookie(临时Cookie在浏览器关闭时会自动删除,持久Cookie在重新打开后依然存在)
                         .setToken(oaToken)              // 指定此次登录生成的Token(使用oa系统的token)
-                        .setExtra(userVO.getId().toString(), BeanUtil.toBean(userVO, LoginUserInfo.class)) // 设置额外登录信息
                 );
+                StpUtil.getSession().set(userVO.getId().toString(), BeanUtil.toBean(userVO, LoginUserInfo.class)); // 设置用户信息到会话缓存
+                userVO.setTokenName(StpUtil.getTokenName())
+                        .setTokenValue(StpUtil.getTokenValue());
                 return userVO;
-            }else {
+            } else {
                 throw new RuntimeException("登录失败!Token无效!");
             }
         }
@@ -95,7 +102,7 @@ public class AuthServiceImpl implements AuthService {
                 .setStaffNo(oaLoginDTO.getStaffNo());
     }
 
-    private void setUserPostInfo(OALoginDTO oaLoginDTO, UserPost userPost){
+    private void setUserPostInfo(OALoginDTO oaLoginDTO, UserPost userPost) {
         String jsonDepartmentName = JSONUtil.toJsonStr(oaLoginDTO.getDepartmentNameList());
         String jsonPostName = JSONUtil.toJsonStr(oaLoginDTO.getPostNameList());
         userPost.setUserId(userPost.getUserId())