Glynn, Eoghan wrote:
I can construct a complex graph of interceptors on the server side to send the 401 and the proper realm information.

A complex graph of interceptors just to send a 401?

Can you describe what server-side interceptors chains you needed to
achieve this? If something so simple as rejecting an incoming request
with an auth challenge requires some complex choreography in the
server-side interceptors chains, then we are surely doing something very
wrong in our interceptor/dispatch architecture
Well, I tell you what I did. I am still somewhat naive about this so, please tell me if I have gone astray. This is where I was learning about interceptors, and when handleMessage and handleFault gets called. I think I'm better informed at that now, but I still may be lacking in some aspects.

I set up one Inbound interceptor on the RECEIVE phase to check for the authorization information if present and validate it. If it wasn't there or validated I throw a Fault, which was subclassed to HTTPBAFault, which held the realm identifier.

This Inbound InterceptorChain unwinds through the InboundChain. In handleFault() I tried setting the response code, but that was ineffective, as I realized I was not really manipulating a response here. so I know I couldn't do this entirely in one interceptor. Fair enough.

Throwing the Fault, I found, automatically generates a response message, which seems to know its a"fault" message with a response code of 500 and heads out in an Outbound Fault Interceptor Chain using handleMessage() calls.

I set up a second interceptor that gets installed (dynamically?) on the OutFaultInterceptor chain on the USER_STREAM phase. I discoverd some state saved on the message in the previous interceptor chain, which was the actual HTTPBAFault I threw, which I discovered is available through a Message.getContent(Exception.class) call. Then I changed the response code from 500 to a 401 and had to add the Authorization header with the realm information.

I am not sure if I got the phases right for this sort of thing (I played with these with varying degrees of success and failure), or even if I took the right approach. I may be relying on some technique or information that is coincidental and not guaranteed.

Cheers,
-Polar

Reply via email to