From 1812198cdb63b5b9da27c20e5606343b7ba73091 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期二, 29 八月 2023 11:47:33 +0800
Subject: [PATCH] redis缓存session

---
 server/src/main/java/doumeemes/config/shiro/ShiroRedisSessionDAO.java          |    2 
 server/src/main/java/doumeemes/config/shiroMemory/ShiroCache.java              |  111 ++++++++++
 server/src/main/java/doumeemes/config/mybatis/MyBatisInterceptor.java          |    7 
 server/src/main/java/doumeemes/config/shiro/ShiroSessionManager.java           |    2 
 server/src/main/java/doumeemes/config/shiroMemory/ShiroCacheManager.java       |    7 
 server/src/main/java/doumeemes/config/shiro/ShiroRealm.java                    |   27 -
 server/src/main/java/doumeemes/config/shiro/ShiroSessionSerializer.java        |    2 
 server/src/main/java/doumeemes/config/shiroMemory/ShiroRealm.java              |   26 +
 server/src/main/java/doumeemes/config/shiro/ShiroToken.java                    |   26 --
 server/src/main/java/doumeemes/config/shiro/ShiroTokenManager.java             |    4 
 server/src/main/java/doumeemes/config/shiro/ShiroCache.java                    |   76 +++++-
 server/src/main/java/doumeemes/config/shiroMemory/ShiroSessionManager.java     |    4 
 server/src/main/java/doumeemes/config/shiroMemory/ShiroTokenManager.java       |    7 
 server/src/main/java/doumeemes/config/shiroMemory/ShiroSessionDAO.java         |   17 -
 server/src/main/java/doumeemes/service/system/impl/SystemLoginServiceImpl.java |    4 
 server/src/main/java/doumeemes/config/shiro/ShiroCredentialsMatcher.java       |    6 
 server/src/main/java/doumeemes/config/shiroMemory/ShiroCredentialsMatcher.java |   12 
 server/src/main/java/doumeemes/service/system/impl/WxLoginServiceImpl.java     |    6 
 server/src/main/java/doumeemes/config/shiro/ShiroAuthFilter.java               |    5 
 server/src/main/java/doumeemes/config/shiroMemory/ShiroAuthFilter.java         |    6 
 server/src/main/java/doumeemes/config/shiroMemory/ShiroConfig.java             |   46 +--
 server/src/main/java/doumeemes/config/shiroMemory/ShiroToken.java              |    7 
 server/src/main/java/doumeemes/config/shiro/ShiroCacheManager.java             |    4 
 /dev/null                                                                      |  159 --------------
 server/src/main/java/doumeemes/config/shiro/ShiroConfig.java                   |   45 ++-
 server/src/main/java/doumeemes/config/shiro/ShiroSessionDAO.java               |   13 
 26 files changed, 295 insertions(+), 336 deletions(-)

diff --git a/server/src/main/java/doumeemes/config/mybatis/MyBatisInterceptor.java b/server/src/main/java/doumeemes/config/mybatis/MyBatisInterceptor.java
index ea10413..1386e5f 100644
--- a/server/src/main/java/doumeemes/config/mybatis/MyBatisInterceptor.java
+++ b/server/src/main/java/doumeemes/config/mybatis/MyBatisInterceptor.java
@@ -118,6 +118,11 @@
      * @date 2022/04/18 18:12
      */
     private LoginUserInfo getLoginUser () {
-        return (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        try {
+            return (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        }catch (Exception e){
+
+            return  null;
+        }
     }
 }
diff --git a/server/src/main/java/doumeemes/config/shiro/ShiroAuthFilter.java b/server/src/main/java/doumeemes/config/shiro/ShiroAuthFilter.java
index b9e3a44..2e5dec5 100644
--- a/server/src/main/java/doumeemes/config/shiro/ShiroAuthFilter.java
+++ b/server/src/main/java/doumeemes/config/shiro/ShiroAuthFilter.java
@@ -1,9 +1,10 @@
 package doumeemes.config.shiro;
 
-import doumeemes.core.model.ApiResponse;
 import com.alibaba.fastjson.JSON;
+import doumeemes.core.model.ApiResponse;
 import org.apache.shiro.web.filter.authc.FormAuthenticationFilter;
 import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Component;
 
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
@@ -12,7 +13,7 @@
 /**
  * Shiro璁よ瘉杩囨护鍣紝澶勭悊鏈璇佹儏鍐电殑鍝嶅簲
  * @author Eva.Caesar Liu
- * @date 2022/04/18 18:12
+ * @date 2023/04/17 12:11
  */
 public class ShiroAuthFilter extends FormAuthenticationFilter {
 
diff --git a/server/src/main/java/doumeemes/config/shiro/ShiroCache.java b/server/src/main/java/doumeemes/config/shiro/ShiroCache.java
index 2b2ec2c..6867883 100644
--- a/server/src/main/java/doumeemes/config/shiro/ShiroCache.java
+++ b/server/src/main/java/doumeemes/config/shiro/ShiroCache.java
@@ -1,34 +1,38 @@
 package doumeemes.config.shiro;
 
-import doumeemes.service.proxy.CacheProxy;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shiro.cache.Cache;
 import org.apache.shiro.cache.CacheException;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.apache.shiro.subject.PrincipalCollection;
+import org.apache.shiro.util.CollectionUtils;
 import org.springframework.context.annotation.Scope;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.SerializationException;
 import org.springframework.stereotype.Component;
-import org.springframework.util.CollectionUtils;
 
+import javax.annotation.Resource;
 import java.io.Serializable;
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Set;
+import java.util.concurrent.TimeUnit;
 
 /**
  * Shiro缂撳瓨
  * @author Eva.Caesar Liu
- * @date 2022/04/18 18:12
+ * @date 2023/04/17 12:11
  */
-//@Scope(value = "prototype")
+@Scope(value = "prototype")
 @Slf4j
-//@Component
+@Component
 public class ShiroCache implements Cache<Object, Serializable> {
 
     private String keyPrefix = "";
 
-    @Autowired
-    private CacheProxy<Object, Serializable> cacheProxy;
+    @Resource(name="sessionRedisTemplate")
+    private RedisTemplate<Object, Serializable> redisTemplate;
 
     public ShiroCache () {
         log.debug("ShiroCache: new, keyPrefix = [" + keyPrefix + "]");
@@ -44,7 +48,7 @@
         if (key == null) {
             return null;
         }
-        return cacheProxy.get(getKey(key));
+        return redisTemplate.opsForValue().get(getKey(key));
     }
 
     @Override
@@ -52,7 +56,7 @@
         if (key == null) {
             return null;
         }
-        cacheProxy.put(getKey(key), value);
+        redisTemplate.opsForValue().set(getKey(key), value);
         return value;
     }
 
@@ -60,14 +64,14 @@
         if (key == null) {
             return null;
         }
-        cacheProxy.put(getKey(key), value, timeout);
+        redisTemplate.opsForValue().set(getKey(key), value, timeout, TimeUnit.SECONDS);
         return value;
     }
 
     @Override
     public void clear() throws CacheException {
         Set<Object> keys = this.keys();
-        cacheProxy.remove(keys);
+        redisTemplate.delete(keys);
     }
 
     @Override
@@ -77,7 +81,7 @@
 
     @Override
     public Set<Object> keys() {
-        Set<Object> keys = cacheProxy.keys(keyPrefix + "*");
+        Set<Object> keys = redisTemplate.keys(keyPrefix + "*");
         if (CollectionUtils.isEmpty(keys)) {
             return Collections.emptySet();
         }
@@ -92,7 +96,7 @@
             return values;
         }
         for (Object k : keys) {
-            values.add(cacheProxy.get(k));
+            values.add(redisTemplate.opsForValue().get(k));
         }
         return values;
     }
