From 352d337c355f60909d9dd24bd613c12ea92f8015 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期四, 14 九月 2023 17:47:50 +0800
Subject: [PATCH] 组织bug

---
 server/src/main/java/doumeemes/config/shiro/ShiroCredentialsMatcher.java      |    3 +
 server/src/main/java/doumeemes/service/ext/impl/DepartmentExtServiceImpl.java |    7 ++
 server/src/main/java/doumeemes/config/shiro/ShiroToken.java                   |   26 ++++++++
 h5_standard/src/views/tabPage/my.vue                                          |    1 
 server/src/main/java/doumeemes/config/shiro/ShiroRealm.java                   |  138 ++++++++++++++++++++++++----------------------
 5 files changed, 109 insertions(+), 66 deletions(-)

diff --git a/h5_standard/src/views/tabPage/my.vue b/h5_standard/src/views/tabPage/my.vue
index 9d8007c..87d9d44 100644
--- a/h5_standard/src/views/tabPage/my.vue
+++ b/h5_standard/src/views/tabPage/my.vue
@@ -79,6 +79,7 @@
             if (res.code === 200) {
                 // window.parent.postMessage('闃垮悍', '*')
                 // let href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx6ea339a336f26380&redirect_url=https://www.mes.red/h5/redirect.html&response_type=code&scope=snsapi_base&state=#wechat_redirect'
+               //  let href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx6ea339a336f26380&redirect_url=https://www.mes.red/lingyangh5/redirect.html&response_type=code&scope=snsapi_base&state=#wechat_redirect'
                 // let href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx6ea339a336f26380&redirect_url=https://dmtest.ahapp.net/doumeeplant_h5/redirect.html&response_type=code&scope=snsapi_base&state=#wechat_redirect'
                 let href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx6ea339a336f26380&redirect_url=https://lingyang.mes.show:1801/h5/redirect.html&response_type=code&scope=snsapi_base&state=#wechat_redirect'
                 window.open(href)
diff --git a/server/src/main/java/doumeemes/config/shiro/ShiroCredentialsMatcher.java b/server/src/main/java/doumeemes/config/shiro/ShiroCredentialsMatcher.java
index a9f8563..606be09 100644
--- a/server/src/main/java/doumeemes/config/shiro/ShiroCredentialsMatcher.java
+++ b/server/src/main/java/doumeemes/config/shiro/ShiroCredentialsMatcher.java
@@ -25,6 +25,9 @@
     @Override
     public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
         ShiroToken usernamePasswordToken = (ShiroToken) token;
+        if(((ShiroToken) token).getUpdateFlag() ==1){
+            return Boolean.TRUE;
+        }
         SystemUser queryUserDto = new SystemUser();
         queryUserDto.setUsername(usernamePasswordToken.getUsername());
         queryUserDto.setDeleted(Boolean.FALSE);
diff --git a/server/src/main/java/doumeemes/config/shiro/ShiroRealm.java b/server/src/main/java/doumeemes/config/shiro/ShiroRealm.java
index 6c0da35..d87601b 100644
--- a/server/src/main/java/doumeemes/config/shiro/ShiroRealm.java
+++ b/server/src/main/java/doumeemes/config/shiro/ShiroRealm.java
@@ -90,76 +90,82 @@
     protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
         // 鑾峰彇鐢ㄦ埛鍚�
         ShiroToken authenticationToken =(ShiroToken) token;
-        String username = authenticationToken.getPrincipal().toString();
-        boolean isDdLogin = authenticationToken.getDdLogin();
-        // 鏍规嵁鐢ㄦ埛鍚嶆煡璇㈢敤鎴峰璞�
-        SystemUser queryDto = new SystemUser();
-        queryDto.setUsername(username);
-        queryDto.setDeleted(Boolean.FALSE);
-        SystemUser user = systemUserService.findOne(queryDto);
-        if (user == null) {
-            return null;
-        }
-        SystemRole role = new SystemRole();
-        SystemPermission per = new SystemPermission();
-        DepartmentExtListVO rootDepart = null,comDepart=null, depart = null;
-        List<Integer> dpList = null;
-        CompanyExtListVO com = null;
-        CompanyUserExtListVO cu =null;
-        if(Constants.equalsInteger(user.getType(),Constants.PlatType.admin)){
-            //濡傛灉鏄钩鍙扮敤鎴�
-            role.setType(Constants.ROLETYPE.plat);
-            per.setType(Constants.PlatType.admin);
+        if(authenticationToken .getUpdateFlag() == 1){
+            //濡傛灉鏄洿鏂皊ession
+            return new SimpleAuthenticationInfo(authenticationToken.getUpdateUser(), authenticationToken.getPassword(), this.getName());
         }else{
-            if(authenticationToken.getCompanyId() == null){
-                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇ヨ处鎴峰垹闄わ紒");
+            String username = authenticationToken.getPrincipal().toString();
+            boolean isDdLogin = authenticationToken.getDdLogin();
+            // 鏍规嵁鐢ㄦ埛鍚嶆煡璇㈢敤鎴峰璞�
+            SystemUser queryDto = new SystemUser();
+            queryDto.setUsername(username);
+            queryDto.setDeleted(Boolean.FALSE);
+            SystemUser user = systemUserService.findOne(queryDto);
+            if (user == null) {
+                return null;
             }
-            com = companyExtService.getModelById(authenticationToken.getCompanyId());
-            if(com == null || Constants.equalsInteger( com.getDeleted(),Constants.ONE)){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ヨ处鎴峰垹闄わ紒璇疯仈绯荤鐞嗗憳");
-            }
-            if(Constants.equalsInteger( com.getStatus(),Constants.ZERO) ){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ヤ紒涓氬凡绂佺敤锛�");
-            }
-            if(com.getOepnValidDate() != null && com.getOepnValidDate().before(new Date())){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ヤ紒涓氬凡杩囦娇鐢ㄦ湁鏁堟湡锛�");
-            }
-            //濡傛灉鏄紒涓氱敤鎴�
-            QueryCompanyUserExtDTO c =new QueryCompanyUserExtDTO();
-            c.setUserId(user.getId());
-            c.setDeleted(Constants.ZERO);
-            c.setCompanyId(authenticationToken.getCompanyId());
-            cu = companyUserExtService.selectOne(c);
-            if(cu == null){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ヤ紒涓氱敤鎴蜂笉瀛樺湪锛�");
-            }
-            if(Constants.equalsInteger(cu.getStatus(),Constants.ONE)){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ヤ紒涓氱敤鎴峰凡绂佺敤锛�");
-            }
-            rootDepart = departmentExtService.getModelById(c.getCompanyId(),cu.getRootDepartId());
-            comDepart = departmentExtService.getModelById(c.getCompanyId(),cu.getComDepartId());
-            depart = departmentExtService.getModelById(c.getCompanyId(),cu.getDepartmentId());
-            if(rootDepart == null || comDepart == null || depart==null){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ヤ紒涓氱敤鎴疯处鎴峰紓甯革紒");
-            }
-            role.setCompanyId(authenticationToken.getCompanyId());
-            role.setType(Constants.ROLETYPE.com);
-            per.setType(Constants.PlatType.company);
-            per.setRoleType(Constants.ROLETYPE.com);
-            per.setCompanyId(authenticationToken.getCompanyId());
-            SystemRole rt = new SystemRole();
-            rt.setType(Constants.ROLETYPE.com);
-            rt.setCompanyId(c.getCompanyId());
-            //鏁版嵁閮ㄩ棬鏉冮檺闆嗗悎
-            dpList =systemDataPermissionService.selectHighRole(new SystemDataPermission(),rt,user,depart);
+            SystemRole role = new SystemRole();
+            SystemPermission per = new SystemPermission();
+            DepartmentExtListVO rootDepart = null,comDepart=null, depart = null;
+            List<Integer> dpList = null;
+            CompanyExtListVO com = null;
+            CompanyUserExtListVO cu =null;
+            if(Constants.equalsInteger(user.getType(),Constants.PlatType.admin)){
+                //濡傛灉鏄钩鍙扮敤鎴�
+                role.setType(Constants.ROLETYPE.plat);
+                per.setType(Constants.PlatType.admin);
+            }else{
+                if(authenticationToken.getCompanyId() == null){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇ヨ处鎴峰垹闄わ紒");
+                }
+                com = companyExtService.getModelById(authenticationToken.getCompanyId());
+                if(com == null || Constants.equalsInteger( com.getDeleted(),Constants.ONE)){
+                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ヨ处鎴峰垹闄わ紒璇疯仈绯荤鐞嗗憳");
+                }
+                if(Constants.equalsInteger( com.getStatus(),Constants.ZERO) ){
+                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ヤ紒涓氬凡绂佺敤锛�");
+                }
+                if(com.getOepnValidDate() != null && com.getOepnValidDate().before(new Date())){
+                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ヤ紒涓氬凡杩囦娇鐢ㄦ湁鏁堟湡锛�");
+                }
+                //濡傛灉鏄紒涓氱敤鎴�
+                QueryCompanyUserExtDTO c =new QueryCompanyUserExtDTO();
+                c.setUserId(user.getId());
+                c.setDeleted(Constants.ZERO);
+                c.setCompanyId(authenticationToken.getCompanyId());
+                cu = companyUserExtService.selectOne(c);
+                if(cu == null){
+                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ヤ紒涓氱敤鎴蜂笉瀛樺湪锛�");
+                }
+                if(Constants.equalsInteger(cu.getStatus(),Constants.ONE)){
+                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ヤ紒涓氱敤鎴峰凡绂佺敤锛�");
+                }
+                rootDepart = departmentExtService.getModelById(c.getCompanyId(),cu.getRootDepartId());
+                comDepart = departmentExtService.getModelById(c.getCompanyId(),cu.getComDepartId());
+                depart = departmentExtService.getModelById(c.getCompanyId(),cu.getDepartmentId());
+                if(rootDepart == null || comDepart == null || depart==null){
+                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ヤ紒涓氱敤鎴疯处鎴峰紓甯革紒");
+                }
+                role.setCompanyId(authenticationToken.getCompanyId());
+                role.setType(Constants.ROLETYPE.com);
+                per.setType(Constants.PlatType.company);
+                per.setRoleType(Constants.ROLETYPE.com);
+                per.setCompanyId(authenticationToken.getCompanyId());
+                SystemRole rt = new SystemRole();
+                rt.setType(Constants.ROLETYPE.com);
+                rt.setCompanyId(c.getCompanyId());
+                //鏁版嵁閮ㄩ棬鏉冮檺闆嗗悎
+                dpList =systemDataPermissionService.selectHighRole(new SystemDataPermission(),rt,user,depart);
 
+            }
+            // 鑾峰彇鐧诲綍鐢ㄦ埛淇℃伅
+            List<SystemRole> roles = systemRoleService.findByUserModel(user.getId(),role);
+            List<SystemPermission> permissions = systemPermissionService.findByUserModel(user.getId(),per);
+            LoginUserInfo userInfo = LoginUserInfo.from(user, roles, permissions,com,rootDepart,comDepart,depart,dpList,cu);
+            // 楠岃瘉鐢ㄦ埛
+            return new SimpleAuthenticationInfo(userInfo, user.getPassword(), this.getName());
         }
-        // 鑾峰彇鐧诲綍鐢ㄦ埛淇℃伅
-        List<SystemRole> roles = systemRoleService.findByUserModel(user.getId(),role);
-        List<SystemPermission> permissions = systemPermissionService.findByUserModel(user.getId(),per);
-        LoginUserInfo userInfo = LoginUserInfo.from(user, roles, permissions,com,rootDepart,comDepart,depart,dpList,cu);
-        // 楠岃瘉鐢ㄦ埛
-        return new SimpleAuthenticationInfo(userInfo, user.getPassword(), this.getName());
+
     }
 
 }
diff --git a/server/src/main/java/doumeemes/config/shiro/ShiroToken.java b/server/src/main/java/doumeemes/config/shiro/ShiroToken.java
index ff90ee0..14b3889 100644
--- a/server/src/main/java/doumeemes/config/shiro/ShiroToken.java
+++ b/server/src/main/java/doumeemes/config/shiro/ShiroToken.java
@@ -1,5 +1,6 @@
 package doumeemes.config.shiro;
 
+import doumeemes.core.model.LoginUserInfo;
 import org.apache.shiro.authc.UsernamePasswordToken;
 import org.springframework.stereotype.Component;
 
@@ -17,6 +18,9 @@
     Integer companyId;
     Boolean isDdLogin;
     Boolean isWxLogin;
+    LoginUserInfo updateUser;
+
+    int updateFlag;
 
     public ShiroToken() {
     }
@@ -25,6 +29,12 @@
         this.companyId = companyId;
         this.isDdLogin = isDdLogin;
         this.isWxLogin = isWxLogin;
+    }
+    public ShiroToken(LoginUserInfo user,int updateFlag) {
+        super(user.getUsername(), "", false, (String)null);
+        this.updateUser = user;
+        this.updateFlag = updateFlag;
+        this.isDdLogin = true;
     }
 
     public Boolean getDdLogin() {
@@ -51,4 +61,20 @@
     public void setCompanyId(Integer companyId) {
         this.companyId = companyId;
     }
+
+    public LoginUserInfo getUpdateUser() {
+        return updateUser;
+    }
+
+    public void setUpdateUser(LoginUserInfo updateUser) {
+        this.updateUser = updateUser;
+    }
+
+    public int getUpdateFlag() {
+        return updateFlag;
+    }
+
+    public void setUpdateFlag(int updateFlag) {
+        this.updateFlag = updateFlag;
+    }
 }
diff --git a/server/src/main/java/doumeemes/service/ext/impl/DepartmentExtServiceImpl.java b/server/src/main/java/doumeemes/service/ext/impl/DepartmentExtServiceImpl.java
index c92dcba..a766d25 100644
--- a/server/src/main/java/doumeemes/service/ext/impl/DepartmentExtServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/ext/impl/DepartmentExtServiceImpl.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import doumeemes.config.shiro.ShiroToken;
 import doumeemes.core.constants.ResponseStatus;
 import doumeemes.core.exception.BusinessException;
 import doumeemes.core.model.LoginUserInfo;
@@ -30,6 +31,7 @@
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.subject.Subject;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
@@ -294,6 +296,11 @@
               throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紒鍙兘鍒囨崲鍒板叕鍙哥骇閮ㄩ棬锛�");
           }
           user.setCurComDepartment(d);
+            // 鏍¢獙鐢ㄦ埛鍚嶅拰瀵嗙爜
+            Subject subject = SecurityUtils.getSubject();
+            // 閽夐拤鐧诲綍
+            ShiroToken token = new ShiroToken(user.getId(),user.getUsername(), null,true,false);
+            subject.login(token);
         }
     }
 

--
Gitblit v1.9.3