温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

拦截器参数如何获取

发布时间:2026-08-30 06:04:42 来源:亿速云 阅读:92 作者:小樊 栏目:编程语言

“拦截器参数如何获取”要看具体技术栈,不同框架里“拦截器”概念和取值方式不一样。下面把常见场景分别说明,你可以按需对照;如果还不是你用的,可以直接告诉我框架名。


一、Spring MVC / Spring Boot(最常见)

1️⃣ 拦截器参数从哪里来?

Spring 的 HandlerInterceptor 没有直接的“参数对象”,参数通常来自:

  • HttpServletRequest
  • HandlerMethod
  • ModelAndView

2️⃣ 获取请求参数

public class MyInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {

        // 1. 路径参数(/user/{id})
        String uri = request.getRequestURI();

        // 2. 查询参数(?name=xxx)
        String name = request.getParameter("name");

        // 3. Header
        String token = request.getHeader("Authorization");

        // 4. 获取 controller 方法参数(需要 HandlerMethod)
        if (handler instanceof HandlerMethod) {
            HandlerMethod hm = (HandlerMethod) handler;
            Method method = hm.getMethod();
        }

        return true;
    }
}

重点
Spring MVC 的参数(方法参数)在拦截器阶段还没被解析,只能通过 request 或反射获取方法信息。


二、Spring WebFlux(响应式)

public class MyFilter implements WebFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange,
                             WebFilterChain chain) {

        ServerHttpRequest request = exchange.getRequest();

        String param = request.getQueryParams().getFirst("name");

        return chain.filter(exchange);
    }
}

三、MyBatis 拦截器(Executor / StatementHandler)

MyBatis 的拦截器是插件机制,参数来自 Invocation

示例:获取 Mapper 方法参数

@Intercepts({
  @Signature(type = Executor.class,
             method = "update",
             args = {MappedStatement.class, Object.class})
})
public class MyBatisInterceptor implements Interceptor {

    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        Object[] args = invocation.getArgs();

        MappedStatement ms = (MappedStatement) args[0];
        Object parameterObject = args[1]; // mapper 方法参数

        return invocation.proceed();
    }
}

parameterObject 就是你的 mapper 参数(可能是一个对象或 Map)


四、Dubbo / RPC 拦截器(Filter)

public class MyDubboFilter implements Filter {

    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) {
        String methodName = invocation.getMethodName();
        Object[] args = invocation.getArguments();

        return invoker.invoke(invocation);
    }
}

五、Servlet Filter(最底层)

public class MyFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request,
                         ServletResponse response,
                         FilterChain chain) {

        HttpServletRequest httpRequest = (HttpServletRequest) request;

        String param = httpRequest.getParameter("id");

        chain.doFilter(request, response);
    }
}

六、总结速查表

场景 参数来源
Spring MVC 拦截器 HttpServletRequest
Controller 方法参数 拦截器阶段无法直接获取
MyBatis 拦截器 Invocation.getArgs()
Dubbo Invocation.getArguments()
Filter ServletRequest

七、如果你愿意,我可以直接给你「精准答案」

你可以直接告诉我:

  1. ✅ 使用的框架(Spring Boot / MyBatis / Dubbo / WebFlux)
  2. ✅ 想获取的参数是哪种(请求参数 / Header / Controller 方法参数 / SQL 参数)
  3. ✅ 示例代码场景

我可以直接给你可运行的代码

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI