セッションスコープのMap
に関心のあるデータ(リクエストパラメータ、リクエスト属性など)を、固有のIDで格納して、返品先URLに追加します。
String id = UUID.randomUUID().toString();
DataOfInterest data = new DataOfInterest(request);
Map<String, DataOfInterest> map = (Map<String, DataOfInterest) session.getAttribute("dataOfInterest");
map.put(id, data);
returnToUrl += "?token=" + URLEncoder.encode(id, "UTF-8");
// ...
そして、それが戻ってくるときに、あなたがgetParameter()
をオーバーライドして、関心の元のデータを返すためにCONSORTS前記現在のリクエストをラップするHttpServletRequestWrapper
を使用しています。これはFilter
で行います。
String id = request.getParameter(token);
Map<String, DataOfInterest> map = (Map<String, DataOfInterest) session.getAttribute("dataOfInterest");
DataOfInterest data = map.remove(id);
chain.doFilter(new HttpServletRequestWithDataOfInterest(request, data), response);
HttpServletRequestWithDataOfInterest
は次のようになります。
public class HttpServletRequestWithDataOfInterest extends HttpServletRequestWrapper {
private DataOfInterest data;
public HttpServletRequestWithDataOfInterest(HttpServletRequest request, DataOfInterest data) {
super(request);
this.data = data;
}
public String getParameter(String name) {
return data.getParameter(name);
}
public String[] getParameterValues(String name) {
return data.getParameterValues(name);
}
// Etc, only when necessary.
}
注:任意の明白なnullcheckなどを扱うには、あなた次第です。
私はHttpServletRequestWrapperについて知りませんでした - 私は必要な配線のような音。 – jricher
ようこそ。 – BalusC