赞
踩
在若依低版本中shiro可能会有反序列化的问题,因为是固定密钥的方式导致的。
解决方式如下:
1、升级shiro至最新版本
2、保持shiro版本不变<=1.2.4,修改rememberMe默认密钥,改为动态密钥获取
3、禁用rememberMe功能
详细说一下第二种方式的具体更改内容:
找到核心代码
路径:src/main/java/com/ruoyi/framework/config/ShiroConfig.java
可以发现里面用的是固定密钥
修改为:
代码:
public CookieRememberMeManager rememberMeManager() { CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager(); cookieRememberMeManager.setCookie(rememberMeCookie()); if (StringUtils.isNotEmpty(cipherKey)) { cookieRememberMeManager.setCipherKey(Base64.decode(cipherKey)); } else { cookieRememberMeManager.setCipherKey(CipherUtils.generateNewKey(128, "AES").getEncoded()); } return cookieRememberMeManager; }
注意:
1、cipherKey引用,加在开头。
/** * 设置cipherKey密钥 */ @Value("${shiro.cookie.cipherKey}") private String cipherKey;
2、CipherUtils方法代码,放在了src/main/java/com/ruoyi/common/utils/security/CipherUtils.java路径
代码:
package com.ruoyi.common.utils.security; import javax.crypto.KeyGenerator; import java.security.Key; import java.security.NoSuchAlgorithmException; /** * 对称密钥密码算法工具类 * * @author ruoyi */ public class CipherUtils { /** * 生成随机秘钥 * * @param keyBitSize 字节大小 * @param algorithmName 算法名称 * @return 创建密匙 */ public static Key generateNewKey(int keyBitSize, String algorithmName) { KeyGenerator kg; try { kg = KeyGenerator.getInstance(algorithmName); } catch (NoSuchAlgorithmException e) { String msg = "Unable to acquire " + algorithmName + " algorithm. This is required to function."; throw new IllegalStateException(msg, e); } kg.init(keyBitSize); return kg.generateKey(); } }
eg:启动报错查看application.yml文件是否有
结语:这样就可以很便捷的解决shiro反序列化的问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。