@@ -103,11 +107,53 @@
             return null;
         }
         Serializable value = this.get(getKey(key));
-        cacheProxy.remove(getKey(key));
+        redisTemplate.delete(getKey(key));
         return value;
     }
 
     private Object getKey (Object key) {
+        if (key instanceof PrincipalCollection) {
+            return this.keyPrefix + getRedisKeyFromPrincipalIdField((PrincipalCollection)key);
+        }
         return (key instanceof String ? (this.keyPrefix + key) : key);
     }
+
+    /**
+     * 鑾峰彇redis cache key
+     */
+    private String getRedisKeyFromPrincipalIdField(PrincipalCollection key) {
+        Object principalObject = key.getPrimaryPrincipal();
+        if (principalObject instanceof String) {
+            return principalObject.toString();
+        } else {
+            Method pincipalIdGetter = this.getPrincipalIdGetter(principalObject);
+            return this.getIdObj(principalObject, pincipalIdGetter);
+        }
+    }
+
+    private Method getPrincipalIdGetter(Object principalObject) {
+        Method pincipalIdGetter;
+        String principalIdMethodName = this.getPrincipalIdMethodName();
+
+        try {
+            pincipalIdGetter = principalObject.getClass().getMethod(principalIdMethodName);
+            return pincipalIdGetter;
+        } catch (NoSuchMethodException e) {
+            throw new SerializationException(e.getMessage(), e);
+        }
+    }
+
+    private String getIdObj(Object principalObject, Method pincipalIdGetter) {
+        try {
+            Object idObj = pincipalIdGetter.invoke(principalObject);
+            String redisKey = idObj.toString();
+            return redisKey;
+        } catch (Exception e) {
+            throw new SerializationException(e.getMessage(), e);
+        }
+    }
+
+    private String getPrincipalIdMethodName() {
+        return "getId";
+    }
 }
diff --git a/server/src/main/java/doumeemes/config/shiro/ShiroCacheManager.java b/server/src/main/java/doumeemes/config/shiro/ShiroCacheManager.java
index 090444c..900c473 100644
--- a/server/src/main/java/doumeemes/config/shiro/ShiroCacheManager.java
+++ b/server/src/main/java/doumeemes/config/shiro/ShiroCacheManager.java
@@ -14,10 +14,10 @@
 /**
  * 鑷畾涔塖hiro CacheManager
  * @author Eva.Caesar Liu
- * @date 2022/04/18 18:12
+ * @date 2023/04/17 12:11
  */
 @Slf4j
-//@Component
+@Component
 public class ShiroCacheManager implements CacheManager {
 
     private final ConcurrentMap<String, Cache> caches = new ConcurrentHashMap();
diff --git a/server/src/main/java/doumeemes/config/shiro/ShiroConfig.java b/server/src/main/java/doumeemes/config/shiro/ShiroConfig.java
index e3cc18e..a234c9b 100644
--- a/server/src/main/java/doumeemes/config/shiro/ShiroConfig.java
+++ b/server/src/main/java/doumeemes/config/shiro/ShiroConfig.java
@@ -1,28 +1,31 @@
 package doumeemes.config.shiro;
 
+import doumeemes.task.ScheduleTool;
 import org.apache.shiro.mgt.SecurityManager;
 import org.apache.shiro.session.mgt.SessionManager;
 import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
 import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
-import org.apache.shiro.util.ThreadContext;
 import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
 import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
 
 import javax.servlet.Filter;
-import java.util.HashMap;
+import java.io.Serializable;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
 /**
  * Shiro閰嶇疆
  * @author Eva.Caesar Liu
- * @date 2022/04/18 18:12
+ * @date 2023/04/17 12:11
  */
-//@Configuration
+@Configuration
 public class ShiroConfig {
 
     @Value("${cache.session.expire}")
@@ -39,6 +42,20 @@
 
     @Autowired
     private ShiroRealm shiroRealm;
+
+    @Bean("sessionRedisTemplate")
+    public RedisTemplate<Object, Serializable> sessionRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
+        RedisTemplate<Object, Serializable> redisTemplate = new RedisTemplate<>();
+        redisTemplate.setConnectionFactory(redisConnectionFactory);
+        // 榛樿搴忓垪鍖栨柟寮�
+        redisTemplate.setDefaultSerializer(new StringRedisSerializer());
+        // 鍊煎簭鍒楀寲鏂瑰紡
+        ShiroSessionSerializer serializer = new ShiroSessionSerializer();
+        redisTemplate.setValueSerializer(serializer);
+        redisTemplate.setHashValueSerializer(serializer);
+        redisTemplate.afterPropertiesSet();
+        return redisTemplate;
+    }
 
     @Bean
     public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
@@ -60,7 +77,6 @@
         securityManager.setRealm(shiroRealm);
         securityManager.setSessionManager(this.sessionManager());
         securityManager.setCacheManager(shiroCacheManager);
-        ThreadContext.bind(securityManager);
         return securityManager;
     }
 
@@ -70,26 +86,17 @@
         shiroFilterFactoryBean.setSecurityManager(securityManager);
         Map<String, String> map = new LinkedHashMap<>();
         // 璺緞鎷︽埅閰嶇疆
+        map.put("/web/user/login", "anon");
+        map.put("/public/uploadRichText", "anon");
         map.put("/system/login", "anon");
-        map.put("/system/wxLogin", "anon");
-        map.put("/system/wxProgramLogin", "anon");
-        map.put("/system/wxAccountLogin", "anon");
-        map.put("/system/initCompany", "anon");
         map.put("/system/logout", "anon");
         map.put("/common/captcha", "anon");
