perf: 优化排序参数校验

This commit is contained in:
xiongxiaoyang
2025-07-18 16:21:35 +08:00
parent 773ce159f7
commit 1cd8a49fd4
7 changed files with 29 additions and 26 deletions

View File

@ -25,10 +25,10 @@ import java.util.Map;
public class SortOrderValidationAspect {
/**
* 拦截所有的mapper方法
* 拦截mapper的所有list方法
*/
@SneakyThrows
@Around("execution(* com.java2nb.*.dao.*Dao.*(..))")
@Around("execution(* com.java2nb.*.dao.*Dao.list*(..))")
public Object validateSortAndOrder(ProceedingJoinPoint joinPoint) {
Object[] args = joinPoint.getArgs();
MethodSignature signature = (MethodSignature) joinPoint.getSignature();

View File

@ -14,8 +14,7 @@ import java.util.Set;
public class SortWhitelistUtil {
private final Set<String> allowedColumns = new HashSet<>(
Arrays.asList("id", "name", "create_time", "update_time", "order_num", "last_index_update_time", "word_count",
"visit_count"));
Arrays.asList("id", "name", "order_num"));
private final Set<String> allowedOrders = new HashSet<>(Arrays.asList("asc", "desc"));
public String sanitizeColumn(String input) {

View File

@ -11,7 +11,6 @@ import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
*
* @author xiongxy
* @email 1179705413@qq.com
* @date 2019-10-03 09:45:11
@ -35,7 +34,7 @@ public interface SysUserDao {
Long[] listAllDept();
List<UserDO> listByPerm(Map<String, Object> map);
List<UserDO> listByPerm(@ValidateSortOrder Map<String, Object> map);
int countByPerm(Map<String, Object> map);
}

View File

@ -21,7 +21,7 @@ import java.util.*;
* @date 2025/7/17
*/
@Aspect
@Component
//@Component
@RequiredArgsConstructor
public class SortOrderValidationAspect {

View File

@ -15,6 +15,7 @@ import io.github.xxyopen.model.resp.RestResult;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
@ -82,7 +83,7 @@ public class BookController extends BaseController {
* 分页搜索
*/
@GetMapping("searchByPage")
public RestResult<?> searchByPage(BookSpVO bookSP, @RequestParam(value = "curr", defaultValue = "1") int page,
public RestResult<?> searchByPage(@Validated BookSpVO bookSP, @RequestParam(value = "curr", defaultValue = "1") int page,
@RequestParam(value = "limit", defaultValue = "20") int pageSize) {
return RestResult.ok(bookService.searchByPage(bookSP, page, pageSize));
}

View File

@ -14,7 +14,7 @@ import java.util.List;
public interface FrontBookMapper extends BookMapper {
List<BookVO> searchByPage(@ValidateSortOrder BookSpVO params);
List<BookVO> searchByPage(BookSpVO params);
void addVisitCount(@Param("bookId") Long bookId, @Param("visitCount") Integer visitCount);

View File

@ -1,6 +1,7 @@
package com.java2nb.novel.vo;
import com.java2nb.novel.core.vo.SortOrderVO;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
import java.util.Date;
@ -10,7 +11,7 @@ import java.util.Date;
* @author 11797
*/
@Data
public class BookSpVO extends SortOrderVO {
public class BookSpVO {
private String keyword;
@ -30,5 +31,8 @@ public class BookSpVO extends SortOrderVO {
private Long updatePeriod;
@Pattern(regexp = "^(last_index_update_time|word_count|visit_count)$")
private String sort;
}