最近几天我在玩spring拦截器,想通过拦截器捕获和处理特定请求。我想要做的是在特定控制器处理之前拦截每个请求,检查请求是否包含特定参数。如果是,请做一些事情,然后将这些事情签署给映射该请求的控制器。
最后我设法做到了,但是当我一次执行多个请求时,使用不同的参数值,只有最后一个请求的参数值被分配给每个控制器处理程序,即使每个控制器都应该有包含在请求中的参数。
示例(同时执行):
http://domain.com/controller/method?param=xfg
http://domain.com/controller/method?param=mtc
http://domain.com/controller/method?param=abc
在每个请求的响应中,我得到 abc!(有时我会得到 xfg 和 abc,或 mtc 和 abc,但不会同时得到这三个)。当我使用超时执行这些请求时,每个请求都有时间在调用下一个请求之前完成,它工作正常。
有谁知道如何处理这个?
谢谢
更新:
public class OLMyInterceptor extends HandlerInterceptorAdapter {
static Logger LOG = Logger.getLogger(OLAuthentificationInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Map<String, Object> activeParamsMap = request.getParameterMap();
for(Entry<String, Object> param : activeParamsMap.entrySet()) {
if(param.getKey().startsWith("aP_")) {
activeParams.put(param.getKey().substring(3), param.getValue());
}
}
((MainController) handler).setParams(activeParams);
return true;
}
}
那里有代码示例。我的每个控制器都扩展了 MainController,这就是为什么我将处理程序转换为具有 setParams 方法的 MainController。每个其他控制器都以不同的方式使用参数。