-        map.put("/statistics/**", "anon");
-        map.put("/dingding/push", "anon");
-//        map.put("/ext/workorderExt/freshStatistics", "anon");
-        map.put("/dingding/jsapiTicket", "anon");
-        map.put("/dingding/ddLogin", "anon");
-        map.put("/dingding/getDingdingCorpId", "anon");
-        map.put("/lingyang/login", "anon");
-        map.put("/lingyang/loginDemo", "anon");
-        map.put("/edgp/**", "anon");
+        //鏀捐 scratch 鎺ュ彛
+        map.put("/web/scratch/**", "anon");
+
         // - 鏀捐swagger
         map.put("/doc.html", "anon");
         map.put("/webjars/**", "anon");
-        map.put("/template/**", "anon");
         map.put("/swagger-resources/**", "anon");
         map.put("/v2/api-docs/**", "anon");
         // - 鍏朵粬鎺ュ彛缁熶竴鎷︽埅
diff --git a/server/src/main/java/doumeemes/config/shiro/ShiroCredentialsMatcher.java b/server/src/main/java/doumeemes/config/shiro/ShiroCredentialsMatcher.java
index 19264b4..a9f8563 100644
--- a/server/src/main/java/doumeemes/config/shiro/ShiroCredentialsMatcher.java
+++ b/server/src/main/java/doumeemes/config/shiro/ShiroCredentialsMatcher.java
@@ -1,5 +1,6 @@
 package doumeemes.config.shiro;
 
+import doumeemes.config.shiro.ShiroToken;
 import doumeemes.core.utils.Utils;
 import doumeemes.dao.system.model.SystemUser;
 import doumeemes.service.system.SystemUserService;
@@ -13,11 +14,10 @@
 /**
  * Shiro瀵嗙爜姣斿澶勭悊
  * @author Eva.Caesar Liu
- * @date 2022/04/18 18:12
+ * @date 2023/04/17 12:11
  */
