Hi Hermann

if we rely on the runtime (ex, HttpUrlConnection) setting some of those headers then no, they can not be read. If the client filters have an idea of what Host, User-Agent, etc has to be set to then they can indeed set them and get those values signed too.


Sergey

On 14/01/15 09:46, Hermann Angstl wrote:
Hello,

sorry for the late follow-up ;-)

Re:
Most of these headers can be set from the filter itself, or from HttpConduit, 
...

Setting headers is not my problem. I want to READ them.

When I try to access the headers in filters, interceptors, etc. all I get in the PROTOCOL_HEADERS 
is "Content-Type" and "Accept".

Is there a way to have READ access to headers like "Host", "Date", 
"User-Agent", etc. ?

I'd like to read those, do some checksum/signature voodoo magic with them - and 
then store it as a new header in the message.

cheers,
Hermann


-----Original Message-----
From: Sergey Beryozkin [mailto:[email protected]]
Sent: Montag, 22. Dezember 2014 13:23
To: [email protected]
Subject: Re: Signing HTTP Requests in JAX-RS

Hi Hermann
On 22/12/14 11:35, Hermann Angstl wrote:
I'd like to sign HTTP Requests (similar to this 
https://tools.ietf.org/html/draft-ietf-oauth-signed-http-request-00).

Therefore I need access to HTTP-Header fields like "Content-Length", "Host", "Date", 
"User-Agent", etc.

I tried using ClientRequestFilter, WriterInterceptor and 
AbstractPhaseInterceptor (with a very late phase (Phase.SEND)) to implement 
this functionality - but it seems the HTTP Headers are set very late - and are 
out of my reach.

All I get in the PROTOCOL_HEADERS is "Content-Type" and "Accept".

Does CXF provide a functionality to have access to this kind of information (in 
an interceptor)?

Wheather or not my use case makes sense - imho it generally would be
nice to have this functionality ;-)


Most of these headers can be set from the filter itself, or from HttpConduit, 
for example, I've checked an HttpClientPolicy class, and it supports setting 
headers like Host, Connection, etc... User-Agent can be set from a filter if 
preferred.

Content-Length can be set too if an entity is byte[] or if the entity out 
stream is cached - in the latter case you'd check the cached content length, 
set Content-Length, and only then write the cached entity bytes out. You may 
still need to disable the chunked encoding though to ensure the low-level 
transport mechanism does not interfere if the chunked encoding is enabled...

So basically pretty much any HTTP Header can be set from the code - however in 
some cases in can be problematic, for example, if you send a 1MB PDF then 
caching it in order to get Content-Length in advance won;t be effective; may be 
not an issue if the payloads are generally small...

FYI I've also asked for the clarifications be added to the draft re which 
headers can be dropped during the signing process


Thanks, Sergey

cheers,
Hermann



Reply via email to