You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@knox.apache.org by "Philip Zampino (Jira)" <ji...@apache.org> on 2025/08/12 14:30:00 UTC

[jira] [Created] (KNOX-3180) Improve conditions for applying UrlEncodedFormRequest wrapper

Philip Zampino created KNOX-3180:
------------------------------------

             Summary: Improve conditions for applying UrlEncodedFormRequest wrapper
                 Key: KNOX-3180
                 URL: https://issues.apache.org/jira/browse/KNOX-3180
             Project: Apache Knox
          Issue Type: Improvement
          Components: Server
            Reporter: Philip Zampino
            Assignee: Philip Zampino


The fix for KNOX-3179 introduced some conditional logic in UrlEncodedFormRequest to accommodate params in the request body. It seems the intention of  the UrlEncodedFormRequest wrapper is for proxying cases, and only applied based on the "x-www-form-urlencoded" content type. However, when Knox itself is the terminus, and the API includes form data, we end up with an unusual situation. It seems like perhaps we should only be employing UrlEncodedFormRequest when the content type is "x-www-form-urlencoded" AND Knox is proxying. When Knox is providing the API itself, this restriction is not necessary and this extension need not be applied. 

I think we can modify [the condition for applying the wrapper|https://github.com/apache/knox/blob/e58d5e4a2d10910a298708400ce9afca0690b5b8/gateway-server/src/main/java/org/apache/knox/gateway/GatewayFilter.java#L192] to include a check for the service being requested.

Something like
{code:java}
(UrlEncodedFormRequest.isUrlEncodedForm(servletRequest) && !KNOX_SERVICES.contains(chain.getResourceRole()))
                  ? new UrlEncodedFormRequest((HttpServletRequest) servletRequest)
                  : servletRequest {code}
where KNOX_SERVICES is a constant collection of Knox-provided API service roles.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)