Thanks for that tip. Unfortunately my custom HttpAuthSupplier is only called 
once (before the request is triggered). No matter whether I return null or the 
empty string in my getAuthorization method my HttpAuthSupplier is not called a 
second time. The reason is that the underlying close method on the HTTPConduit 
is never called, therefore handleRetransmits on the WrappedOutputStream is 
never called.
What am I doing wrong?
In my case there is no WWW-Authorize response header being used but just a 
plain 401 status to indicate that authentication should be triggered.
Internally I am using a JAX-RS Client proxy which always fails with
javax.ws.rs.NotAuthorizedException: HTTP 401 Unauthorized
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at 
org.apache.cxf.jaxrs.client.AbstractClient.convertToWebApplicationException(AbstractClient.java:504)
        at 
org.apache.cxf.jaxrs.client.ClientProxyImpl.checkResponse(ClientProxyImpl.java:314)
        at 
org.apache.cxf.jaxrs.client.ClientProxyImpl.handleResponse(ClientProxyImpl.java:793)
        at 
org.apache.cxf.jaxrs.client.ClientProxyImpl.doChainedInvocation(ClientProxyImpl.java:755)
        at 
org.apache.cxf.jaxrs.client.ClientProxyImpl.invoke(ClientProxyImpl.java:228)
...

Thanks for any help,
Konrad


> On 19 Oct 2016, at 12:32, Sergey Beryozkin <[email protected]> wrote:
> 
> Hi
> 
> AFAIK, CXF HttpConduit will attempt a re-transmit if 401 is returned and a 
> custom CXF HttpAuthSupplier is registered.
> 
> For example, see
> 
> https://github.com/apache/cxf/blob/master/rt/rs/security/oauth-parent/oauth2/src/main/java/org/apache/cxf/rs/security/oauth2/client/BearerAuthSupplier.java
> 
> In your custom supplier you'd override:
> public String getAuthorization(AuthorizationPolicy authPolicy,
>                                   URI currentURI,
>                                   Message message,
> String fullHeader) {}
> 
> perhaps you'd do the extra calls inside this method before returning the 
> final Authorization value for the original request to continue
> 
> Sergey
> 
> 
> 
> 
> On 17/10/16 08:45, Konrad Windszus wrote:
>> I want to call a ReST web service with a JAX-RS client based on CXF. That 
>> web service has a custom authentication based on cookies and 
>> challenge/response authentication. To get authenticated (i.e. whenever a 
>> regular call returns a 401) a dedicated GET request must be issued to get 
>> the challenge, and then an additional POST request to authenticate the user 
>> (and get back an authentication token as cookie). Instead of doing the 
>> authentication explicitly I would rather call that whenever necessary (to 
>> also deal with cases where previous authentication became invalid), i.e. as 
>> Interceptor or as Filter. The question is, how do I retrigger the original 
>> request once the user has been successfully authenticated in a 
>> ClientResponseFilter or Interceptor in case a 401?
>> Has someone ever implemented something like this?
>> Thanks,
>> Konrad
>> 
> 
> 
> -- 
> Sergey Beryozkin
> 
> Talend Community Coders
> http://coders.talend.com/

Reply via email to