谢谢回复我的解决方案,但是我的jeesite版本是4.0.5的,yml文件里并没有shiro.rememberMe.secretKey这个配置,请问该如何解决呢?而且我的目的不是为了记住密码设置秘钥,而是目前是安全测试中,他每次可以读取到我系统里的秘钥,不知道代码里哪里设置了秘钥,我也没做过任何设置,下面是安全测试发给我的报告单
发现 key 的值为
r0e3c16IdVkouZgk1TKVMg==
发现 mode 的值为
cbc
发现 origin_count 的值为
1
发现 cookie_name 的值为
rememberMe
发现 current_count 的值为
0
解决方案也告知我了,如下
升级 shiro 到 1.2.5 及以上版本。
如果在配置里配置了密钥,那么请一定不要使用网上的密钥,通过自己 base64 一个 AES 的密钥,或者利用官方提供的方法生成密钥:
org.apache.shiro.crypto.AbstractSymmetricCipherService#generateNewKey()
上面是测试报告给的解决方案,下面是您给我的解决方案
谢谢回复我的解决方案,回复解决方案如下
/**
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
*/
package com.jeesite.test;
import org.apache.shiro.crypto.AesCipherService;
/**
* v4.1.8 开始将不为记住我功能,设置默认密钥,即启动系统时生成新密钥。
* 这样会造成一个问题,比如:重启服务后,记住登录的用户因为解密失败,而需要重新登录。
* 为了解决这个问题,您可以通过这个类获取一个新密钥,设置到 shiro.rememberMe.secretKey 中即可。
* 另外,如果你从配置文件里将 shiro.rememberMe.secretKey 设置为空,启动系统时也会自动设置一个新的密钥。
* @author ThinkGem
* @version 2019年11月6日
*/
public class RememberMeKeyGen {
public static void main(String[] args) {
byte[] cipherKey = new AesCipherService().generateNewKey().getEncoded();
String secretKey = org.apache.shiro.codec.Base64.encodeToString(cipherKey);
System.out.println("shiro.rememberMe.secretKey = " + secretKey);
}
}
但是我的jeesite版本是4.0.5的,yml文件里并没有shiro.rememberMe.secretKey这个配置,请问该如何解决呢?
我的secretKey只在单点登录相关有这个设置,如下:
sso:
#
# # 如果启用/sso/{username}/{token}单点登录,请修改此安全key并与单点登录系统key一致。
# secretKey: ~
#
# # 是否加密单点登录安全Key
# encryptKey: true
#
# # 登录提交信息加密
loginSubmit:
#
# # 登录提交信息安全Key,加密用户名、密码、验证码,后再提交(key设置为3个,用逗号分隔)
# secretKey: thinkgem,jeesite,com
#
# # 允许的请求方法设定,解决安全审计问题
# allowRequestMethods: GET,POST
#
# # 是否允许账号多地登录,如果设置为false,同一个设备类型的其它地点登录的相同账号被踢下线
isAllowMultiAddrLogin: false
是否可以直接在shiro配置文件里新增rememberMe.secretKey配置呢?目前只有如下几个配置
# Shiro 相关配置
shiro:
#
# #索引页路径
defaultPath: ${frontPath}/web/index
#
# # 登录相关设置
# loginUrl: ${adminPath}/login
# logoutUrl: ${shiro.loginUrl}
# successUrl: ${adminPath}/index
#
## # Jasig CAS 相关配置
## casServerUrl: http://127.0.0.1:8981/cas
## casClientUrl: http://127.0.0.1:8980/js
## loginUrl: ${shiro.casServerUrl}?service=${shiro.casClientUrl}${adminPath}/login-cas
## logoutUrl: ${shiro.casServerUrl}/logout?service=${shiro.loginUrl}
## successUrl: ${shiro.casClientUrl}${adminPath}/index
#
# # 简单 SSO 登录相关配置
shiro.rememberMe.secretKey 这参数适应于 v4 所有版本,yml没有的话,加进去就行;你也可以关闭这个功能,在 ShiroConfig 里找到 securityManager,加一行代码 bean.setRememberMeManager(null);
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
登录 后才可以发表评论