我在过去几天玩弹簧拦截器,并希望通过拦截器捕获和处理特定请求。我想要做的是在每个请求被特定控制器处理之前拦截每个请求,检查请求是否包含特定参数。如果是的话,做一些东西,然后将这些东西签名到控制器,以便映射该请求。春天拦截器处理程序混淆行为
最后,我设法做到了这一点,但是当我一次执行多个请求并使用不同的参数值时,只有最后一个请求的参数值被分配给每个控制器处理程序,即使每个控制器都应该包含参数在请求内。
实施例(同时执行):
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。每个其他控制器都以不同的方式使用参数。
嗯,你是否在拦截器中保存了一些状态?你能展示一些代码示例吗? – masted 2012-07-10 14:14:57
好吧,我已经添加了代码示例和更多详细信息。 – jMn 2012-07-10 14:27:10
这解决了吗?怎么样? – 2017-02-03 23:22:03