关于springboot:HandlerMethodArgumentResolver方法解析器可以用于SQL注入拦截

HandlerMethodArgumentResolver
1、策略接口:用于在给定申请的上下文中将办法参数解析为参数值,它是HandlerMethod办法的解析器,将HttpServletRequest解析为HandlerMethod办法的参数。

public interface HandlerMethodArgumentResolver {
/**
 * 性能形容: 判断是否反对 MethodParameter
 * 〈〉
 * @Param:
 * @Return:
 * @Author: Steven
 * @Date: 2020/12/15 11:47
 */
boolean supportsParameter(MethodParameter parameter);
/**
 * 性能形容: 用于数据绑定解析申请参数
 * 〈〉
 * @Param:
 * @Return:
 * @Author: Steven
 * @Date: 2020/12/15 11:47
 */
Object resolveArgument(MethodParameter parameter,       @Nullable ModelAndViewContainer mavContainer, NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception;
}

2、

public class SqlFilterArgumentResolver implements       HandlerMethodArgumentResolver {

/**
 * 性能形容: 判断controller申请参数中是否蕴含 CurrentUser
 * 〈〉
 * @Param:
 * @Return:
 * @Author: Steven
 * @Date: 2020/12/15 11:47
 */
@Override
public boolean supportsParameter(MethodParameter parameter) {
   return parameter.getParameterType().equals(CurrentUser.class);
}

/**
 * 性能形容: 获取获取申请体重的报文、解析
 * 〈〉
 * @Param:
 * @Return:
 * @Author: Steven
 * @Date: 2020/12/15 11:47
 */
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
 NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {
    Optional.ofNullable(descs).ifPresent(s -> orderItemList.addAll(          Arrays.stream(s).filter(sqlInjectPredicate()).map(OrderItem::desc).collect(Collectors.toList())));
 }
 
 /**
 * 性能形容: 解决查问关键字
 * 〈〉
 * @Param:
 * @Return:
 * @Author: Steven
 * @Date: 2020/12/15 11:47
 */
 private Predicate<String> sqlInjectPredicate() {
   return sql -> {
      for (String keyword : KEYWORDS) {
         if (StrUtil.containsIgnoreCase(sql, keyword)){
            return false;
         }
      }
      return true;
 }
}

}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理