Сохраните интересующие данные (параметры запроса, атрибуты запроса и т. Д.) В Map
в области сеанса с уникальным идентификатором в качестве ключа, который вы добавляете в 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");
// ...
А затем, когда он вернется, используйте HttpServletRequestWrapper
, чтобы обернуть текущий запрос, в котором вы переопределяете getParameter()
и консорциумов, чтобы вернуть интересующие исходные данные. Сделайте это в 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.
}
Примечание. Любая очевидная обработка нулевой проверки и т. Д. Зависит от вас.