升级V3.2.5指南
从V3.2.4版本与V3.2.5版本相关步骤,相关数据库脚本更新如下:
1、数据库
更新文件:
src/main/resources/db/migration/upgrade/mysql/V3.2__upgrade.sql(这里只提供mysql的升级脚本、DB2/Oracle查找对应目录下的脚本更新)
-- 指定脚本运行的数据库
use ${database};
-- 2024-10-23 新增配置, 进行文件上传类型的黑白名单校验, 使用apache.tika工具包
-- waf-common包中资源文件 mime/mime-types-default.xml 为默认的类型文件
-- 额外的类型,请参考补默认文件补充到项目资源包下, mime/mime-types-custom.xml
-- 添加系统参数配置数据, 文件上传黑白名单校验
INSERT INTO sys_config (id, name, parent_id, config_key, config_value, is_encrypt, is_system, sort_num, remark, create_time) VALUES('1848902025060810754', '上传文件后缀名黑名单', '910ee5d1ad3041c78bec5608355da7bb', 'fileSuffix.blacklist', 'exe,bat,cmd,sh,com,vbs,msi,js,reg,inf,sys,bin', 0, 1, 102, '文件后缀名, 逗号分隔, 优先于白名单', now());
INSERT INTO sys_config (id, name, parent_id, config_key, config_value, is_encrypt, is_system, sort_num, remark, create_time) VALUES('1848905044896776194', '上传文件后缀名白名单', '910ee5d1ad3041c78bec5608355da7bb', 'fileSuffix.whitelist', ' ', 0, 1, 101, '文件后缀名, 逗号分隔, 允许不在黑名单中的文档上传, 空表示允许不在黑名单中的所有', now());
INSERT INTO sys_config (id, name, parent_id, config_key, config_value, is_encrypt, is_system, sort_num, remark, create_time) VALUES('1848979611707367426', '上传文件mimeType检测', '910ee5d1ad3041c78bec5608355da7bb', 'fileSuffix.mimeTypeCheck.enabled', '0', 0, 1, 103, '1-启用;0-停用(内容特征检测,应对修改文档后缀名逃避黑白名单校验.有可能误伤. 比如:.sh改为.txt', now());
2、后端升级
2.1、waf-parent依赖升级
后端只要将pom.xml中引用waf-parent版本改为3.2.5即可,启动后测试功能是否正常
- 依赖更新
<parent>
<groupId>com.wiseda.waf</groupId>
<artifactId>waf-parent</artifactId>
<version>3.2.5</version>
</parent>
- ymal配置更新
下列需要在启用csrf过滤器,配置了具体的授信域名或IP
waf:
server:
# csrf 授信域名或IP,多个以逗号分隔
csrf-domains: ${WAF_CSRF_DOMAINS:}
# csrf不受限方法,多个以逗号分隔(配置了csrf-domains属性才有效)
csrf-unrestricted-methods: ${WAF_CSRF_UNRESTRICTED_METHODS:GET,HEAD,TRACE,OPTIONS}
- 修改sql拼接中where 1=1 的脚本
// 方式一:xxxMapper 中添加<where>标签即可,移除1=1这些脚本
@Select({
"<script>",
"SELECT role_id, group_id from sys_group_role ",
"<where> <if test=\"param.groupId!=null\">group_id = #{param.groupId,jdbcType=VARCHAR}</if>",
"<if test=\"param.roleId!=null\">role_id = #{param.roleId,jdbcType=VARCHAR}</if>",
"</where></script>"
})
@Results({
@Result(column="group_id", property="groupId", jdbcType=JdbcType.VARCHAR),
@Result(column="role_id", property="roleId", jdbcType=JdbcType.VARCHAR)
})
List<SysGroupRole> selectGroupRoleRelation(@Param("param") Map param);
// 方式二:xxxProvider 条件中添加一个StringBuilder,再进行替换
StringBuilder condSql = new StringBuilder();
if (StringUtil.isNotEmpty(params.getUserName())) {
condSql.append("and operator like concat('%',#{params.userName},'%')");
}
// 拼接条件,替换掉原sql中的1=1 ,在1.2.21之后的版本druid中会报sql injection violation的错误
if (condSql.length() > 0) {
sql.append("where").append(condSql.toString().replaceFirst("and", ""));
}
3、前端升级
具体的更新可以去对照waf-web中v3.x分支进行合并更新
3.1、是否开启组织机构显示
文件目录:src/views/admin/SysGroup.vue、src/views/admin/SysRole.vue ,开启showOrgInfo
// waf-web 3.x分支 下面属性设置为:true,开启组织机构显示
showOrgInfo: false // 是否展示组织机构信息
3.2、数据源管理
需要配合waf-calcite组件一起使用
