[英]Add new request parameter to a 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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.