diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/rememberMe/CustomCookieRememberMeManager.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/rememberMe/CustomCookieRememberMeManager.java index 8123092752499ffc8835de97fd25b7084417389c..412b751e4eaad1f492e842ebcee4b3851ff1437d 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/rememberMe/CustomCookieRememberMeManager.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/rememberMe/CustomCookieRememberMeManager.java @@ -16,12 +16,75 @@ import com.ruoyi.framework.shiro.service.SysLoginService; /** * 自定义CookieRememberMeManager * + *
该类继承自 Shiro 的 {@link CookieRememberMeManager},用于解决"记住我"功能中 + * HTTP 请求头过大的问题。
+ * + *在原始实现中,"记住我"功能会将用户的所有角色权限信息(permissions)序列化为 + * Base64 编码后存储在 Cookie 中。当用户拥有大量权限时,Cookie 的大小会变得非常大, + * 可能导致 HTTP 请求头超出服务器限制(如 Tomcat 默认的 8192 字节)。
+ * + *本类采用以下策略解决此问题:
+ *适用于以下情况:
+ *
+ * 在 {@link com.ruoyi.framework.config.ShiroConfig} 中配置:
+ *
+ * @Bean
+ * public CustomCookieRememberMeManager rememberMeManager()
+ * {
+ * CustomCookieRememberMeManager cookieRememberMeManager = new CustomCookieRememberMeManager();
+ * cookieRememberMeManager.setCookie(rememberMeCookie());
+ * // 设置加密密钥等配置...
+ * return cookieRememberMeManager;
+ * }
+ *
+ *
* @author ruoyi
+ * @see org.apache.shiro.web.mgt.CookieRememberMeManager
+ * @see com.ruoyi.framework.shiro.service.SysLoginService#setRolePermission(SysUser)
*/
public class CustomCookieRememberMeManager extends CookieRememberMeManager
{
/**
- * 记住我时去掉角色的permissions权限字符串,防止http请求头过大。
+ *去掉角色的permissions权限字符串 记住我时,防止http请求头过大。
+ *
+ * 该方法在用户登录并选择"记住我"时调用。
+ * + *该方法在用户通过"记住我"功能自动登录时调用。
+ * + *如果 {@link SysLoginService} 获取失败或返回异常,用户仍可登录, + * 但部分权限验证功能可能受影响。
+ * + * @param subjectContext 主题上下文,包含 Cookie 解析的身份信息 + * @return 完整的主身份信息集合,包含重新加载的权限 + * @see org.apache.shiro.subject.PrincipalCollection + * @see com.ruoyi.framework.shiro.service.SysLoginService */ @Override public PrincipalCollection getRememberedPrincipals(SubjectContext subjectContext)