java - 向 SlingHttpServletRequest 添加新的请求参数
问题描述
我有一个用例,我需要在 sling servlet 过滤器中将自定义请求参数添加到拦截的请求中。
由于查询参数映射是不可变的,我将请求包装在 SlingHttpServletRequestWrapper 中,并覆盖我需要添加的参数的 getRequestParameterMap。但是我被卡住了,我无法创建新的参数。参数的类型应该是Map<String, RequestParameter[]>但由于 RequestParameter 是抽象的,我不知道如何实例化一个新实例。
请问有什么帮助吗???
这是我的过滤器的代码:
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if(!(request instanceof SlingHttpServletRequest) && !(response instanceof SlingHttpServletResponse)) {
chain.doFilter(request, response);
return;
}
final SlingHttpServletRequest slingRequest = (SlingHttpServletRequest) request;
final SlingHttpServletResponse slingResponse = (SlingHttpServletResponse) response;
TreeMap<String, RequestParameter[]> newParam = new TreeMap<>();
if(!isEmpty(slingRequest.getRequestPathInfo().getSelectors())) {
String selector = slingRequest.getRequestPathInfo().getSelectorString();
//Map param = slingRequest.getParameterMap();
BrandSlingWrappedRequest requestWrapper = new BrandSlingWrappedRequest(slingRequest, newParam);
} else {
chain.doFilter(request, response);
}
}
这是我的请求包装器的代码:
public class BrandSlingWrappedRequest extends SlingHttpServletRequestWrapper {
private final Map<String, RequestParameter[]> modifiableParameters;
private Map<String, RequestParameter[]> allParameters = null;
public BrandSlingWrappedRequest(final SlingHttpServletRequest request, final Map<String, RequestParameter[]> additionalParams) {
super(request);
modifiableParameters = new TreeMap<>();
modifiableParameters.putAll(additionalParams);
}
@Override
public RequestParameterMap getRequestParameterMap()
{
if (allParameters == null)
{
allParameters = new TreeMap<>();
allParameters.putAll(super.getRequestParameterMap());
allParameters.putAll(modifiableParameters);
}
return (RequestParameterMap) allParameters;
}
解决方案
推荐阅读
- sql - 在 SQL 查询中仅包括转换状态
- javascript - 使用 ApolloLink.split 时处理 Apollo 客户端的错误
- mapbox - 如何根据android中的方向旋转Mapbox View
- jquery - 检查是否是最后一个子元素 - 动态创建的元素
- c++ - 在 C++ 中将方向逼近为零的最佳方法
- angular - 角度 4 中警报中动态填充的 html 中的事件不起作用
- apache-spark - pyspark:FileNotFoundError: [WinError 2] 系统找不到指定的文件
- node.js - 从 res.end(data, 'binary') 创建文件会使文件损坏
- openid - 使用 Gluu 3.1.3 和 OpenAM 6 的 OIDC
- python - draw rgb spectrum in python/numpy