diff --git a/novel-admin/src/main/java/com/java2nb/common/aspect/SortOrderValidationAspect.java b/novel-admin/src/main/java/com/java2nb/common/aspect/SortOrderValidationAspect.java index a1e0dae..01da149 100644 --- a/novel-admin/src/main/java/com/java2nb/common/aspect/SortOrderValidationAspect.java +++ b/novel-admin/src/main/java/com/java2nb/common/aspect/SortOrderValidationAspect.java @@ -11,7 +11,6 @@ import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component; import java.lang.annotation.Annotation; -import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Arrays; import java.util.Map; @@ -41,50 +40,17 @@ public class SortOrderValidationAspect { boolean hasAnnotation = Arrays.stream(parameterAnnotations[i]) .anyMatch(a -> a.annotationType().equals(ValidateSortOrder.class)); - if (hasAnnotation && args[i] != null) { - processArgument(args[i]); + if (hasAnnotation && args[i] instanceof Map map) { + if (map.get("sort") instanceof String sortStr) { + map.put("sort", SortWhitelistUtil.sanitizeColumn(sortStr)); + } + if (map.get("order") instanceof String orderStr) { + map.put("order", SortWhitelistUtil.sanitizeOrder(orderStr)); + } } } return joinPoint.proceed(args); } - @SneakyThrows - private void processArgument(Object obj) { - if (obj instanceof Map map) { - processMap(map); - } else { - traverseAndSanitize(obj); - } - } - - @SneakyThrows - private void traverseAndSanitize(Object obj) { - for (Field field : obj.getClass().getDeclaredFields()) { - switch (field.getName()) { - case "sort", "order" -> { - field.setAccessible(true); - Object value = field.get(obj); - if (value instanceof String strValue) { - String sanitized = "sort".equals(field.getName()) - ? SortWhitelistUtil.sanitizeColumn(strValue) - : SortWhitelistUtil.sanitizeOrder(strValue); - field.set(obj, sanitized); - } - } - default -> { - } - } - } - } - - private void processMap(Map map) { - if (map.get("sort") instanceof String sortStr) { - map.put("sort", SortWhitelistUtil.sanitizeColumn(sortStr)); - } - if (map.get("order") instanceof String orderStr) { - map.put("order", SortWhitelistUtil.sanitizeOrder(orderStr)); - } - } - } diff --git a/novel-common/src/main/java/com/java2nb/novel/core/aspect/SortOrderValidationAspect.java b/novel-common/src/main/java/com/java2nb/novel/core/aspect/SortOrderValidationAspect.java index 9079126..41cb33a 100644 --- a/novel-common/src/main/java/com/java2nb/novel/core/aspect/SortOrderValidationAspect.java +++ b/novel-common/src/main/java/com/java2nb/novel/core/aspect/SortOrderValidationAspect.java @@ -2,6 +2,7 @@ package com.java2nb.novel.core.aspect; import com.java2nb.novel.core.annotation.ValidateSortOrder; import com.java2nb.novel.core.utils.SortWhitelistUtil; +import com.java2nb.novel.core.vo.SortOrderVO; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import org.aspectj.lang.ProceedingJoinPoint; @@ -29,7 +30,7 @@ public class SortOrderValidationAspect { */ @SneakyThrows @Around("execution(* com.java2nb.novel.mapper.*Mapper.*(..))") - public Object validateSortAndOrder(ProceedingJoinPoint joinPoint) { + public Object processSortOrderFields(ProceedingJoinPoint joinPoint) { Object[] args = joinPoint.getArgs(); MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); @@ -41,7 +42,7 @@ public class SortOrderValidationAspect { .anyMatch(a -> a.annotationType().equals(ValidateSortOrder.class)); if (hasAnnotation && args[i] != null) { - processArgument(args[i]); + handleAnnotatedParameter(args[i]); } } @@ -49,16 +50,36 @@ public class SortOrderValidationAspect { } @SneakyThrows - private void processArgument(Object obj) { - if (obj instanceof Map map) { + private void handleAnnotatedParameter(Object obj) { + if (obj instanceof SortOrderVO sortOrderVO){ + processSortOrderVO(sortOrderVO); + } else if (obj instanceof Map map) { processMap(map); } else { - traverseAndSanitize(obj); + processGenericObject(obj); + } + } + + private void processSortOrderVO(SortOrderVO sortOrderVO) { + if(sortOrderVO.getSort() != null){ + sortOrderVO.setSort(SortWhitelistUtil.sanitizeColumn(sortOrderVO.getSort())); + } + if(sortOrderVO.getOrder() != null){ + sortOrderVO.setOrder(SortWhitelistUtil.sanitizeOrder(sortOrderVO.getOrder())); + } + } + + private void processMap(Map map) { + if (map.get("sort") instanceof String sortStr) { + map.put("sort", SortWhitelistUtil.sanitizeColumn(sortStr)); + } + if (map.get("order") instanceof String orderStr) { + map.put("order", SortWhitelistUtil.sanitizeOrder(orderStr)); } } @SneakyThrows - private void traverseAndSanitize(Object obj) { + private void processGenericObject(Object obj) { for (Field field : obj.getClass().getDeclaredFields()) { switch (field.getName()) { case "sort", "order" -> { @@ -77,13 +98,4 @@ public class SortOrderValidationAspect { } } - private void processMap(Map map) { - if (map.get("sort") instanceof String sortStr) { - map.put("sort", SortWhitelistUtil.sanitizeColumn(sortStr)); - } - if (map.get("order") instanceof String orderStr) { - map.put("order", SortWhitelistUtil.sanitizeOrder(orderStr)); - } - } - } diff --git a/novel-common/src/main/java/com/java2nb/novel/core/vo/SortOrderVO.java b/novel-common/src/main/java/com/java2nb/novel/core/vo/SortOrderVO.java new file mode 100644 index 0000000..f156a99 --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/core/vo/SortOrderVO.java @@ -0,0 +1,16 @@ +package com.java2nb.novel.core.vo; + +import lombok.Data; + +/** + * @author xiongxiaoyang + * @date 2025/7/17 + */ +@Data +public class SortOrderVO { + + private String sort; + + private String order; + +} diff --git a/novel-front/src/main/java/com/java2nb/novel/mapper/FrontNewsMapper.java b/novel-front/src/main/java/com/java2nb/novel/mapper/FrontNewsMapper.java index ad70607..a70f54d 100644 --- a/novel-front/src/main/java/com/java2nb/novel/mapper/FrontNewsMapper.java +++ b/novel-front/src/main/java/com/java2nb/novel/mapper/FrontNewsMapper.java @@ -1,12 +1,7 @@ package com.java2nb.novel.mapper; -import com.java2nb.novel.entity.Book; -import com.java2nb.novel.vo.BookSpVO; -import com.java2nb.novel.vo.BookVO; import org.apache.ibatis.annotations.Param; -import java.util.List; - /** * @author Administrator */ diff --git a/novel-front/src/main/java/com/java2nb/novel/vo/BookSpVO.java b/novel-front/src/main/java/com/java2nb/novel/vo/BookSpVO.java index 5bf6400..f1a691e 100644 --- a/novel-front/src/main/java/com/java2nb/novel/vo/BookSpVO.java +++ b/novel-front/src/main/java/com/java2nb/novel/vo/BookSpVO.java @@ -1,5 +1,6 @@ package com.java2nb.novel.vo; +import com.java2nb.novel.core.vo.SortOrderVO; import lombok.Data; import java.util.Date; @@ -9,7 +10,7 @@ import java.util.Date; * @author 11797 */ @Data -public class BookSpVO { +public class BookSpVO extends SortOrderVO { private String keyword; @@ -29,9 +30,5 @@ public class BookSpVO { private Long updatePeriod; - private String sort; - - - }