Well, once again, thanks a lot!

I'll continue to use the Interceptors, since the code is working, but
the context thing was exactly what I was lookin for.



On Fri, May 2, 2008 at 9:46 PM, Daniel Kulp <[EMAIL PROTECTED]> wrote:
>
>
>  Note: this is probably not thread safe.   Interceptors are "shared" by all
>  invokations on the endpoint.  Thus, the interceptor needs to make sure it
>  doesn't maintain state (like the Principal object) in an instance variable
>  that might be wiped out by an invokation being processed on another thread.
>
>  To answer your other question...
>  Assuming JAX-WS on server side, in your service implementation, add:
>  @Resource
>  WebServiceContext context;
>  as an instance field.   The runtime will inject a WebServiceContext instance
>  in there.   After that, in your interceptor, do something like:
>  message.put("USER_NAME", principal.getName());
>
>  Then, in your impl, do:
>
>  String user = (String)context.getMessageContext().get("USER_NAME");
>
>  You might even be able to do what you need without any interceptor.   The
>  WebServiceContext basically wrappers the message.   Thus, you may be able to
>  just do:
>  context.getMessageContext().get(WSHandlerConstants.RECV_RESULTS)
>  in your service impl to get the Vector there.
>
>  Dan
>
>
>
>
>
>  marcelo melo-2 wrote:
>  >
>  > Actually I was able to retrive the certificate via an Interceptor, on
>  > the handleMessage of the Interceptorm here's what I did:
>  >
>  >       Vector result = (Vector)
>  > message.getContextualProperty(WSHandlerConstants.RECV_RESULTS);
>  >       for (int i = 0; i < result.size(); i++) {
>  >           WSHandlerResult res = (WSHandlerResult) result.get(i);
>  >           for (int j = 0; j < res.getResults().size(); j++) {
>  >               WSSecurityEngineResult secRes = (WSSecurityEngineResult)
>  > res.getResults().get(j);
>  >
>  >               X500Name principal = (X500Name) secRes.get("principal");
>  >               if(principal != null) {
>  >                   this.setUser(principal.getName());
>  >                   break;
>  >               }
>  >           }
>  >
>  > This gives me the pricipal stored on the certificate, which is enough
>  > for me. I did not try you method 'cause I was not sure where I would
>  > put the code, but thanks anyway
>
>
> >
>  >
>  > On Thu, May 1, 2008 at 5:33 AM, O hEigeartaigh, Colm
>  > <[EMAIL PROTECTED]> wrote:
>  >>
>  >>  The WSS4JInInterceptor attaches the X509 certificate that was used for
>  >>  signature to the message with:
>  >>
>  >>  WSSecurityEngineResult actionResult =
>  >>     WSSecurityUtil.fetchActionResult(wsResult, WSConstants.SIGN);
>  >>  msg.put(SIGNATURE_RESULT, actionResult);
>  >>
>  >>  You can access this downstream by doing something like:
>  >>
>  >>  WSSecurityEngineResult result =
>  >>   (WSSecurityEngineResult)
>  >>  inmsg.get(WSS4JInInterceptor.SIGNATURE_RESULT);
>  >>
>  >>  X509Certificate certificate =
>  >>     (X509Certificate)result
>  >>             .get(WSSecurityEngineResult.TAG_X509_CERTIFICATE);
>  >>
>  >>  You can manipulate this X509Certificate object to get what you want I
>  >>  think.
>  >>
>  >>  Colm.
>  >>
>  >>
>  >>
>  >>  -----Original Message-----
>  >>  From: marcelo melo [mailto:[EMAIL PROTECTED]
>  >>  Sent: 01 May 2008 01:40
>  >>  To: [email protected]
>  >>  Subject: Retrieve the user using WS-Security and Signature
>  >>
>  >>  Hi all,
>  >>
>  >>  I am developing a service using signatures only, with no user-password
>  >>  authentication. However, when developing a Client, I am forced to set
>  >>  a user in order to invoke the service. Is there a way of retrieving
>  >>  the user on the server side (for auditing purposes)?
>  >>  I tried to use a password callback handler, which succesfully
>  >>  retrieved me the user, but required me to correctly inform a password,
>  >>  which I don't (at least won't if the key is not generated by me) know.
>  >>  Also, if someone could give me an insight of how, if possible, to use
>  >>  this user on my service class, I would be very grateful.
>  >>
>  >>  Thanks
>  >>
>  >>  ----------------------------
>  >>  IONA Technologies PLC (registered in Ireland)
>  >>  Registered Number: 171387
>  >>  Registered Address: The IONA Building, Shelbourne Road, Dublin 4,
>  >> Ireland
>  >>
>  >
>  >
>
>  --
>  View this message in context: 
> http://www.nabble.com/Retrieve-the-user-using-WS-Security-and-Signature-tp16994689p17030305.html
>  Sent from the cxf-user mailing list archive at Nabble.com.
>
>

Reply via email to