[ 
https://issues.apache.org/jira/browse/SLING-13103?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Robert Munteanu resolved SLING-13103.
-------------------------------------
    Resolution: Fixed

> Wrong ResourceResolver set in script bindings after request dispatch in a 
> Jakarta Context
> -----------------------------------------------------------------------------------------
>
>                 Key: SLING-13103
>                 URL: https://issues.apache.org/jira/browse/SLING-13103
>             Project: Sling
>          Issue Type: Bug
>          Components: Scripting
>            Reporter: Robert Munteanu
>            Assignee: Robert Munteanu
>            Priority: Major
>              Labels: sling-jakarta-servlet-javax-compat
>             Fix For: Scripting Core 3.0.2
>
>
> After the Jakarta migration,  {{DefaultSlingScript.verifySlingBindings()}} 
> sets the resolver binding using 
> {{sling.getJakartaRequest().getResourceResolver()}}.
> This returns an incorrect ResourceResolver when the script is invoked after a 
> RequestDispatcher.forward() from a javax.servlet.Filter that wraps the 
> request with a custom SlingHttpServletRequestWrapper providing a custom 
> ResourceResolver.
> The symptom is that a script receives the original request's ResourceResolver 
> in its bindings instead of the custom one provided by the forwarding filter's 
> request wrapper, leading to resource resolution failures.
> The problem can be traced in the following way:
> During request dispatch, 
> [SlingRequestDispatcher.dispatch()|https://github.com/apache/sling-org-apache-sling-engine/blob/08e1bdd781be7357ff4132c9a69fc78a181430ea/src/main/java/org/apache/sling/engine/impl/request/SlingRequestDispatcher.java#L156]
>    calls 
> [RequestData.unwrap(request)|https://github.com/apache/sling-org-apache-sling-engine/blob/08e1bdd781be7357ff4132c9a69fc78a181430ea/src/main/java/org/apache/sling/engine/impl/request/RequestData.java#L302]
>  which strips away all servlet request wrappers — including the javax → 
> jakarta bridge wrappers that contained the custom javax 
> SlingHttpServletRequestWrapper. 
> After unwrapping, the underlying SlingJakartaHttpServletRequestImpl is 
> exposed, and its methods diverge:
> - getResource() → delegates to requestData.getContentData().getResource() — 
> returns the dispatched resource (correct, since SlingRequestProcessorImpl 
> stores it in ContentData during dispatch)
> - getResourceResolver() → delegates to requestData.getResourceResolver() — 
> returns the original request's resolver (incorrect, since 
> RequestData.resourceResolver is set once during initResource() and never 
> updated on dispatch)



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

Reply via email to