HandlerMethodArgumentResolver配置不生效

在Spring MVC中为实现参数Sql注入校验,配置自定义HandlerMethodArgumentResolver,但发现配置未生效。通过逐步排查,发现解析器执行逻辑与预期不同,Spring MVC内部解析器可能会优先执行,导致自定义解析器未被调用。最终选择使用拦截器作为替代方案,实现参数校验功能。
摘要由CSDN通过智能技术生成

背景

从Controller统一对用户传递给后端的参数进行Sql注入的校验(由于特殊原因,不能在dao层校验),需要对所有的Request进行拦截,获取到里面的参数进行自定义的校验判断。

问题

配置Config类实现WebMvcConfigurer 接口,重写addArgumentResolvers方法,将自定义的HandlerMethodArgumentResolver类加入到resolvers集合中去

@Configuration
public class MvcConfig implements WebMvcConfigurer {
    @Autowired
    private RequestaArgumentRosolver requestaArgumentRosolver;

    /**
     * 添加自定义控制器参数拦截
     *
     * @param resolvers
     */
    @Override
    public void addArgumentResolvers(final List<HandlerMethodArgumentResolver> resolvers) {
        resolvers.add(requestaArgumentRosolver);
    }

}

以下是自定义HandlerMethodArgumentResolver类的代码

@Component
public class RequestaArgumentRosolver implements HandlerMethodArgumentResolver {
    @Override
    public boolean supportsParameter(final MethodParameter parameter) {
        return true;
    }

    @Override
    public Object resolveArgument(final MethodParameter parameter, final ModelAndViewContainer mavContainer,
                                  final NativeWebRequest webRequest,
                                  final WebDataBinderFactory binderFactory) throws Exception {
        return null;
    }
}

但是在本地调用后端接口的时候,debug一直进不去自定义参数解析器的逻辑,去网上搜索答案也无果,检查代码也没发现问题。所以决定从DispatcherServlet(入口)一步步去排查

排查步骤

1、debug进入到doDispatch方法中发现HandleAdapter对象中的customArgumentResolves属性和argumentResolvers属性中均包含我的自定义的解析器的,所以确定一点,我是set进去了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值