-//@Component
+@Component
 public class ShiroCredentialsMatcher extends HashedCredentialsMatcher {
-
     @Lazy
     @Autowired
     private SystemUserService systemUserService;
diff --git a/server/src/main/java/doumeemes/config/shiro/ShiroRealm.java b/server/src/main/java/doumeemes/config/shiro/ShiroRealm.java
index c15fc49..6c0da35 100644
--- a/server/src/main/java/doumeemes/config/shiro/ShiroRealm.java
+++ b/server/src/main/java/doumeemes/config/shiro/ShiroRealm.java
@@ -4,9 +4,6 @@
 import doumeemes.core.exception.BusinessException;
 import doumeemes.core.model.LoginUserInfo;
 import doumeemes.core.utils.Constants;
-import doumeemes.dao.business.model.Company;
-import doumeemes.dao.business.model.CompanyUser;
-import doumeemes.dao.business.model.Department;
 import doumeemes.dao.ext.dto.QueryCompanyUserExtDTO;
 import doumeemes.dao.ext.vo.CompanyExtListVO;
 import doumeemes.dao.ext.vo.CompanyUserExtListVO;
@@ -15,7 +12,6 @@
 import doumeemes.dao.system.model.SystemPermission;
 import doumeemes.dao.system.model.SystemRole;
 import doumeemes.dao.system.model.SystemUser;
-import doumeemes.service.business.CompanyUserService;
 import doumeemes.service.ext.CompanyExtService;
 import doumeemes.service.ext.CompanyUserExtService;
 import doumeemes.service.ext.DepartmentExtService;
@@ -37,14 +33,13 @@
 
 import java.util.Date;
 import java.util.List;
-import java.util.Objects;
 
 /**
  * 鑷畾涔塕ealm锛屽鐞嗚璇佸拰鏉冮檺
  * @author Eva.Caesar Liu
- * @date 2022/04/18 18:12
+ * @date 2022/03/15 09:54
  */
-//@Component
+@Component
 public class ShiroRealm extends AuthorizingRealm {
 
     @Lazy
@@ -52,7 +47,7 @@
     private DepartmentExtService departmentExtService;
     @Lazy
     @Autowired
-    private SystemDataPermissionService  systemDataPermissionService;
+    private SystemDataPermissionService systemDataPermissionService;
     @Lazy
     @Autowired
     private CompanyExtService companyExtService;
@@ -70,19 +65,11 @@
     @Lazy
     @Autowired
     private SystemPermissionService systemPermissionService;
-    /**
-     * 閲嶅啓supports鏂规硶锛屼娇 Shiro 鑳藉璇嗗埆鑷畾涔夌殑 Token
-     * @param token
-     * @return
-     */
-    @Override
-    public boolean supports(AuthenticationToken token) {
-        return token instanceof ShiroToken;
-    }
+
     /**
      * 鏉冮檺澶勭悊
      * @author Eva.Caesar Liu
-     * @date 2022/04/18 18:12
+     * @date 2022/03/15 09:54
      */
     @Override
     protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
@@ -97,10 +84,10 @@
     /**
      * 璁よ瘉澶勭悊
      * @author Eva.Caesar Liu
-     * @date 2022/04/18 18:12
+     * @date 2022/03/15 09:54
      */
     @Override
-    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException,BusinessException {
+    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
         // 鑾峰彇鐢ㄦ埛鍚�
         ShiroToken authenticationToken =(ShiroToken) token;
         String username = authenticationToken.getPrincipal().toString();
diff --git a/server/src/main/java/doumeemes/config/shiroRedis/ShiroRedisSessionDAO.java b/server/src/main/java/doumeemes/config/shiro/ShiroRedisSessionDAO.java
similarity index 98%
rename from server/src/main/java/doumeemes/config/shiroRedis/ShiroRedisSessionDAO.java
rename to server/src/main/java/doumeemes/config/shiro/ShiroRedisSessionDAO.java
index fb2fe30..5fb2119 100644
--- a/server/src/main/java/doumeemes/config/shiroRedis/ShiroRedisSessionDAO.java
+++ b/server/src/main/java/doumeemes/config/shiro/ShiroRedisSessionDAO.java
@@ -1,4 +1,4 @@
-package doumeemes.config.shiroRedis;
+package doumeemes.config.shiro;
 
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.SerializationUtils;
diff --git a/server/src/main/java/doumeemes/config/shiro/ShiroSessionDAO.java b/server/src/main/java/doumeemes/config/shiro/ShiroSessionDAO.java
index 9b33074..3c9ceba 100644
--- a/server/src/main/java/doumeemes/config/shiro/ShiroSessionDAO.java
+++ b/server/src/main/java/doumeemes/config/shiro/ShiroSessionDAO.java
@@ -10,16 +10,19 @@
 import org.springframework.stereotype.Component;
 
 import java.io.Serializable;
-import java.util.*;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
 
 /**
  * 鑷畾涔塖hiro SessionDAO锛屽皢浼氳瘽淇℃伅瀛樺叆缂撳瓨涓�
  * @author Eva.Caesar Liu
- * @date 2022/04/18 18:12
+ * @date 2023/04/17 12:11
  */
-//@Data
+@Data
 @Slf4j
-//@Component
+@Component
 public class ShiroSessionDAO implements SessionDAO {
 
     private static final String KEY_PREFIX = "shiro:session:";
@@ -27,7 +30,7 @@
     @Autowired
     private ShiroCache shiroCache;
 
-    private int expireTime = 1800;
+    private int expireTime = 60 * 60 * 24;
 
     @Autowired
     private ShiroTokenManager shiroTokenManager;
diff --git a/server/src/main/java/doumeemes/config/shiro/ShiroSessionManager.java b/server/src/main/java/doumeemes/config/shiro/ShiroSessionManager.java
index 115403a..4e58bec 100644
--- a/server/src/main/java/doumeemes/config/shiro/ShiroSessionManager.java
+++ b/server/src/main/java/doumeemes/config/shiro/ShiroSessionManager.java
@@ -19,7 +19,7 @@
 /**
  * 鑷畾涔変細璇濈鐞嗗櫒
  * @author Eva.Caesar Liu
- * @date 2022/04/18 18:12
+ * @date 2023/04/17 12:11
  */
 @Slf4j
 public class ShiroSessionManager extends DefaultSessionManager implements WebSessionManager {
diff --git a/server/src/main/java/doumeemes/config/shiroRedis/ShiroSessionSerializer.java b/server/src/main/java/doumeemes/config/shiro/ShiroSessionSerializer.java
similarity index 96%
rename from server/src/main/java/doumeemes/config/shiroRedis/ShiroSessionSerializer.java
rename to server/src/main/java/doumeemes/config/shiro/ShiroSessionSerializer.java
index cd72d2d..9a21d79 100644
--- a/server/src/main/java/doumeemes/config/shiroRedis/ShiroSessionSerializer.java
+++ b/server/src/main/java/doumeemes/config/shiro/ShiroSessionSerializer.java
@@ -1,4 +1,4 @@
-package doumeemes.config.shiroRedis;
+package doumeemes.config.shiro;
 
 import org.apache.commons.lang3.SerializationUtils;
 import org.apache.shiro.codec.Base64;
diff --git a/server/src/main/java/doumeemes/config/shiro/ShiroToken.java b/server/src/main/java/doumeemes/config/shiro/ShiroToken.java
index 6f870b6..ff90ee0 100644
--- a/server/src/main/java/doumeemes/config/shiro/ShiroToken.java
+++ b/server/src/main/java/doumeemes/config/shiro/ShiroToken.java
@@ -1,34 +1,14 @@
 package doumeemes.config.shiro;
 
-import doumeemes.core.model.LoginUserInfo;
-import doumeemes.core.utils.Constants;
-import doumeemes.dao.business.model.Department;
-import doumeemes.dao.ext.dto.QueryCompanyUserExtDTO;
-import doumeemes.dao.ext.vo.CompanyUserExtListVO;
-import doumeemes.dao.system.model.SystemPermission;
-import doumeemes.dao.system.model.SystemRole;
-import doumeemes.dao.system.model.SystemUser;
-import doumeemes.service.ext.CompanyUserExtService;
-import doumeemes.service.system.SystemPermissionService;
-import doumeemes.service.system.SystemRoleService;
-import doumeemes.service.system.SystemUserService;
-import org.apache.shiro.authc.*;
-import org.apache.shiro.authz.AuthorizationInfo;
-import org.apache.shiro.authz.SimpleAuthorizationInfo;
-import org.apache.shiro.realm.AuthorizingRealm;
-import org.apache.shiro.subject.PrincipalCollection;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
+import org.apache.shiro.authc.UsernamePasswordToken;
 import org.springframework.stereotype.Component;
-
-import java.util.List;
 
 /**
  * 鑷畾涔塗oken 锛屽鐞嗚璇佸拰鏉冮檺
  * @author Eva.Caesar Liu
  * @date 2022/04/18 18:12
  */
-//@Component
+@Component
 public class ShiroToken extends UsernamePasswordToken {
 
     /**
@@ -40,7 +20,7 @@
 
     public ShiroToken() {
     }
-    public  ShiroToken(Integer companyId,String username, String password,boolean isDdLogin,boolean isWxLogin) {
+    public ShiroToken(Integer companyId, String username, String password, boolean isDdLogin, boolean isWxLogin) {
         super(username,  password, false, (String)null);
         this.companyId = companyId;
         this.isDdLogin = isDdLogin;
diff --git a/server/src/main/java/doumeemes/config/shiro/ShiroTokenManager.java b/server/src/main/java/doumeemes/config/shiro/ShiroTokenManager.java
index 441a0cf..53c6020 100644
--- a/server/src/main/java/doumeemes/config/shiro/ShiroTokenManager.java
+++ b/server/src/main/java/doumeemes/config/shiro/ShiroTokenManager.java
@@ -8,9 +8,9 @@
 /**
  * 榛樿Token绠$悊鍣�
  * @author Eva.Caesar Liu
- * @date 2022/04/18 18:12
+ * @date 2023/04/17 12:11
  */
-//@Component
+@Component
 public class ShiroTokenManager {
 
     String build() {
diff --git a/server/src/main/java/doumeemes/config/shiroRedis/ShiroAuthFilter.java b/server/src/main/java/doumeemes/config/shiroMemory/ShiroAuthFilter.java
similarity index 93%
rename from server/src/main/java/doumeemes/config/shiroRedis/ShiroAuthFilter.java
rename to server/src/main/java/doumeemes/config/shiroMemory/ShiroAuthFilter.java
index aa80c10..f6d86bd 100644
--- a/server/src/main/java/doumeemes/config/shiroRedis/ShiroAuthFilter.java
+++ b/server/src/main/java/doumeemes/config/shiroMemory/ShiroAuthFilter.java
@@ -1,7 +1,7 @@
-package doumeemes.config.shiroRedis;
+package doumeemes.config.shiroMemory;
 
-import com.alibaba.fastjson.JSON;
 import doumeemes.core.model.ApiResponse;
+import com.alibaba.fastjson.JSON;
 import org.apache.shiro.web.filter.authc.FormAuthenticationFilter;
 import org.springframework.http.HttpStatus;
 
@@ -12,7 +12,7 @@
 /**
  * Shiro璁よ瘉杩囨护鍣紝澶勭悊鏈璇佹儏鍐电殑鍝嶅簲
  * @author Eva.Caesar Liu
- * @date 2023/04/17 12:11
+ * @date 2022/04/18 18:12
  */
 public class ShiroAuthFilter extends FormAuthenticationFilter {
 
diff --git a/server/src/main/java/doumeemes/config/shiroMemory/ShiroCache.java b/server/src/main/java/doumeemes/config/shiroMemory/ShiroCache.java
new file mode 100644
index 0000000..d42c75e
--- /dev/null
+++ b/server/src/main/java/doumeemes/config/shiroMemory/ShiroCache.java
@@ -0,0 +1,111 @@
+package doumeemes.config.shiroMemory;
+
+import doumeemes.service.proxy.CacheProxy;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.cache.Cache;
+import org.apache.shiro.cache.CacheException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Set;
+
+/**
+ * Shiro缂撳瓨
+ * @author Eva.Caesar Liu
+ * @date 2022/04/18 18:12
+ */
+//@Scope(value = "prototype")
+@Slf4j
+//@Component
+public class ShiroCache implements Cache<Object, Serializable> {
+
+    private String keyPrefix = "";
+
+    @Autowired
+    private CacheProxy<Object, Serializable> cacheProxy;
+
+    public ShiroCache () {
+        log.debug("ShiroCache: new, keyPrefix = [" + keyPrefix + "]");
+    }
+
+    public ShiroCache(String keyPrefix) {
+        log.debug("ShiroCache: new, keyPrefix = [" + keyPrefix + "]");
+        this.keyPrefix = keyPrefix;
+    }
+
+    @Override
+    public Serializable get(Object key) throws CacheException {
+        if (key == null) {
+            return null;
+        }
+        return cacheProxy.get(getKey(key));
+    }
+
+    @Override
+    public Serializable put(Object key, Serializable value) throws CacheException {
+        if (key == null) {
+            return null;
+        }
+        cacheProxy.put(getKey(key), value);
+        return value;
+    }
+
+    public Serializable put(Object key, Serializable value, int timeout) throws CacheException {
+        if (key == null) {
+            return null;
+        }
+        cacheProxy.put(getKey(key), value, timeout);
+        return value;
+    }
+
+    @Override
+    public void clear() throws CacheException {
+        Set<Object> keys = this.keys();
+        cacheProxy.remove(keys);
+    }
+
+    @Override
+    public int size() {
+        return this.keys().size();
+    }
+
+    @Override
+    public Set<Object> keys() {
+        Set<Object> keys = cacheProxy.keys(keyPrefix + "*");
+        if (CollectionUtils.isEmpty(keys)) {
+            return Collections.emptySet();
+        }
+        return keys;
+    }
+
+    @Override
+    public Collection<Serializable> values() {
+        Collection<Serializable> values = new ArrayList<>();
+        Set<Object> keys = this.keys();
+        if (CollectionUtils.isEmpty(keys)) {
+            return values;
+        }
+        for (Object k : keys) {
+            values.add(cacheProxy.get(k));
+        }
+        return values;
+    }
+
+    @Override
+    public Serializable remove(Object key) throws CacheException {
+        if (key == null) {
+            return null;
+        }
+        Serializable value = this.get(getKey(key));
+        cacheProxy.remove(getKey(key));
+        return value;
+    }
+
+    private Object getKey (Object key) {
+        return (key instanceof String ? (this.keyPrefix + key) : key);
+    }
+}
diff --git a/server/src/main/java/doumeemes/config/shiroRedis/ShiroCacheManager.java b/server/src/main/java/doumeemes/config/shiroMemory/ShiroCacheManager.java
similarity index 90%
rename from server/src/main/java/doumeemes/config/shiroRedis/ShiroCacheManager.java
rename to server/src/main/java/doumeemes/config/shiroMemory/ShiroCacheManager.java
index 8c2d12f..2f4f3e8 100644
--- a/server/src/main/java/doumeemes/config/shiroRedis/ShiroCacheManager.java
+++ b/server/src/main/java/doumeemes/config/shiroMemory/ShiroCacheManager.java
@@ -1,4 +1,4 @@
-package doumeemes.config.shiroRedis;
+package doumeemes.config.shiroMemory;
 
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shiro.cache.Cache;
@@ -6,7 +6,6 @@
 import org.apache.shiro.cache.CacheManager;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationContext;
-import org.springframework.stereotype.Component;
 
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
@@ -14,10 +13,10 @@
 /**
  * 鑷畾涔塖hiro CacheManager
  * @author Eva.Caesar Liu
- * @date 2023/04/17 12:11
+ * @date 2022/04/18 18:12
  */
 @Slf4j
-@Component
+//@Component
 public class ShiroCacheManager implements CacheManager {
 
     private final ConcurrentMap<String, Cache> caches = new ConcurrentHashMap();
diff --git a/server/src/main/java/doumeemes/config/shiroRedis/ShiroConfig.java b/server/src/main/java/doumeemes/config/shiroMemory/ShiroConfig.java
similarity index 74%
rename from server/src/main/java/doumeemes/config/shiroRedis/ShiroConfig.java
rename to server/src/main/java/doumeemes/config/shiroMemory/ShiroConfig.java
index ef99566..767cfdb 100644
--- a/server/src/main/java/doumeemes/config/shiroRedis/ShiroConfig.java
+++ b/server/src/main/java/doumeemes/config/shiroMemory/ShiroConfig.java
@@ -1,30 +1,26 @@
-package doumeemes.config.shiroRedis;
+package doumeemes.config.shiroMemory;
 
 import org.apache.shiro.mgt.SecurityManager;
 import org.apache.shiro.session.mgt.SessionManager;
 import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
 import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
+import org.apache.shiro.util.ThreadContext;
 import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
 import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.data.redis.connection.RedisConnectionFactory;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.serializer.StringRedisSerializer;
 
 import javax.servlet.Filter;
-import java.io.Serializable;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
 /**
  * Shiro閰嶇疆
  * @author Eva.Caesar Liu
- * @date 2023/04/17 12:11
+ * @date 2022/04/18 18:12
  */
-@Configuration
+//@Configuration
 public class ShiroConfig {
 
     @Value("${cache.session.expire}")
@@ -41,20 +37,6 @@
 
     @Autowired
     private ShiroRealm shiroRealm;
-
-    @Bean("sessionRedisTemplate")
-    public RedisTemplate<Object, Serializable> sessionRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
-        RedisTemplate<Object, Serializable> redisTemplate = new RedisTemplate<>();
-        redisTemplate.setConnectionFactory(redisConnectionFactory);
-        // 榛樿搴忓垪鍖栨柟寮�
-        redisTemplate.setDefaultSerializer(new StringRedisSerializer());
-        // 鍊煎簭鍒楀寲鏂瑰紡
-        ShiroSessionSerializer serializer = new ShiroSessionSerializer();
-        redisTemplate.setValueSerializer(serializer);
-        redisTemplate.setHashValueSerializer(serializer);
-        redisTemplate.afterPropertiesSet();
-        return redisTemplate;
-    }
 
     @Bean
     public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
@@ -76,6 +58,7 @@
         securityManager.setRealm(shiroRealm);
         securityManager.setSessionManager(this.sessionManager());
         securityManager.setCacheManager(shiroCacheManager);
+        ThreadContext.bind(securityManager);
         return securityManager;
     }
 
@@ -85,17 +68,26 @@
         shiroFilterFactoryBean.setSecurityManager(securityManager);
         Map<String, String> map = new LinkedHashMap<>();
         // 璺緞鎷︽埅閰嶇疆
-        map.put("/web/user/login", "anon");
-        map.put("/public/uploadRichText", "anon");
         map.put("/system/login", "anon");
+        map.put("/system/wxLogin", "anon");
+        map.put("/system/wxProgramLogin", "anon");
+        map.put("/system/wxAccountLogin", "anon");
+        map.put("/system/initCompany", "anon");
         map.put("/system/logout", "anon");
         map.put("/common/captcha", "anon");
-        //鏀捐 scratch 鎺ュ彛
-        map.put("/web/scratch/**", "anon");
-
+        map.put("/statistics/**", "anon");
+        map.put("/dingding/push", "anon");
+//        map.put("/ext/workorderExt/freshStatistics", "anon");
+        map.put("/dingding/jsapiTicket", "anon");
+        map.put("/dingding/ddLogin", "anon");
+        map.put("/dingding/getDingdingCorpId", "anon");
+        map.put("/lingyang/login", "anon");
+        map.put("/lingyang/loginDemo", "anon");
+        map.put("/edgp/**", "anon");
         // - 鏀捐swagger
         map.put("/doc.html", "anon");
         map.put("/webjars/**", "anon");
+        map.put("/template/**", "anon");
         map.put("/swagger-resources/**", "anon");
         map.put("/v2/api-docs/**", "anon");
         // - 鍏朵粬鎺ュ彛缁熶竴鎷︽埅
diff --git a/server/src/main/java/doumeemes/config/shiroRedis/ShiroCredentialsMatcher.java b/server/src/main/java/doumeemes/config/shiroMemory/ShiroCredentialsMatcher.java
similarity index 82%
rename from server/src/main/java/doumeemes/config/shiroRedis/ShiroCredentialsMatcher.java
rename to server/src/main/java/doumeemes/config/shiroMemory/ShiroCredentialsMatcher.java
index 87db48b..3ee2b0e 100644
--- a/server/src/main/java/doumeemes/config/shiroRedis/ShiroCredentialsMatcher.java
+++ b/server/src/main/java/doumeemes/config/shiroMemory/ShiroCredentialsMatcher.java
@@ -1,31 +1,29 @@
-package doumeemes.config.shiroRedis;
+package doumeemes.config.shiroMemory;
 
-import doumeemes.config.shiro.ShiroToken;
 import doumeemes.core.utils.Utils;
 import doumeemes.dao.system.model.SystemUser;
 import doumeemes.service.system.SystemUserService;
 import org.apache.shiro.authc.AuthenticationInfo;
 import org.apache.shiro.authc.AuthenticationToken;
-import org.apache.shiro.authc.UsernamePasswordToken;
 import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.stereotype.Component;
 
 /**
  * Shiro瀵嗙爜姣斿澶勭悊
  * @author Eva.Caesar Liu
- * @date 2023/04/17 12:11
+ * @date 2022/04/18 18:12
  */
-@Component
+//@Component
 public class ShiroCredentialsMatcher extends HashedCredentialsMatcher {
+
     @Lazy
     @Autowired
     private SystemUserService systemUserService;
 
     @Override
     public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
-        doumeemes.config.shiro.ShiroToken usernamePasswordToken = (ShiroToken) token;
+        ShiroToken usernamePasswordToken = (ShiroToken) token;
         SystemUser queryUserDto = new SystemUser();
         queryUserDto.setUsername(usernamePasswordToken.getUsername());
         queryUserDto.setDeleted(Boolean.FALSE);
diff --git a/server/src/main/java/doumeemes/config/shiroRedis/ShiroRealm.java b/server/src/main/java/doumeemes/config/shiroMemory/ShiroRealm.java
similarity index 92%
rename from server/src/main/java/doumeemes/config/shiroRedis/ShiroRealm.java
rename to server/src/main/java/doumeemes/config/shiroMemory/ShiroRealm.java
index ab0208d..a56eb80 100644
--- a/server/src/main/java/doumeemes/config/shiroRedis/ShiroRealm.java
+++ b/server/src/main/java/doumeemes/config/shiroMemory/ShiroRealm.java
@@ -1,4 +1,4 @@
-package doumeemes.config.shiroRedis;
+package doumeemes.config.shiroMemory;
 
 import doumeemes.core.constants.ResponseStatus;
 import doumeemes.core.exception.BusinessException;
@@ -19,7 +19,6 @@
 import doumeemes.service.system.SystemPermissionService;
 import doumeemes.service.system.SystemRoleService;
 import doumeemes.service.system.SystemUserService;
-import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.authc.AuthenticationException;
 import org.apache.shiro.authc.AuthenticationInfo;
 import org.apache.shiro.authc.AuthenticationToken;
@@ -30,7 +29,6 @@
 import org.apache.shiro.subject.PrincipalCollection;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.stereotype.Component;
 
 import java.util.Date;
 import java.util.List;
@@ -38,9 +36,9 @@
 /**
  * 鑷畾涔塕ealm锛屽鐞嗚璇佸拰鏉冮檺
  * @author Eva.Caesar Liu
- * @date 2022/03/15 09:54
+ * @date 2022/04/18 18:12
  */
-@Component
+//@Component
 public class ShiroRealm extends AuthorizingRealm {
 
     @Lazy
@@ -48,7 +46,7 @@
     private DepartmentExtService departmentExtService;
     @Lazy
     @Autowired
-    private SystemDataPermissionService systemDataPermissionService;
+    private SystemDataPermissionService  systemDataPermissionService;
     @Lazy
     @Autowired
     private CompanyExtService companyExtService;
@@ -66,11 +64,19 @@
     @Lazy
     @Autowired
     private SystemPermissionService systemPermissionService;
-
+    /**
+     * 閲嶅啓supports鏂规硶锛屼娇 Shiro 鑳藉璇嗗埆鑷畾涔夌殑 Token
+     * @param token
+     * @return
+     */
+    @Override
+    public boolean supports(AuthenticationToken token) {
+        return token instanceof ShiroToken;
+    }
     /**
      * 鏉冮檺澶勭悊
      * @author Eva.Caesar Liu
-     * @date 2022/03/15 09:54
+     * @date 2022/04/18 18:12
      */
     @Override
     protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
@@ -85,10 +91,10 @@
     /**
      * 璁よ瘉澶勭悊
      * @author Eva.Caesar Liu
-     * @date 2022/03/15 09:54
+     * @date 2022/04/18 18:12
      */
     @Override
-    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
+    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException,BusinessException {
         // 鑾峰彇鐢ㄦ埛鍚�
         ShiroToken authenticationToken =(ShiroToken) token;
         String username = authenticationToken.getPrincipal().toString();
diff --git a/server/src/main/java/doumeemes/config/shiroRedis/ShiroSessionDAO.java b/server/src/main/java/doumeemes/config/shiroMemory/ShiroSessionDAO.java
similarity index 91%
rename from server/src/main/java/doumeemes/config/shiroRedis/ShiroSessionDAO.java
rename to server/src/main/java/doumeemes/config/shiroMemory/ShiroSessionDAO.java
index dd3914f..1049556 100644
--- a/server/src/main/java/doumeemes/config/shiroRedis/ShiroSessionDAO.java
+++ b/server/src/main/java/doumeemes/config/shiroMemory/ShiroSessionDAO.java
@@ -1,28 +1,23 @@
-package doumeemes.config.shiroRedis;
+package doumeemes.config.shiroMemory;
 
-import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shiro.session.Session;
 import org.apache.shiro.session.UnknownSessionException;
 import org.apache.shiro.session.mgt.SimpleSession;
 import org.apache.shiro.session.mgt.eis.SessionDAO;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
 
 import java.io.Serializable;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
+import java.util.*;
 
 /**
  * 鑷畾涔塖hiro SessionDAO锛屽皢浼氳瘽淇℃伅瀛樺叆缂撳瓨涓�
  * @author Eva.Caesar Liu
- * @date 2023/04/17 12:11
+ * @date 2022/04/18 18:12
  */
-@Data
+//@Data
 @Slf4j
-@Component
+//@Component
 public class ShiroSessionDAO implements SessionDAO {
 
     private static final String KEY_PREFIX = "shiro:session:";
@@ -30,7 +25,7 @@
     @Autowired
     private ShiroCache shiroCache;
 
-    private int expireTime = 60 * 60 * 24;
+    private int expireTime = 1800;
 
     @Autowired
     private ShiroTokenManager shiroTokenManager;
diff --git a/server/src/main/java/doumeemes/config/shiroRedis/ShiroSessionManager.java b/server/src/main/java/doumeemes/config/shiroMemory/ShiroSessionManager.java
similarity index 97%
rename from server/src/main/java/doumeemes/config/shiroRedis/ShiroSessionManager.java
rename to server/src/main/java/doumeemes/config/shiroMemory/ShiroSessionManager.java
index b64d773..352ffe9 100644
--- a/server/src/main/java/doumeemes/config/shiroRedis/ShiroSessionManager.java
+++ b/server/src/main/java/doumeemes/config/shiroMemory/ShiroSessionManager.java
@@ -1,4 +1,4 @@
-package doumeemes.config.shiroRedis;
+package doumeemes.config.shiroMemory;
 
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shiro.session.Session;
@@ -19,7 +19,7 @@
 /**
  * 鑷畾涔変細璇濈鐞嗗櫒
  * @author Eva.Caesar Liu
- * @date 2023/04/17 12:11
+ * @date 2022/04/18 18:12
  */
 @Slf4j
 public class ShiroSessionManager extends DefaultSessionManager implements WebSessionManager {
diff --git a/server/src/main/java/doumeemes/config/shiroRedis/ShiroToken.java b/server/src/main/java/doumeemes/config/shiroMemory/ShiroToken.java
similarity index 87%
rename from server/src/main/java/doumeemes/config/shiroRedis/ShiroToken.java
rename to server/src/main/java/doumeemes/config/shiroMemory/ShiroToken.java
index 92a7314..7913e46 100644
--- a/server/src/main/java/doumeemes/config/shiroRedis/ShiroToken.java
+++ b/server/src/main/java/doumeemes/config/shiroMemory/ShiroToken.java
@@ -1,14 +1,13 @@
-package doumeemes.config.shiroRedis;
+package doumeemes.config.shiroMemory;
 
-import org.apache.shiro.authc.UsernamePasswordToken;
-import org.springframework.stereotype.Component;
+import org.apache.shiro.authc.*;
 
 /**
  * 鑷畾涔塗oken 锛屽鐞嗚璇佸拰鏉冮檺
  * @author Eva.Caesar Liu
  * @date 2022/04/18 18:12
  */
-@Component
+//@Component
 public class ShiroToken extends UsernamePasswordToken {
 
     /**
diff --git a/server/src/main/java/doumeemes/config/shiroRedis/ShiroTokenManager.java b/server/src/main/java/doumeemes/config/shiroMemory/ShiroTokenManager.java
similarity index 77%
rename from server/src/main/java/doumeemes/config/shiroRedis/ShiroTokenManager.java
rename to server/src/main/java/doumeemes/config/shiroMemory/ShiroTokenManager.java
index c53c3fa..f9f6d3e 100644
--- a/server/src/main/java/doumeemes/config/shiroRedis/ShiroTokenManager.java
+++ b/server/src/main/java/doumeemes/config/shiroMemory/ShiroTokenManager.java
@@ -1,16 +1,15 @@
-package doumeemes.config.shiroRedis;
+package doumeemes.config.shiroMemory;
 
 import doumeemes.core.exception.UnSafeSessionException;
-import org.springframework.stereotype.Component;
 
 import java.util.UUID;
 
 /**
  * 榛樿Token绠$悊鍣�
  * @author Eva.Caesar Liu
- * @date 2023/04/17 12:11
+ * @date 2022/04/18 18:12
  */
-@Component
+//@Component
 public class ShiroTokenManager {
 
     String build() {
diff --git a/server/src/main/java/doumeemes/config/shiroRedis/ShiroCache.java b/server/src/main/java/doumeemes/config/shiroRedis/ShiroCache.java
deleted file mode 100644
index 4527f39..0000000
--- a/server/src/main/java/doumeemes/config/shiroRedis/ShiroCache.java
+++ /dev/null
@@ -1,159 +0,0 @@
-package doumeemes.config.shiroRedis;
-
-import lombok.extern.slf4j.Slf4j;
-import org.apache.shiro.cache.Cache;
-import org.apache.shiro.cache.CacheException;
-import org.apache.shiro.subject.PrincipalCollection;
-import org.apache.shiro.util.CollectionUtils;
-import org.springframework.context.annotation.Scope;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.serializer.SerializationException;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.io.Serializable;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Shiro缂撳瓨
- * @author Eva.Caesar Liu
- * @date 2023/04/17 12:11
- */
-@Scope(value = "prototype")
-@Slf4j
-@Component
-public class ShiroCache implements Cache<Object, Serializable> {
-
-    private String keyPrefix = "";
-
-    @Resource(name="sessionRedisTemplate")
-    private RedisTemplate<Object, Serializable> redisTemplate;
-
-    public ShiroCache () {
-        log.debug("ShiroCache: new, keyPrefix = [" + keyPrefix + "]");
-    }
-
-    public ShiroCache(String keyPrefix) {
-        log.debug("ShiroCache: new, keyPrefix = [" + keyPrefix + "]");
-        this.keyPrefix = keyPrefix;
-    }
-
-    @Override
-    public Serializable get(Object key) throws CacheException {
-        if (key == null) {
-            return null;
-        }
-        return redisTemplate.opsForValue().get(getKey(key));
-    }
-
-    @Override
-    public Serializable put(Object key, Serializable value) throws CacheException {
-        if (key == null) {
-            return null;
-        }
-        redisTemplate.opsForValue().set(getKey(key), value);
-        return value;
-    }
-
-    public Serializable put(Object key, Serializable value, int timeout) throws CacheException {
-        if (key == null) {
-            return null;
-        }
-        redisTemplate.opsForValue().set(getKey(key), value, timeout, TimeUnit.SECONDS);
-        return value;
-    }
-
-    @Override
-    public void clear() throws CacheException {
-        Set<Object> keys = this.keys();
-        redisTemplate.delete(keys);
-    }
-
-    @Override
-    public int size() {
-        return this.keys().size();
-    }
-
-    @Override
-    public Set<Object> keys() {
-        Set<Object> keys = redisTemplate.keys(keyPrefix + "*");
-        if (CollectionUtils.isEmpty(keys)) {
-            return Collections.emptySet();
-        }
-        return keys;
-    }
-
-    @Override
-    public Collection<Serializable> values() {
-        Collection<Serializable> values = new ArrayList<>();
-        Set<Object> keys = this.keys();
-        if (CollectionUtils.isEmpty(keys)) {
-            return values;
-        }
-        for (Object k : keys) {
-            values.add(redisTemplate.opsForValue().get(k));
-        }
-        return values;
-    }
-
-    @Override
-    public Serializable remove(Object key) throws CacheException {
-        if (key == null) {
-            return null;
-        }
-        Serializable value = this.get(getKey(key));
-        redisTemplate.delete(getKey(key));
-        return value;
-    }
-
-    private Object getKey (Object key) {
-        if (key instanceof PrincipalCollection) {
-            return this.keyPrefix + getRedisKeyFromPrincipalIdField((PrincipalCollection)key);
-        }
-        return (key instanceof String ? (this.keyPrefix + key) : key);
-    }
-
-    /**
-     * 鑾峰彇redis cache key
-     */
-    private String getRedisKeyFromPrincipalIdField(PrincipalCollection key) {
-        Object principalObject = key.getPrimaryPrincipal();
-        if (principalObject instanceof String) {
-            return principalObject.toString();
-        } else {
-            Method pincipalIdGetter = this.getPrincipalIdGetter(principalObject);
-            return this.getIdObj(principalObject, pincipalIdGetter);
-        }
-    }
-
-    private Method getPrincipalIdGetter(Object principalObject) {
-        Method pincipalIdGetter;
-        String principalIdMethodName = this.getPrincipalIdMethodName();
-
-        try {
-            pincipalIdGetter = principalObject.getClass().getMethod(principalIdMethodName);
-            return pincipalIdGetter;
-        } catch (NoSuchMethodException e) {
-            throw new SerializationException(e.getMessage(), e);
-        }
-    }
-
-    private String getIdObj(Object principalObject, Method pincipalIdGetter) {
-        try {
-            Object idObj = pincipalIdGetter.invoke(principalObject);
-            String redisKey = idObj.toString();
-            return redisKey;
-        } catch (Exception e) {
-            throw new SerializationException(e.getMessage(), e);
-        }
-    }
-
-    private String getPrincipalIdMethodName() {
-        return "getId";
-    }
-}
diff --git a/server/src/main/java/doumeemes/service/system/impl/SystemLoginServiceImpl.java b/server/src/main/java/doumeemes/service/system/impl/SystemLoginServiceImpl.java
index 8c7c205..cdd4609 100644
--- a/server/src/main/java/doumeemes/service/system/impl/SystemLoginServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/system/impl/SystemLoginServiceImpl.java
@@ -1,8 +1,6 @@
 package doumeemes.service.system.impl;
 
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.iflytek.antelope.other.client.dto.resp.UserDTO;
 import doumeemes.biz.system.SystemDictDataBiz;
 import doumeemes.config.shiro.ShiroToken;
@@ -14,9 +12,7 @@
 import doumeemes.core.utils.dingding.DingDingUtil;
 import doumeemes.core.utils.dingding.LingyangUtil;
 import doumeemes.core.utils.edpg.EdgpServerUtil;
-import doumeemes.core.utils.edpg.EdgpUtil;
 import doumeemes.core.utils.edpg.bean.AppUserInfoModel;
-import doumeemes.dao.business.dto.CompanyInitDataDTO;
 import doumeemes.dao.business.model.Company;
 import doumeemes.dao.business.model.CompanyUser;
 import doumeemes.dao.ext.CompanyExtMapper;
diff --git a/server/src/main/java/doumeemes/service/system/impl/WxLoginServiceImpl.java b/server/src/main/java/doumeemes/service/system/impl/WxLoginServiceImpl.java
index dc927b2..1c94047 100644
--- a/server/src/main/java/doumeemes/service/system/impl/WxLoginServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/system/impl/WxLoginServiceImpl.java
@@ -19,18 +19,13 @@
 import doumeemes.dao.ext.CompanyExtMapper;
 import doumeemes.dao.ext.CompanyUserExtMapper;
 import doumeemes.dao.ext.DepartmentExtMapper;
-import doumeemes.dao.ext.dto.QueryCompanyUserExtDTO;
 import doumeemes.dao.ext.dto.WxLoginDTO;
 import doumeemes.dao.ext.dto.WxLoginOutDTO;
-import doumeemes.dao.ext.vo.CompanyUserExtListVO;
 import doumeemes.dao.ext.vo.WxLoginVO;
 import doumeemes.dao.system.SystemUserMapper;
 import doumeemes.dao.system.dto.LoginDTO;
 import doumeemes.dao.system.model.SystemLoginLog;
 import doumeemes.dao.system.model.SystemUser;
-import doumeemes.service.common.CaptchaService;
-import doumeemes.service.ext.CompanyExtService;
-import doumeemes.service.ext.CompanyUserExtService;
 import doumeemes.service.system.SystemLoginLogService;
 import doumeemes.service.system.WxLoginService;
 import lombok.extern.slf4j.Slf4j;
@@ -41,7 +36,6 @@
 import org.apache.shiro.subject.Subject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletRequest;

--
Gitblit v1.9.3