ここ数日、春のインターセプターで遊んでいて、インターセプターを介して特定のリクエストをキャッチして処理したいと考えています。私がしたいのは、特定のコントローラーによって処理される前に各リクエストを傍受し、リクエストに特定のパラメーターが含まれているかどうかを確認することです。はいの場合は、いくつかのことを行い、その要求をマップするコントローラーに署名します。
最後にそれを行うことができましたが、異なるパラメーター値で一度に複数のリクエストを実行すると、最後のリクエストのパラメーター値のみが各コントローラーハンドラーに割り当てられます。すべてのコントローラーでさえ、リクエストに含まれるパラメーターを持つ必要があります。
例(同時に実行):
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 を取得することもありますが、3 つすべてを取得することはありません)。次のリクエストが呼び出される前にすべてのリクエストが完了する時間があるタイムアウトでこれらのリクエストを実行すると、正常に機能しています。
誰もこれを処理する方法を知っていますか?
ありがとう
更新しました:
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 にハンドラーをキャストします。他のすべてのコントローラーは、さまざまな方法で params を使用します。