Doesn't matter that we don't use the extra APIs, the type signature of ServletRequest::getInputStream still demands a ServletInputStream so that is what we have to return when wrapping the request object.
Yeah, I see you are wrapping the whole ServletRequest.
In any case, I skimmed through the patch: There is one problem. You don't close ContentStream's InputStream anymore. But there are cases in Solr, where the ContentStream does not come from a Request, but from somewhere else: It could also be the "virtual" stream from the URL param (OK this one does not need to be closed), but it could also be a remote stream e.g,, if you pass a stream.url parameter to the servlet. In that case it is never closed.
This would then be a bug!!! I'd suggest to do the following: Always wrap with CloseShield in DispatchFilter and ignore the close without logging anything (for safety with non-Jetty or later Jetty versions) and revert all other changes in Solr. To me it is unnatural to not close a stream after you have consumed it. I'd also change the consumers to try-with-resources.
The ContentStream tests are using remote streams (actually a file:// URL for testing). So on Windows, tests should fail with a resource leak there.