首页 > 解决方案 > 向 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;
}

标签: javaservletsaemservlet-filterssling

解决方案


推荐阅读