[
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)