Хорошая практика - заключить объект запроса в другой объект, используя фильтр сервлета. Поскольку HttpServletRequest является интерфейсом, вы можете написать свою собственную реализацию. Ваша реализация может хранить полученный вами запрос и делегировать любые и все свои собственные методы исходному объекту запроса, но также может изменять возвращаемые значения по своему усмотрению. Таким образом, ваши методы getParameter () и т. Д. Могут вызывать один и тот же метод для исходного объекта запроса и изменять результат по своему усмотрению, прежде чем возвращать его.
class MyHttpServletRequestWrapper implements HttpServletRequest {
private HttpServletRequest originalRequest;
public MyHttpServletRequestWrapper(HttpServletRequest originalRequest) {
this.originalRequest = originalRequest;
public String getAuthType() {return originalRequest.getAuthType();}
public String getQueryString() {return originalRequest.getQueryString();}
// etc.
public Map getParameterMap() {
Map params = originalRequest.getParameterMap();
params.remove("parameter-to-remove");
params.put("parameter-to-add", "<a value>");
//etc.
}
}
Ваш сервлет-фильтр:
class MyFilter implements Filter {
public void init(FilterConfig config) {
// perhaps you might want to initialize something here
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
HttpServletRequest originalRequest = (HttpServletRequest) request;
HttpServletRequest newRequest = new MyHttpServletRequest(originalRequest);
chain.doFilter(newRequest, response);
}
}
Вы также можете создать подкласс javax.servlet.request.HttpServletRequestWrapper, который сэкономит вам кучу работы.
Подробнее см. . .