From 2c922395efc2e000e1382a79ab93e1bc47135140 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期日, 20 九月 2026 14:10:17 +0800
Subject: [PATCH] 修改支付账号和rememberme反序列漏洞

---
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginController.java              |    8 --
 DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginController.java          |    8 --
 DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginController.java            |    8 --
 DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java                             |   32 +---------
 DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java                               |   30 ---------
 DispatchQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/login.html                                                  |    7 --
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java |   11 +--
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java                                 |   55 +++++++++--------
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/ZhengLianConfig.java          |   16 ++--
 9 files changed, 51 insertions(+), 124 deletions(-)

diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java
index 12f66cd..1a40225 100644
--- a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java
@@ -5,12 +5,10 @@
 import com.stylefeng.guns.core.shiro.ShiroDbRealm;
 import org.apache.shiro.cache.CacheManager;
 import org.apache.shiro.cache.ehcache.EhCacheManager;
-import org.apache.shiro.codec.Base64;
 import org.apache.shiro.session.mgt.SessionManager;
 import org.apache.shiro.spring.LifecycleBeanPostProcessor;
 import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
 import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
-import org.apache.shiro.web.mgt.CookieRememberMeManager;
 import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
 import org.apache.shiro.web.servlet.Cookie;
 import org.apache.shiro.web.servlet.ShiroHttpSession;
@@ -39,13 +37,16 @@
 
     /**
      * 安全管理器
+     * <p>
+     * 已关闭 RememberMe 功能:DefaultSecurityManager 默认会创建 DefaultRememberMeManager,
+     * 此处必须显式置为 null 才能彻底关闭,避免仍写入 rememberMe cookie。
      */
     @Bean
