繁体   English   中英

向 SlingHttpServletRequest 添加新的请求参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM