Hi Arjan,
that's a good question. In Weld, the request object is captured during
request context activation, i.e. during
ServletRequestListener.requestInitialized() notification and before any
filter or servlet is invoked. So wrappers are ignored and the
original/first request is used.
But TBH I don't think we can fix this easily as I'm not aware of any
portable way to listen for "wrapping actions".
Martin
Dne 8.9.2016 v 11:02 arjan tijms napsal(a):
Hi,
The CDI spec defines a built-in bean for the type HttpServletRequest. In
3.8 it says:
"A servlet container must provide the following built-in beans, all of
which have qualifier @Default:
a bean with bean type javax.servlet.http.HttpServletRequest, allowing
injection of a reference to the HttpServletRequest"
An HttpServletRequest however can be wrapped multiple times and by
multiple artefacts. I.e. by a ServerAuthModule, Filter and a
RequestDispatcher.
The question now is; which version of the HttpServletRequest is supposed
to be injected?
* The first one in the chain?
* The last one in the chain?
* The current one at a given point in the chain?
A little bit of experimenting seems to indicate it's now often "one of
the first ones", e.g. the one that happened to be current when e.g. a
ServletRequestListener that initialises a specific CDI implementation is
called.
I think this is a little confusing, as working with an injected request
can now totally ignore the request wrapping that has been done and break
an application badly.
Thoughts?
Kind regards,
Arjan Tijms
_______________________________________________
cdi-dev mailing list
cdi-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/cdi-dev
Note that for all code provided on this list, the provider licenses the code under the
Apache License, Version 2 (
http://www.apache.org/licenses/LICENSE-2.0.html). For all other
ideas provided on this list, the provider waives all patent and other intellectual
property rights inherent in such information.
--
Martin Kouba
Software Engineer
Red Hat, Czech Republic