-    public DefaultWebSecurityManager securityManager(CookieRememberMeManager rememberMeManager, CacheManager cacheShiroManager, SessionManager sessionManager) {
+    public DefaultWebSecurityManager securityManager(CacheManager cacheShiroManager, SessionManager sessionManager) {
         DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
         securityManager.setRealm(this.shiroDbRealm());
         securityManager.setCacheManager(cacheShiroManager);
-        securityManager.setRememberMeManager(rememberMeManager);
+        securityManager.setRememberMeManager(null);
         securityManager.setSessionManager(sessionManager);
         return securityManager;
     }
@@ -94,29 +95,6 @@
     @Bean
     public ShiroDbRealm shiroDbRealm() {
         return new ShiroDbRealm();
-    }
-
-    /**
-     * rememberMe管理器, cipherKey生成见{@code Base64Test.java}
-     */
-    @Bean
-    public CookieRememberMeManager rememberMeManager(SimpleCookie rememberMeCookie) {
-        CookieRememberMeManager manager = new CookieRememberMeManager();
-//        manager.setCipherKey(Base64.decode("Z3VucwAAAAAAAAAAAAAAAA=="));
-        manager.setCookie(rememberMeCookie);
-        return manager;
-    }
-
-    /**
-     * 记住密码Cookie
-     */
-    @Bean
-    public SimpleCookie rememberMeCookie() {
-//        SimpleCookie simpleCookie = new SimpleCookie("rememberMe");
-        SimpleCookie simpleCookie = new SimpleCookie("");
-        simpleCookie.setHttpOnly(true);
-        simpleCookie.setMaxAge(7 * 24 * 60 * 60);//7天
-        return simpleCookie;
     }
 
     /**
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginController.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginController.java
index f32483a..21f8c6a 100644
--- a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginController.java
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginController.java
@@ -88,7 +88,6 @@
 
         String username = super.getPara("username").trim();
         String password = super.getPara("password").trim();
-        String remember = super.getPara("remember");
 
         //验证验证码是否正确
         if (KaptchaUtil.getKaptchaOnOff()) {
@@ -102,12 +101,7 @@
         Subject currentUser = ShiroKit.getSubject();
         UsernamePasswordToken token = new UsernamePasswordToken(username, password.toCharArray());
 
-        if ("on".equals(remember)) {
-            token.setRememberMe(true);
-        } else {
-            token.setRememberMe(false);
-        }
-
+        // 已关闭 RememberMe,token默认rememberMe=false,不再设置"记住我"
         currentUser.login(token);
 
         ShiroUser shiroUser = ShiroKit.getUser();
diff --git a/DispatchQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/login.html b/DispatchQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/login.html
index abc8e55..b3c93bf 100644
--- a/DispatchQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/login.html
+++ b/DispatchQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/login.html
@@ -44,13 +44,6 @@
                 </div>
             </div>
             @}
-            <div class="form-group" style="float: left;">
-                <div class="checkbox" style="text-align: left">
-                    <label>
-                        <input type="checkbox" name="remember" style="margin-top: 2px;">记住我
-                    </label>
-                </div>
-            </div>
             <button type="submit" class="btn btn-primary block full-width m-b">登 录</button>
             </p>
         </form>
diff --git a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java
index 65f30b0..240abf7 100644
--- a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java
+++ b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java
@@ -5,12 +5,10 @@
 import com.stylefeng.guns.core.shiro.ShiroDbRealm;
 import org.apache.shiro.cache.CacheManager;
 import org.apache.shiro.cache.ehcache.EhCacheManager;
-import org.apache.shiro.codec.Base64;
 import org.apache.shiro.session.mgt.SessionManager;
 import org.apache.shiro.spring.LifecycleBeanPostProcessor;
 import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
 import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
-import org.apache.shiro.web.mgt.CookieRememberMeManager;
 import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
 import org.apache.shiro.web.servlet.Cookie;
 import org.apache.shiro.web.servlet.ShiroHttpSession;
@@ -41,11 +39,10 @@
      * 安全管理器
      */
     @Bean
-    public DefaultWebSecurityManager securityManager(CookieRememberMeManager rememberMeManager, CacheManager cacheShiroManager, SessionManager sessionManager) {
+    public DefaultWebSecurityManager securityManager(CacheManager cacheShiroManager, SessionManager sessionManager) {
         DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
         securityManager.setRealm(this.shiroDbRealm());
         securityManager.setCacheManager(cacheShiroManager);
-        securityManager.setRememberMeManager(rememberMeManager);
         securityManager.setSessionManager(sessionManager);
         return securityManager;
     }
@@ -94,29 +91,6 @@
     @Bean
     public ShiroDbRealm shiroDbRealm() {
         return new ShiroDbRealm();
-    }
-
-    /**
-     * rememberMe管理器, cipherKey生成见{@code Base64Test.java}
-     */
-    @Bean
-    public CookieRememberMeManager rememberMeManager(SimpleCookie rememberMeCookie) {
-        CookieRememberMeManager manager = new CookieRememberMeManager();
-//        manager.setCipherKey(Base64.decode("Z3VucwAAAAAAAAAAAAAAAA=="));
-        manager.setCookie(rememberMeCookie);
-        return manager;
-    }
-
-    /**
-     * 记住密码Cookie
-     */
-    @Bean
-    public SimpleCookie rememberMeCookie() {
-//        SimpleCookie simpleCookie = new SimpleCookie("rememberMe");
-        SimpleCookie simpleCookie = new SimpleCookie("");
-        simpleCookie.setHttpOnly(true);
-        simpleCookie.setMaxAge(7 * 24 * 60 * 60);//7天
-        return simpleCookie;
     }
 
     /**
@@ -175,7 +149,7 @@
         hashMap.put("/login", "anon");
         hashMap.put("/global/sessionError", "anon");
         hashMap.put("/kaptcha", "anon");
-        hashMap.put("/**", "user");
+        hashMap.put("/**", "authc");
         shiroFilter.setFilterChainDefinitionMap(hashMap);
         return shiroFilter;
     }
diff --git a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginController.java b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginController.java
index f32483a..dbc4278 100644
--- a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginController.java
+++ b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginController.java
@@ -88,7 +88,6 @@
 
         String username = super.getPara("username").trim();
         String password = super.getPara("password").trim();
-        String remember = super.getPara("remember");
 
         //验证验证码是否正确
         if (KaptchaUtil.getKaptchaOnOff()) {
@@ -102,11 +101,8 @@
         Subject currentUser = ShiroKit.getSubject();
         UsernamePasswordToken token = new UsernamePasswordToken(username, password.toCharArray());
 
-        if ("on".equals(remember)) {
-            token.setRememberMe(true);
-        } else {
-            token.setRememberMe(false);
-        }
+        // 已关闭 RememberMe 功能,不再写入记住我 Cookie
+        token.setRememberMe(false);
 
         currentUser.login(token);
 
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java
index da6fcff..c8ed1f4 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java
@@ -188,7 +188,6 @@
 		
 		String username = super.getPara("username").trim();
 		String password = super.getPara("password").trim();
-		String remember = super.getPara("remember");
 		
 		Integer f = loginFailures.get(username);
 		f = f == null ? 0 : f;
@@ -233,13 +232,9 @@
 		
 		Subject currentUser = ShiroKit.getSubject();
 		UsernamePasswordToken token = new UsernamePasswordToken(username, password.toCharArray());
-		
-		if ("on".equals(remember)) {
-			token.setRememberMe(true);
-		} else {
-			token.setRememberMe(false);
-		}
-		
+		// 已关闭 RememberMe:关闭浏览器后必须重新登录
+		token.setRememberMe(false);
+
 		currentUser.login(token);
 		
 		ShiroUser shiroUser = ShiroKit.getUser();
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java
index a94cf28..7f4481e 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java
@@ -5,12 +5,10 @@
 import com.stylefeng.guns.core.shiro.ShiroDbRealm;
 import org.apache.shiro.cache.CacheManager;
 import org.apache.shiro.cache.ehcache.EhCacheManager;
-import org.apache.shiro.codec.Base64;
 import org.apache.shiro.session.mgt.SessionManager;
 import org.apache.shiro.spring.LifecycleBeanPostProcessor;
 import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
 import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
-import org.apache.shiro.web.mgt.CookieRememberMeManager;
 import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
 import org.apache.shiro.web.servlet.Cookie;
 import org.apache.shiro.web.servlet.ShiroHttpSession;
@@ -41,11 +39,10 @@
      * 安全管理器
      */
     @Bean
-    public DefaultWebSecurityManager securityManager(CookieRememberMeManager rememberMeManager, CacheManager cacheShiroManager, SessionManager sessionManager) {
+    public DefaultWebSecurityManager securityManager(CacheManager cacheShiroManager, SessionManager sessionManager) {
         DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
         securityManager.setRealm(this.shiroDbRealm());
         securityManager.setCacheManager(cacheShiroManager);
-        securityManager.setRememberMeManager(rememberMeManager);
         securityManager.setSessionManager(sessionManager);
         return securityManager;
     }
@@ -97,27 +94,33 @@
     }
 
     /**
-     * rememberMe管理器, cipherKey生成见{@code Base64Test.java}
+     * rememberMe已关闭 - 2026-09-20
+     * 原 rememberMeManager 与 rememberMeCookie Bean 已移除,
+     * 登录入口不应再 setRememberMe(true)。
+     * 如需恢复,取消下方注释并恢复 securityManager.setRememberMeManager(...) 即可。
      */
-    @Bean
-    public CookieRememberMeManager rememberMeManager(SimpleCookie rememberMeCookie) {
-        CookieRememberMeManager manager = new CookieRememberMeManager();
-//        manager.setCipherKey(Base64.decode("Z3VucwAAAAAAAAAAAAAAAA=="));
-        manager.setCookie(rememberMeCookie);
-        return manager;
-    }
-
-    /**
-     * 记住密码Cookie
-     */
-    @Bean
-    public SimpleCookie rememberMeCookie() {
-//        SimpleCookie simpleCookie = new SimpleCookie("rememberMe");
-        SimpleCookie simpleCookie = new SimpleCookie("");
-        simpleCookie.setHttpOnly(true);
-        simpleCookie.setMaxAge(7 * 24 * 60 * 60);//7天
-        return simpleCookie;
-    }
+//    /**
+//     * rememberMe管理器, cipherKey生成见{@code Base64Test.java}
+//     */
+//    @Bean
+//    public CookieRememberMeManager rememberMeManager(SimpleCookie rememberMeCookie) {
+//        CookieRememberMeManager manager = new CookieRememberMeManager();
+////        manager.setCipherKey(Base64.decode("Z3VucwAAAAAAAAAAAAAAAA=="));
+//        manager.setCookie(rememberMeCookie);
+//        return manager;
+//    }
+//
+//    /**
+//     * 记住密码Cookie
+//     */
+//    @Bean
+//    public SimpleCookie rememberMeCookie() {
+////        SimpleCookie simpleCookie = new SimpleCookie("rememberMe");
+//        SimpleCookie simpleCookie = new SimpleCookie("");
+//        simpleCookie.setHttpOnly(true);
+//        simpleCookie.setMaxAge(7 * 24 * 60 * 60);//7天
+//        return simpleCookie;
+//    }
 
     /**
      * Shiro的过滤器链
@@ -153,7 +156,7 @@
          * authc 需要认证
          * user  验证通过或RememberMe登录的都可以
          *
-         * 当应用开启了rememberMe时,用户下次访问时可以是一个user,但不会是authc,因为authc是需要重新认证的
+         * 已关闭 RememberMe,/** 由 user 改为 authc,每次请求都需要重新登录态
          *
          * 顺序从上到下,优先级依次降低
          *
@@ -176,7 +179,7 @@
         hashMap.put("/global/sessionError", "anon");
         hashMap.put("/kaptcha", "anon");
         hashMap.put("/api/placeOrder/notifyUrl", "anon");
-        hashMap.put("/**", "user");
+        hashMap.put("/**", "authc");
 
 
         shiroFilter.setFilterChainDefinitionMap(hashMap);
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginController.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginController.java
index f32483a..81a27a3 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginController.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginController.java
@@ -88,7 +88,6 @@
 
         String username = super.getPara("username").trim();
         String password = super.getPara("password").trim();
-        String remember = super.getPara("remember");
 
         //验证验证码是否正确
         if (KaptchaUtil.getKaptchaOnOff()) {
@@ -101,12 +100,7 @@
 
         Subject currentUser = ShiroKit.getSubject();
         UsernamePasswordToken token = new UsernamePasswordToken(username, password.toCharArray());
-
-        if ("on".equals(remember)) {
-            token.setRememberMe(true);
-        } else {
-            token.setRememberMe(false);
-        }
+        // RememberMe 已关闭,不再下发 rememberMe Cookie
 
         currentUser.login(token);
 
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/ZhengLianConfig.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/ZhengLianConfig.java
index 2e3b85a..0714add 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/ZhengLianConfig.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/ZhengLianConfig.java
@@ -73,14 +73,14 @@
 			this.password = "111111";
 		}
 		if("prod".equals(activeProfile)){
-			this.url = "https://gateway.zqpay.com";
-			this.appid = "3e06da1751ec1626b30f7703a088f298";
-			this.merchNo = "B00000402";
-			this.encrpNo = "1342935640";
-			this.signNo = "1471742568";
-			this.cer = "/etraffic/server/1342935640.cer";
-			this.sm2 = "/etraffic/server/1342935640.sm2";
-			this.password = "31028Mky";
+            this.url = "https://gateway.zqpay.com";
+            this.appid = "3e06da1751ec1626b30f7703a088f298";
+            this.merchNo = "B00000402";
+            this.encrpNo = "1342935640";
+            this.signNo = "1565548800";
+            this.cer = "/etraffic/server/1342935640.cer";
+            this.sm2 = "/etraffic/server/1565548800.sm2";
+            this.password = "123456";
 		}
 		return this;
 	}

--
Gitblit v1.7.1