From bb4d75aff0027459e3ab99500a4539a3735a9022 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Tue, 14 Dec 2021 10:33:25 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E5=8D=87=E7=BA=A7log4j2=E5=88=B0?= =?UTF-8?q?=E5=AE=89=E5=85=A8=E7=89=88=E6=9C=AC=EF=BC=8C=E9=98=B2=E6=AD=A2?= =?UTF-8?q?=E6=BC=8F=E6=B4=9E=E9=A3=8E=E9=99=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pom.xml b/pom.xml index b24166e70..c4586da67 100644 --- a/pom.xml +++ b/pom.xml @@ -33,6 +33,7 @@ 4.1.2 2.3 0.9.1 + 2.15.0 @@ -150,6 +151,19 @@ ${fastjson.version} + + + org.apache.logging.log4j + log4j-api + ${log4j2.version} + + + + org.apache.logging.log4j + log4j-to-slf4j + ${log4j2.version} + + io.jsonwebtoken From e1c7115d8c08d188f2c6a49fd07ebb8d3de11ed0 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Tue, 14 Dec 2021 12:09:57 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E5=8D=87=E7=BA=A7log4j2=E5=88=B0?= =?UTF-8?q?=E5=AE=89=E5=85=A8=E7=89=88=E6=9C=AC=EF=BC=8C=E9=98=B2=E6=AD=A2?= =?UTF-8?q?=E6=BC=8F=E6=B4=9E=E9=A3=8E=E9=99=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c4586da67..df250e8fd 100644 --- a/pom.xml +++ b/pom.xml @@ -33,7 +33,7 @@ 4.1.2 2.3 0.9.1 - 2.15.0 + 2.16.0 From 5e38e054a7ac93e2d4707b9f7a72ba867e4481cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Wed, 15 Dec 2021 10:44:50 +0800 Subject: [PATCH 03/10] =?UTF-8?q?update=20hutool=20=E5=B7=A5=E5=85=B7=20?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E5=8D=95=E5=8C=85=E5=BC=95=E5=85=A5=20?= =?UTF-8?q?=E5=87=8F=E5=B0=91=E6=97=A0=E7=94=A8=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 26 +++++++++++++++++++++++++- ruoyi-common/pom.xml | 23 ++++++++++++++++++++++- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index cd1643e3f..338a12505 100644 --- a/pom.xml +++ b/pom.xml @@ -161,7 +161,31 @@ cn.hutool - hutool-all + hutool-core + ${hutool.version} + + + + cn.hutool + hutool-http + ${hutool.version} + + + + cn.hutool + hutool-captcha + ${hutool.version} + + + + cn.hutool + hutool-extra + ${hutool.version} + + + + cn.hutool + hutool-jwt ${hutool.version} diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index 08d173150..52be0a28b 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -104,8 +104,29 @@ cn.hutool - hutool-all + hutool-core + + + cn.hutool + hutool-http + + + + cn.hutool + hutool-captcha + + + + cn.hutool + hutool-jwt + + + + cn.hutool + hutool-extra + + org.projectlombok lombok From d365a52cd6feaf4d118fafaa55104bf299d78bcb Mon Sep 17 00:00:00 2001 From: RuoYi Date: Wed, 15 Dec 2021 10:50:10 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89xss=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E6=B3=A8=E8=A7=A3=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/domain/entity/SysUser.java | 7 +++-- .../common/utils/bean/BeanValidators.java | 24 +++++++++++++++ .../main/java/com/ruoyi/common/xss/Xss.java | 27 +++++++++++++++++ .../com/ruoyi/common/xss/XssValidator.java | 29 +++++++++++++++++++ .../com/ruoyi/system/domain/SysNotice.java | 2 ++ .../service/impl/SysUserServiceImpl.java | 7 +++++ 6 files changed, 93 insertions(+), 3 deletions(-) create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/bean/BeanValidators.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/xss/Xss.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/xss/XssValidator.java diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java index 08cf15142..4aa1d2b2d 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java @@ -2,9 +2,7 @@ package com.ruoyi.common.core.domain.entity; import java.util.Date; import java.util.List; -import javax.validation.constraints.Email; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.Size; +import javax.validation.constraints.*; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -14,6 +12,7 @@ import com.ruoyi.common.annotation.Excel.ColumnType; import com.ruoyi.common.annotation.Excel.Type; import com.ruoyi.common.annotation.Excels; import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.xss.Xss; /** * 用户对象 sys_user @@ -135,6 +134,7 @@ public class SysUser extends BaseEntity this.deptId = deptId; } + @Xss(message = "用户昵称不能包含脚本字符") @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符") public String getNickName() { @@ -146,6 +146,7 @@ public class SysUser extends BaseEntity this.nickName = nickName; } + @Xss(message = "用户账号不能包含脚本字符") @NotBlank(message = "用户账号不能为空") @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符") public String getUserName() diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/bean/BeanValidators.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/bean/BeanValidators.java new file mode 100644 index 000000000..d9821e0ec --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/bean/BeanValidators.java @@ -0,0 +1,24 @@ +package com.ruoyi.common.utils.bean; + +import java.util.Set; +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; +import javax.validation.Validator; + +/** + * bean对象属性验证 + * + * @author ruoyi + */ +public class BeanValidators +{ + public static void validateWithException(Validator validator, Object object, Class... groups) + throws ConstraintViolationException + { + Set> constraintViolations = validator.validate(object, groups); + if (!constraintViolations.isEmpty()) + { + throw new ConstraintViolationException(constraintViolations); + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/xss/Xss.java b/ruoyi-common/src/main/java/com/ruoyi/common/xss/Xss.java new file mode 100644 index 000000000..14e43dc55 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/xss/Xss.java @@ -0,0 +1,27 @@ +package com.ruoyi.common.xss; + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 自定义xss校验注解 + * + * @author ruoyi + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(value = { ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR, ElementType.PARAMETER }) +@Constraint(validatedBy = { XssValidator.class }) +public @interface Xss +{ + String message() + + default "不允许任何脚本运行"; + + Class[] groups() default {}; + + Class[] payload() default {}; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/xss/XssValidator.java b/ruoyi-common/src/main/java/com/ruoyi/common/xss/XssValidator.java new file mode 100644 index 000000000..43163721d --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/xss/XssValidator.java @@ -0,0 +1,29 @@ +package com.ruoyi.common.xss; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 自定义xss校验注解实现 + * + * @author ruoyi + */ +public class XssValidator implements ConstraintValidator +{ + private final String HTML_PATTERN = "<(\\S*?)[^>]*>.*?|<.*? />"; + + @Override + public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) + { + return !containsHtml(value); + } + + public boolean containsHtml(String value) + { + Pattern pattern = Pattern.compile(HTML_PATTERN); + Matcher matcher = pattern.matcher(value); + return matcher.matches(); + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java index cb739dc41..b5c6187ba 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java @@ -5,6 +5,7 @@ import javax.validation.constraints.Size; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.xss.Xss; /** * 通知公告表 sys_notice @@ -45,6 +46,7 @@ public class SysNotice extends BaseEntity this.noticeTitle = noticeTitle; } + @Xss(message = "公告标题不能包含脚本字符") @NotBlank(message = "公告标题不能为空") @Size(min = 0, max = 50, message = "公告标题不能超过50个字符") public String getNoticeTitle() diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index e40c8c85d..8d33286fa 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -3,6 +3,7 @@ package com.ruoyi.system.service.impl; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; +import javax.validation.Validator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -16,6 +17,7 @@ import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.bean.BeanValidators; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.system.domain.SysPost; import com.ruoyi.system.domain.SysUserPost; @@ -56,6 +58,9 @@ public class SysUserServiceImpl implements ISysUserService @Autowired private ISysConfigService configService; + @Autowired + protected Validator validator; + /** * 根据条件分页查询用户列表 * @@ -513,6 +518,7 @@ public class SysUserServiceImpl implements ISysUserService SysUser u = userMapper.selectUserByUserName(user.getUserName()); if (StringUtils.isNull(u)) { + BeanValidators.validateWithException(validator, user); user.setPassword(SecurityUtils.encryptPassword(password)); user.setCreateBy(operName); this.insertUser(user); @@ -521,6 +527,7 @@ public class SysUserServiceImpl implements ISysUserService } else if (isUpdateSupport) { + BeanValidators.validateWithException(validator, user); user.setUpdateBy(operName); this.updateUser(user); successNum++; From bd89cc0287914628046e57134c0bafb9287d2660 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Wed, 15 Dec 2021 12:17:04 +0800 Subject: [PATCH 05/10] =?UTF-8?q?update=20ServicePlusImpl=20=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=20=E4=B8=8B=E6=B2=89=E5=88=B0=20BaseMapperPlus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/mybatisplus/core/BaseMapperPlus.java | 66 +++++++++++++++++++ .../mybatisplus/core/ServicePlusImpl.java | 48 +++++--------- 2 files changed, 82 insertions(+), 32 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/BaseMapperPlus.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/BaseMapperPlus.java index ee20abd81..24f9d91eb 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/BaseMapperPlus.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/BaseMapperPlus.java @@ -1,9 +1,16 @@ package com.ruoyi.common.core.mybatisplus.core; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.utils.BeanCopyUtils; import org.apache.ibatis.annotations.Param; +import java.io.Serializable; import java.util.Collection; +import java.util.List; +import java.util.Map; /** * 自定义 Mapper 接口, 实现 自定义扩展 @@ -18,4 +25,63 @@ public interface BaseMapperPlus extends BaseMapper { */ int insertAll(@Param("list") Collection batchList); + /** + * 根据 ID 查询 + */ + default V selectVoById(Serializable id, Class voClass){ + T obj = this.selectById(id); + return BeanCopyUtils.copy(obj, voClass); + } + + /** + * 查询(根据ID 批量查询) + */ + default List selectVoBatchIds(Collection idList, Class voClass){ + List list = this.selectBatchIds(idList); + if (list == null) { + return null; + } + return BeanCopyUtils.copyList(list, voClass); + } + + /** + * 查询(根据 columnMap 条件) + */ + default List selectVoByMap(Map map, Class voClass){ + List list = this.selectByMap(map); + if (list == null) { + return null; + } + return BeanCopyUtils.copyList(list, voClass); + } + + /** + * 根据 entity 条件,查询一条记录 + */ + default V selectVoOne(Wrapper wrapper, Class voClass) { + T obj = this.selectOne(wrapper); + return BeanCopyUtils.copy(obj, voClass); + } + + /** + * 根据 entity 条件,查询全部记录 + */ + default List selectVoList(Wrapper wrapper, Class voClass) { + List list = this.selectList(wrapper); + if (list == null) { + return null; + } + return BeanCopyUtils.copyList(list, voClass); + } + + /** + * 分页查询VO + */ + default IPage selectVoPage(IPage page, Wrapper wrapper, Class voClass) { + IPage pageData = this.selectPage(page, wrapper); + IPage voPage = new Page<>(pageData.getCurrent(), pageData.getSize(), pageData.getTotal()); + voPage.setRecords(BeanCopyUtils.copyList(pageData.getRecords(), voClass)); + return voPage; + } + } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java index 4de5b326d..277302493 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java @@ -3,6 +3,7 @@ package com.ruoyi.common.core.mybatisplus.core; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; import com.baomidou.mybatisplus.core.toolkit.Assert; @@ -160,74 +161,47 @@ public class ServicePlusImpl, T, V> extends ServiceI /** * 根据 ID 查询 - * - * @param id 主键ID */ @Override public V getVoById(Serializable id) { - T t = getBaseMapper().selectById(id); - return BeanCopyUtils.copy(t, voClass); + return getBaseMapper().selectVoById(id, voClass); } /** * 查询(根据ID 批量查询) - * - * @param idList 主键ID列表 */ @Override public List listVoByIds(Collection idList) { - List list = getBaseMapper().selectBatchIds(idList); - if (list == null) { - return null; - } - return BeanCopyUtils.copyList(list, voClass); + return getBaseMapper().selectVoBatchIds(idList, voClass); } /** * 查询(根据 columnMap 条件) - * - * @param columnMap 表字段 map 对象 */ @Override public List listVoByMap(Map columnMap) { - List list = getBaseMapper().selectByMap(columnMap); - if (list == null) { - return null; - } - return BeanCopyUtils.copyList(list, voClass); + return getBaseMapper().selectVoByMap(columnMap, voClass); } /** * 根据 Wrapper,查询一条记录
*

结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")

- * - * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} */ @Override public V getVoOne(Wrapper queryWrapper) { - T t = getOne(queryWrapper, true); - return BeanCopyUtils.copy(t, voClass); + return getBaseMapper().selectVoOne(queryWrapper, voClass); } /** * 查询列表 - * - * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} */ @Override public List listVo(Wrapper queryWrapper) { - List list = getBaseMapper().selectList(queryWrapper); - if (list == null) { - return null; - } - return BeanCopyUtils.copyList(list, voClass); + return getBaseMapper().selectVoList(queryWrapper, voClass); } /** * 翻页查询 - * - * @param page 翻页对象 - * @param queryWrapper 实体对象封装操作类 */ @Override public PagePlus pageVo(PagePlus page, Wrapper queryWrapper) { @@ -237,4 +211,14 @@ public class ServicePlusImpl, T, V> extends ServiceI return result; } + /** + * 翻页查询 + * + * @param page 翻页对象 + * @param queryWrapper 实体对象封装操作类 + */ + public IPage pageVo(IPage page, Wrapper queryWrapper) { + return getBaseMapper().selectVoPage(page, queryWrapper, voClass); + } + } From 3ab3d49055ca1db5ac952a74111ecaade6c7e56d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Wed, 15 Dec 2021 13:23:16 +0800 Subject: [PATCH 06/10] =?UTF-8?q?update=20=E6=B8=85=E9=99=A4=E8=AD=A6?= =?UTF-8?q?=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-extend/ruoyi-xxl-job-admin/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml b/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml index 29786ee06..835d7de9c 100644 --- a/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml +++ b/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml @@ -102,6 +102,7 @@ org.apache.maven.plugins maven-resources-plugin + 2.6 ttf From 3f97d19381449b09898a9462e9289904696736c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Wed, 15 Dec 2021 13:29:54 +0800 Subject: [PATCH 07/10] =?UTF-8?q?update=20[=E9=87=8D=E7=A3=85=E6=9B=B4?= =?UTF-8?q?=E6=96=B0]=20=E9=87=8D=E6=9E=84=E5=88=86=E9=A1=B5=20=E7=AE=80?= =?UTF-8?q?=E5=8C=96=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/common/core/domain/PageQuery.java | 48 ++++++++++++++ .../core/mybatisplus/core/BaseMapperPlus.java | 4 +- .../mybatisplus/core/ServicePlusImpl.java | 4 +- .../com/ruoyi/common/core/page/PagePlus.java | 2 + .../ruoyi/common/core/page/TableDataInfo.java | 27 ++++++++ .../com/ruoyi/common/utils/PageUtils.java | 63 +++++++++---------- .../service/impl/TestDemoServiceImpl.java | 10 ++- .../service/GenTableServiceImpl.java | 9 ++- .../resources/vm/java/serviceImpl.java.vm | 6 +- .../service/impl/SysConfigServiceImpl.java | 5 +- .../service/impl/SysDictDataServiceImpl.java | 5 +- .../service/impl/SysDictTypeServiceImpl.java | 5 +- .../impl/SysLogininforServiceImpl.java | 5 +- .../service/impl/SysNoticeServiceImpl.java | 5 +- .../service/impl/SysOperLogServiceImpl.java | 5 +- .../service/impl/SysOssConfigServiceImpl.java | 7 +-- .../service/impl/SysOssServiceImpl.java | 7 +-- .../service/impl/SysPostServiceImpl.java | 5 +- .../service/impl/SysRoleServiceImpl.java | 5 +- .../service/impl/SysUserServiceImpl.java | 13 ++-- 20 files changed, 148 insertions(+), 92 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/PageQuery.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/PageQuery.java index 4559ac998..d82779ad1 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/PageQuery.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/PageQuery.java @@ -1,5 +1,10 @@ package com.ruoyi.common.core.domain; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.metadata.OrderItem; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.sql.SqlUtil; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; @@ -42,4 +47,47 @@ public class PageQuery implements Serializable { @ApiModelProperty(value = "排序的方向", example = "asc,desc") private String isAsc; + /** + * 当前记录起始索引 默认值 + */ + public static final int DEFAULT_PAGE_NUM = 1; + + /** + * 每页显示记录数 默认值 默认查全部 + */ + public static final int DEFAULT_PAGE_SIZE = Integer.MAX_VALUE; + + public Page build() { + Integer pageNum = ObjectUtil.defaultIfNull(getPageNum(), DEFAULT_PAGE_NUM); + Integer pageSize = ObjectUtil.defaultIfNull(getPageSize(), DEFAULT_PAGE_SIZE); + if (pageNum <= 0) { + pageNum = DEFAULT_PAGE_NUM; + } + Page page = new Page<>(pageNum, pageSize); + OrderItem orderItem = buildOrderItem(); + if (ObjectUtil.isNotNull(orderItem)) { + page.addOrder(orderItem); + } + return page; + } + + private OrderItem buildOrderItem() { + // 兼容前端排序类型 + if ("ascending".equals(isAsc)) { + isAsc = "asc"; + } else if ("descending".equals(isAsc)) { + isAsc = "desc"; + } + if (StringUtils.isNotBlank(orderByColumn)) { + String orderBy = SqlUtil.escapeOrderBySql(orderByColumn); + orderBy = StringUtils.toUnderScoreCase(orderBy); + if ("asc".equals(isAsc)) { + return OrderItem.asc(orderBy); + } else if ("desc".equals(isAsc)) { + return OrderItem.desc(orderBy); + } + } + return null; + } + } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/BaseMapperPlus.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/BaseMapperPlus.java index 24f9d91eb..9d51d243f 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/BaseMapperPlus.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/BaseMapperPlus.java @@ -77,11 +77,11 @@ public interface BaseMapperPlus extends BaseMapper { /** * 分页查询VO */ - default IPage selectVoPage(IPage page, Wrapper wrapper, Class voClass) { + default > P selectVoPage(IPage page, Wrapper wrapper, Class voClass) { IPage pageData = this.selectPage(page, wrapper); IPage voPage = new Page<>(pageData.getCurrent(), pageData.getSize(), pageData.getTotal()); voPage.setRecords(BeanCopyUtils.copyList(pageData.getRecords(), voClass)); - return voPage; + return (P) voPage; } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java index 277302493..0650cfa97 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java @@ -202,8 +202,10 @@ public class ServicePlusImpl, T, V> extends ServiceI /** * 翻页查询 + * @deprecated 3.6.0 移除 请使用 {@link #pageVo(IPage, Wrapper)} */ @Override + @Deprecated public PagePlus pageVo(PagePlus page, Wrapper queryWrapper) { PagePlus result = getBaseMapper().selectPage(page, queryWrapper); List volist = BeanCopyUtils.copyList(result.getRecords(), voClass); @@ -217,7 +219,7 @@ public class ServicePlusImpl, T, V> extends ServiceI * @param page 翻页对象 * @param queryWrapper 实体对象封装操作类 */ - public IPage pageVo(IPage page, Wrapper queryWrapper) { + public

> P pageVo(IPage page, Wrapper queryWrapper) { return getBaseMapper().selectVoPage(page, queryWrapper, voClass); } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/PagePlus.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/PagePlus.java index 79d889cf0..bff381c40 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/PagePlus.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/PagePlus.java @@ -16,9 +16,11 @@ import java.util.List; * @param 数据库实体 * @param vo实体 * @author Lion Li + * @deprecated 3.6.0 删除 请使用 {@link com.ruoyi.common.core.domain.PageQuery#build()} */ @Data @Accessors(chain = true) +@Deprecated public class PagePlus implements IPage { /** diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java index 81c596b4f..46b01b94d 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java @@ -1,5 +1,7 @@ package com.ruoyi.common.core.page; +import cn.hutool.http.HttpStatus; +import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -57,4 +59,29 @@ public class TableDataInfo implements Serializable { this.total = total; } + public static TableDataInfo build(IPage page) { + TableDataInfo rspData = new TableDataInfo<>(); + rspData.setCode(HttpStatus.HTTP_OK); + rspData.setMsg("查询成功"); + rspData.setRows(page.getRecords()); + rspData.setTotal(page.getTotal()); + return rspData; + } + + public static TableDataInfo build(List list) { + TableDataInfo rspData = new TableDataInfo<>(); + rspData.setCode(HttpStatus.HTTP_OK); + rspData.setMsg("查询成功"); + rspData.setRows(list); + rspData.setTotal(list.size()); + return rspData; + } + + public static TableDataInfo build() { + TableDataInfo rspData = new TableDataInfo<>(); + rspData.setCode(HttpStatus.HTTP_OK); + rspData.setMsg("查询成功"); + return rspData; + } + } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java index 16a5a24f7..5042de401 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java @@ -2,6 +2,7 @@ package com.ruoyi.common.utils; import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpStatus; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.PageQuery; @@ -17,7 +18,9 @@ import java.util.List; * 分页工具 * * @author Lion Li + * @deprecated 3.6.0 删除 请使用 {@link PageQuery} 与 {@link TableDataInfo} */ +@Deprecated @NoArgsConstructor(access = AccessLevel.PRIVATE) public class PageUtils { @@ -48,11 +51,13 @@ public class PageUtils { /** * 当前记录起始索引 默认值 */ + @Deprecated public static final int DEFAULT_PAGE_NUM = 1; /** * 每页显示记录数 默认值 默认查全部 */ + @Deprecated public static final int DEFAULT_PAGE_SIZE = Integer.MAX_VALUE; /** @@ -61,7 +66,7 @@ public class PageUtils { * @param domain 实体 * @param vo 实体 * @return 分页对象 - * @deprecated 3.6.0 删除 请使用 {@link PageUtils#buildPagePlus(PageQuery)} + * @deprecated 3.6.0 删除 请使用 {@link PageQuery#build()} * 由于使用 Servlet 获取只能从 param 获取 灵活性降低 故将传参操作交给用户 */ @Deprecated @@ -81,22 +86,6 @@ public class PageUtils { return page; } - public static PagePlus buildPagePlus(PageQuery pageQuery) { - Integer pageNum = ObjectUtil.defaultIfNull(pageQuery.getPageNum(), DEFAULT_PAGE_NUM); - Integer pageSize = ObjectUtil.defaultIfNull(pageQuery.getPageSize(), DEFAULT_PAGE_SIZE); - String orderByColumn = pageQuery.getOrderByColumn(); - String isAsc = pageQuery.getIsAsc(); - if (pageNum <= 0) { - pageNum = DEFAULT_PAGE_NUM; - } - PagePlus page = new PagePlus<>(pageNum, pageSize); - OrderItem orderItem = buildOrderItem(orderByColumn, isAsc); - if (ObjectUtil.isNotNull(orderItem)) { - page.addOrder(orderItem); - } - return page; - } - @Deprecated public static Page buildPage() { return buildPage(null, null); @@ -107,7 +96,7 @@ public class PageUtils { * * @param domain 实体 * @return 分页对象 - * @deprecated 3.6.0 删除 请使用 {@link PageUtils#buildPage(PageQuery)} + * @deprecated 3.6.0 删除 请使用 {@link PageQuery#build()} * 由于使用 Servlet 获取只能从 param 获取 灵活性降低 故将传参操作交给用户 */ @Deprecated @@ -127,23 +116,6 @@ public class PageUtils { return page; } - public static Page buildPage(PageQuery pageQuery) { - Integer pageNum = ObjectUtil.defaultIfNull(pageQuery.getPageNum(), DEFAULT_PAGE_NUM); - Integer pageSize = ObjectUtil.defaultIfNull(pageQuery.getPageSize(), DEFAULT_PAGE_SIZE); - String orderByColumn = pageQuery.getOrderByColumn(); - String isAsc = pageQuery.getIsAsc(); - if (pageNum <= 0) { - pageNum = DEFAULT_PAGE_NUM; - } - Page page = new Page<>(pageNum, pageSize); - OrderItem orderItem = buildOrderItem(orderByColumn, isAsc); - if (ObjectUtil.isNotNull(orderItem)) { - page.addOrder(orderItem); - } - return page; - } - - private static OrderItem buildOrderItem(String orderByColumn, String isAsc) { // 兼容前端排序类型 if ("ascending".equals(isAsc)) { @@ -163,6 +135,15 @@ public class PageUtils { return null; } + /** + * 构建 MP 普通分页对象 + * + * @param domain 实体 + * @return 分页对象 + * @deprecated 3.6.0 删除 请使用 {@link PageQuery#build()} + * 由于使用 Servlet 获取只能从 param 获取 灵活性降低 故将传参操作交给用户 + */ + @Deprecated public static TableDataInfo buildDataInfo(PagePlus page) { TableDataInfo rspData = new TableDataInfo<>(); rspData.setCode(HttpStatus.HTTP_OK); @@ -172,6 +153,10 @@ public class PageUtils { return rspData; } + /** + * @deprecated 3.6.0 删除 请使用 {@link TableDataInfo#build(IPage)} + */ + @Deprecated public static TableDataInfo buildDataInfo(Page page) { TableDataInfo rspData = new TableDataInfo<>(); rspData.setCode(HttpStatus.HTTP_OK); @@ -181,6 +166,10 @@ public class PageUtils { return rspData; } + /** + * @deprecated 3.6.0 删除 请使用 {@link TableDataInfo#build(List)} + */ + @Deprecated public static TableDataInfo buildDataInfo(List list) { TableDataInfo rspData = new TableDataInfo<>(); rspData.setCode(HttpStatus.HTTP_OK); @@ -190,6 +179,10 @@ public class PageUtils { return rspData; } + /** + * @deprecated 3.6.0 删除 请使用 {@link TableDataInfo#build()} + */ + @Deprecated public static TableDataInfo buildDataInfo() { TableDataInfo rspData = new TableDataInfo<>(); rspData.setCode(HttpStatus.HTTP_OK); diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/TestDemoServiceImpl.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/TestDemoServiceImpl.java index 1cb526848..a647d241a 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/TestDemoServiceImpl.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/TestDemoServiceImpl.java @@ -6,9 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; -import com.ruoyi.common.core.page.PagePlus; import com.ruoyi.common.core.page.TableDataInfo; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.demo.domain.TestDemo; import com.ruoyi.demo.domain.bo.TestDemoBo; @@ -38,8 +36,8 @@ public class TestDemoServiceImpl extends ServicePlusImpl queryPageList(TestDemoBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - PagePlus result = pageVo(PageUtils.buildPagePlus(pageQuery), lqw); - return PageUtils.buildDataInfo(result); + Page result = pageVo(pageQuery.build(), lqw); + return TableDataInfo.build(result); } /** @@ -48,8 +46,8 @@ public class TestDemoServiceImpl extends ServicePlusImpl customPageList(TestDemoBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.customPageList(PageUtils.buildPage(pageQuery), lqw); - return PageUtils.buildDataInfo(result); + Page result = baseMapper.customPageList(pageQuery.build(), lqw); + return TableDataInfo.build(result); } @Override diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java index 2a7e2e83f..d571468ac 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java @@ -12,7 +12,6 @@ import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.JsonUtils; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.file.FileUtils; @@ -69,14 +68,14 @@ public class GenTableServiceImpl extends ServicePlusImpl selectPageGenTableList(GenTable genTable, PageQuery pageQuery) { - Page page = baseMapper.selectPageGenTableList(PageUtils.buildPage(pageQuery), genTable); - return PageUtils.buildDataInfo(page); + Page page = baseMapper.selectPageGenTableList(pageQuery.build(), genTable); + return TableDataInfo.build(page); } @Override public TableDataInfo selectPageDbTableList(GenTable genTable, PageQuery pageQuery) { - Page page = baseMapper.selectPageDbTableList(PageUtils.buildPage(pageQuery), genTable); - return PageUtils.buildDataInfo(page); + Page page = baseMapper.selectPageDbTableList(pageQuery.build(), genTable); + return TableDataInfo.build(page); } /** diff --git a/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm b/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm index 15059c07e..ad19c77a7 100644 --- a/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm @@ -3,8 +3,6 @@ package ${packageName}.service.impl; import cn.hutool.core.bean.BeanUtil; import com.ruoyi.common.utils.StringUtils; #if($table.crud || $table.sub) -import com.ruoyi.common.utils.PageUtils; -import com.ruoyi.common.core.page.PagePlus; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.domain.PageQuery; #end @@ -40,8 +38,8 @@ public class ${ClassName}ServiceImpl extends ServicePlusImpl<${ClassName}Mapper, @Override public TableDataInfo<${ClassName}Vo> queryPageList(${ClassName}Bo bo, PageQuery pageQuery) { LambdaQueryWrapper<${ClassName}> lqw = buildQueryWrapper(bo); - PagePlus<${ClassName}, ${ClassName}Vo> result = pageVo(PageUtils.buildPagePlus(pageQuery), lqw); - return PageUtils.buildDataInfo(result); + Page<${ClassName}Vo> result = pageVo(pageQuery.build(), lqw); + return TableDataInfo.build(result); } #end diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java index fdd672976..0b16029e1 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java @@ -11,7 +11,6 @@ import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.service.ConfigService; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.RedisUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.SysConfig; @@ -41,8 +40,8 @@ public class SysConfigServiceImpl extends ServicePlusImpl page = page(PageUtils.buildPage(pageQuery), lqw); - return PageUtils.buildDataInfo(page); + Page page = page(pageQuery.build(), lqw); + return TableDataInfo.build(page); } /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java index bf96b7cf7..7726ee010 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java @@ -7,7 +7,6 @@ import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.entity.SysDictData; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.RedisUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.mapper.SysDictDataMapper; @@ -31,8 +30,8 @@ public class SysDictDataServiceImpl extends ServicePlusImpl page = page(PageUtils.buildPage(pageQuery), lqw); - return PageUtils.buildDataInfo(page); + Page page = page(pageQuery.build(), lqw); + return TableDataInfo.build(page); } /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java index a5344d073..1934f2085 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java @@ -13,7 +13,6 @@ import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.service.DictService; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.RedisUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.mapper.SysDictDataMapper; @@ -48,8 +47,8 @@ public class SysDictTypeServiceImpl extends ServicePlusImpl page = page(PageUtils.buildPage(pageQuery), lqw); - return PageUtils.buildDataInfo(page); + Page page = page(pageQuery.build(), lqw); + return TableDataInfo.build(page); } /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java index e900abd35..487e811ea 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java @@ -9,7 +9,6 @@ import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.service.LogininforService; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.ip.AddressUtils; @@ -100,8 +99,8 @@ public class SysLogininforServiceImpl extends ServicePlusImpl page = page(PageUtils.buildPage(pageQuery), lqw); - return PageUtils.buildDataInfo(page); + Page page = page(pageQuery.build(), lqw); + return TableDataInfo.build(page); } /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java index f3a1db326..16bc8525e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java @@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.SysNotice; import com.ruoyi.system.mapper.SysNoticeMapper; @@ -29,8 +28,8 @@ public class SysNoticeServiceImpl extends ServicePlusImpl page = page(PageUtils.buildPage(pageQuery), lqw); - return PageUtils.buildDataInfo(page); + Page page = page(pageQuery.build(), lqw); + return TableDataInfo.build(page); } /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java index a03274d39..9371d5a2a 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java @@ -9,7 +9,6 @@ import com.ruoyi.common.core.domain.dto.OperLogDTO; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.service.OperLogService; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.ip.AddressUtils; import com.ruoyi.system.domain.SysOperLog; @@ -65,8 +64,8 @@ public class SysOperLogServiceImpl extends ServicePlusImpl page = page(PageUtils.buildPage(pageQuery), lqw); - return PageUtils.buildDataInfo(page); + Page page = page(pageQuery.build(), lqw); + return TableDataInfo.build(page); } /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java index 6a08ba1a7..9c2830108 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java @@ -5,15 +5,14 @@ import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.collect.Lists; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; -import com.ruoyi.common.core.page.PagePlus; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.JsonUtils; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.RedisUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.oss.constant.OssConstant; @@ -70,8 +69,8 @@ public class SysOssConfigServiceImpl extends ServicePlusImpl queryPageList(SysOssConfigBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - PagePlus result = pageVo(PageUtils.buildPagePlus(pageQuery), lqw); - return PageUtils.buildDataInfo(result); + Page result = pageVo(pageQuery.build(), lqw); + return TableDataInfo.build(result); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java index 8dcafeaf4..e062fbcf2 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java @@ -2,12 +2,11 @@ package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; -import com.ruoyi.common.core.page.PagePlus; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.oss.entity.UploadResult; import com.ruoyi.oss.factory.OssFactory; @@ -36,8 +35,8 @@ public class SysOssServiceImpl extends ServicePlusImpl queryPageList(SysOssBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - PagePlus result = pageVo(PageUtils.buildPagePlus(pageQuery), lqw); - return PageUtils.buildDataInfo(result); + Page result = pageVo(pageQuery.build(), lqw); + return TableDataInfo.build(result); } private LambdaQueryWrapper buildQueryWrapper(SysOssBo bo) { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java index 9f9c2574f..058d7edd4 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java @@ -7,7 +7,6 @@ import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.SysPost; import com.ruoyi.system.domain.SysUserPost; @@ -37,8 +36,8 @@ public class SysPostServiceImpl extends ServicePlusImpl page = page(PageUtils.buildPage(pageQuery), lqw); - return PageUtils.buildDataInfo(page); + Page page = page(pageQuery.build(), lqw); + return TableDataInfo.build(page); } /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java index cea08c8e2..514afb13c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java @@ -9,7 +9,6 @@ import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.spring.SpringUtils; @@ -46,8 +45,8 @@ public class SysRoleServiceImpl extends ServicePlusImpl selectPageRoleList(SysRole role, PageQuery pageQuery) { - Page page = baseMapper.selectPageRoleList(PageUtils.buildPage(pageQuery), role); - return PageUtils.buildDataInfo(page); + Page page = baseMapper.selectPageRoleList(pageQuery.build(), role); + return TableDataInfo.build(page); } /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index 3af2fa818..a31b43a4d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -12,7 +12,6 @@ import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.service.UserService; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.spring.SpringUtils; @@ -54,8 +53,8 @@ public class SysUserServiceImpl extends ServicePlusImpl selectPageUserList(SysUser user, PageQuery pageQuery) { - Page page = baseMapper.selectPageUserList(PageUtils.buildPage(pageQuery), user); - return PageUtils.buildDataInfo(page); + Page page = baseMapper.selectPageUserList(pageQuery.build(), user); + return TableDataInfo.build(page); } /** @@ -77,8 +76,8 @@ public class SysUserServiceImpl extends ServicePlusImpl selectAllocatedList(SysUser user, PageQuery pageQuery) { - Page page = baseMapper.selectAllocatedList(PageUtils.buildPage(pageQuery), user); - return PageUtils.buildDataInfo(page); + Page page = baseMapper.selectAllocatedList(pageQuery.build(), user); + return TableDataInfo.build(page); } /** @@ -89,8 +88,8 @@ public class SysUserServiceImpl extends ServicePlusImpl selectUnallocatedList(SysUser user, PageQuery pageQuery) { - Page page = baseMapper.selectUnallocatedList(PageUtils.buildPage(pageQuery), user); - return PageUtils.buildDataInfo(page); + Page page = baseMapper.selectUnallocatedList(pageQuery.build(), user); + return TableDataInfo.build(page); } /** From 2455d0b859708e39fa9fd5b710bebee45c32b085 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Wed, 15 Dec 2021 15:03:44 +0800 Subject: [PATCH 08/10] =?UTF-8?q?add=20=E5=A2=9E=E5=8A=A0=20=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=20Xss=20=E6=A0=A1=E9=AA=8C=E6=B3=A8=E8=A7=A3?= =?UTF-8?q?=20=E7=94=A8=E6=88=B7=E5=AF=BC=E5=85=A5=E5=A2=9E=E5=8A=A0=20Bea?= =?UTF-8?q?n=20=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/common/utils/ValidatorUtils.java | 4 +- .../common/utils/bean/BeanValidators.java | 24 --------- .../main/java/com/ruoyi/common/xss/Xss.java | 53 +++++++++---------- .../com/ruoyi/common/xss/XssValidator.java | 50 ++++++++--------- .../listener/SysUserImportListener.java | 3 ++ 5 files changed, 52 insertions(+), 82 deletions(-) delete mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/bean/BeanValidators.java diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ValidatorUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ValidatorUtils.java index e26e7846c..522b989b9 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ValidatorUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ValidatorUtils.java @@ -1,11 +1,11 @@ package com.ruoyi.common.utils; +import com.ruoyi.common.utils.spring.SpringUtils; import lombok.AccessLevel; import lombok.NoArgsConstructor; import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolationException; -import javax.validation.Validation; import javax.validation.Validator; import java.util.Set; @@ -17,7 +17,7 @@ import java.util.Set; @NoArgsConstructor(access = AccessLevel.PRIVATE) public class ValidatorUtils { - private static final Validator VALID = Validation.buildDefaultValidatorFactory().getValidator(); + private static final Validator VALID = SpringUtils.getBean(Validator.class); public static void validate(T object, Class... groups) { Set> validate = VALID.validate(object, groups); diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/bean/BeanValidators.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/bean/BeanValidators.java deleted file mode 100644 index d9821e0ec..000000000 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/bean/BeanValidators.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.ruoyi.common.utils.bean; - -import java.util.Set; -import javax.validation.ConstraintViolation; -import javax.validation.ConstraintViolationException; -import javax.validation.Validator; - -/** - * bean对象属性验证 - * - * @author ruoyi - */ -public class BeanValidators -{ - public static void validateWithException(Validator validator, Object object, Class... groups) - throws ConstraintViolationException - { - Set> constraintViolations = validator.validate(object, groups); - if (!constraintViolations.isEmpty()) - { - throw new ConstraintViolationException(constraintViolations); - } - } -} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/xss/Xss.java b/ruoyi-common/src/main/java/com/ruoyi/common/xss/Xss.java index 14e43dc55..0a26d60a5 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/xss/Xss.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/xss/Xss.java @@ -1,27 +1,26 @@ -package com.ruoyi.common.xss; - -import javax.validation.Constraint; -import javax.validation.Payload; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * 自定义xss校验注解 - * - * @author ruoyi - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(value = { ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR, ElementType.PARAMETER }) -@Constraint(validatedBy = { XssValidator.class }) -public @interface Xss -{ - String message() - - default "不允许任何脚本运行"; - - Class[] groups() default {}; - - Class[] payload() default {}; -} +package com.ruoyi.common.xss; + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 自定义xss校验注解 + * + * @author Lion Li + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(value = {ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR, ElementType.PARAMETER}) +@Constraint(validatedBy = {XssValidator.class}) +public @interface Xss { + + String message() default "不允许任何脚本运行"; + + Class[] groups() default {}; + + Class[] payload() default {}; + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/xss/XssValidator.java b/ruoyi-common/src/main/java/com/ruoyi/common/xss/XssValidator.java index 43163721d..03102df66 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/xss/XssValidator.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/xss/XssValidator.java @@ -1,29 +1,21 @@ -package com.ruoyi.common.xss; - -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * 自定义xss校验注解实现 - * - * @author ruoyi - */ -public class XssValidator implements ConstraintValidator -{ - private final String HTML_PATTERN = "<(\\S*?)[^>]*>.*?|<.*? />"; - - @Override - public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) - { - return !containsHtml(value); - } - - public boolean containsHtml(String value) - { - Pattern pattern = Pattern.compile(HTML_PATTERN); - Matcher matcher = pattern.matcher(value); - return matcher.matches(); - } -} \ No newline at end of file +package com.ruoyi.common.xss; + +import cn.hutool.core.util.ReUtil; +import cn.hutool.http.HtmlUtil; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; + +/** + * 自定义xss校验注解实现 + * + * @author Lion Li + */ +public class XssValidator implements ConstraintValidator { + + @Override + public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) { + return !ReUtil.contains(HtmlUtil.RE_HTML_MARK, value); + } + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/listener/SysUserImportListener.java b/ruoyi-system/src/main/java/com/ruoyi/system/listener/SysUserImportListener.java index a53e9091a..3b700d48c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/listener/SysUserImportListener.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/listener/SysUserImportListener.java @@ -9,6 +9,7 @@ import com.ruoyi.common.excel.ExcelResult; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.ValidatorUtils; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.system.domain.vo.SysUserImportVo; import com.ruoyi.system.service.ISysConfigService; @@ -53,12 +54,14 @@ public class SysUserImportListener extends AnalysisEventListener").append(successNum).append("、账号 ").append(user.getUserName()).append(" 导入成功"); } else if (isUpdateSupport) { + ValidatorUtils.validate(user); user.setUpdateBy(operName); userService.updateUser(user); successNum++; From 877a9d510bb81883f2f29c49e47ae8f713bc0c79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Wed, 15 Dec 2021 15:33:31 +0800 Subject: [PATCH 09/10] =?UTF-8?q?update=20tlog=201.3.5=20=3D>=201.3.6=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20jdk17=20=E4=B8=8D=E5=85=BC=E5=AE=B9?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + pom.xml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2df9d65bd..91a2b296e 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-2.5-blue.svg)]() [![JDK-8+](https://img.shields.io/badge/JDK-8-green.svg)]() [![JDK-11](https://img.shields.io/badge/JDK-11-green.svg)]() +[![JDK-17](https://img.shields.io/badge/JDK-17-green.svg)]() > RuoYi-Vue-Plus 是基于 RuoYi-Vue 针对 `分布式集群` 场景升级(不兼容原框架) diff --git a/pom.xml b/pom.xml index 338a12505..a1ea476ed 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ 3.16.6 2.2.1 3.5.0 - 1.3.5 + 1.3.6 2.3.0 From a2d49f9981398541184067a60b5636c7e485fc77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Wed, 15 Dec 2021 17:28:41 +0800 Subject: [PATCH 10/10] =?UTF-8?q?update=20=E6=9B=B4=E6=94=B9=E6=BC=94?= =?UTF-8?q?=E7=A4=BA=E6=A1=88=E4=BE=8B=E5=A4=9A=E6=95=B0=E6=8D=AE=E6=BA=90?= =?UTF-8?q?=E6=B3=A8=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/demo/controller/TestBatchController.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java index d6e691dbb..8b5b6c155 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java @@ -36,7 +36,7 @@ public class TestBatchController extends BaseController { */ @ApiOperation(value = "新增批量方法") @PostMapping("/add") -// @DataSource(DataSourceType.SLAVE) +// @DS("slave") public AjaxResult add() { List list = new ArrayList<>(); for (int i = 0; i < 1000; i++) { @@ -50,7 +50,7 @@ public class TestBatchController extends BaseController { */ @ApiOperation(value = "新增或更新批量方法") @PostMapping("/addOrUpdate") -// @DataSource(DataSourceType.SLAVE) +// @DS("slave") public AjaxResult addOrUpdate() { List list = new ArrayList<>(); for (int i = 0; i < 1000; i++) { @@ -72,7 +72,7 @@ public class TestBatchController extends BaseController { */ @ApiOperation(value = "删除批量方法") @DeleteMapping() -// @DataSource(DataSourceType.SLAVE) +// @DS("slave") public AjaxResult remove() { return toAjax(iTestDemoService.remove(new LambdaQueryWrapper() .eq(TestDemo::getOrderNum, -1L)) ? 1 : 0);