Van, 2 parts: 1) Issue of opName being null - I just checked the RPCInInterceptor and it isn't setting a bunch of stuff that the DocLitInInterceptor is setting. WSDL_OPERATION is one that it's not setting. :-( I'll get those fixed tomorrow.
2) AuthorizationPolicy is null - not sure on that one. That is provided but the transport if there is an Authorization header present. Is there anyway you can TCPdump/wireshare the raw request and see if there is an Authorization header? The code looks OK, although I must admit I've never done it that way. I've always used the standard JAX-WS API for setting the username/password for basic auth: BindingProvider bp = (BindingProvider)port; bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "BJ"); bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "pswd"); Dan On Tuesday 28 August 2007, Van Nguyen wrote: > Dan, > > I'm giving this a shot and am having some difficulties with the > AuthorizationInterceptor finding the AuthorizationPolicy object. > > My Web Services looks something like this: > > @WebService(name = "productSearchService") > @SOAPBinding(style = Style.RPC, use = Use.LITERAL) > @WebFault(targetNamespace = "http://webservices.ur.com/types", name = > "productSearchException", faultBean = > "com.ur.webservices.webfaults.ProductSearchServiceFault") > @InInterceptors(interceptors={"com.ur.webservices.security.Authorizati >on Interceptor"}) > public interface ProductSearch > { > public Item getItem(String itemNumber) > } > > Using the wsdl2java command, it created the java classes needed to > call this web service: > > ProductSearchImplService ss = new > ProductSearchImplService(wsdlURL, SERVICE_NAME); > ProductSearchService port = ss.getProductSearchImplPort(); > > Client client = ClientProxy.getClient(port); > HTTPConduit httpConduit = (HTTPConduit)client.getConduit(); > AuthorizationPolicy policy = new AuthorizationPolicy(); > policy.setPassword("vnguyen"); > policy.setPassword("myPassword"); > httpConduit.setAuthorization(policy); > > Calling port.getItem("1234"), brings me into the > AuthorizationInterceptor... but both the AuthorizationPolicy and > opName are null - I also assumed you meant to write: > String opName = (String)message.get(Message.WSDL_OPERATION); > > Any ideas? > > Thanks, > > Van Nguyen > United Rentals, Inc > [EMAIL PROTECTED] > (949) 225-6553 > > -----Original Message----- > From: Daniel Kulp [mailto:[EMAIL PROTECTED] > Sent: Tuesday, August 28, 2007 10:27 AM > To: [email protected] > Cc: Van Nguyen > Subject: Re: Method level authentication? > > > Van, > > The answer is both yes and no. > > CXF doesn't have anything "built in" that would provide that > capability. > > However, it would be very easy to write an interceptor that would: > > > public class AuthorizationInterceptor extends > AbstractPhaseInterceptor<Message> { > > public AuthorizationInterceptor() { > super(Phase.USER_LOGICAL); > } > > public void handleMessage(Message message) throws Fault { > AuthorizationPolicy policy = > message.get(AuthorizationPolicy.class); > String opName = (String)message.put(Message.WSDL_OPERATION); > > //use username/passwords from AuthorizationPolicy to validate. > //Throw a fault or similar if processing should not continue. > } > } > > > There is also: > message.get(SecurityContext.class); > which can provide the principal object and checks for isUserInRole if > your deployment environment (tomcat/etc...) supports configurations of > users and roles on that level. > > Dan > > On Tuesday 28 August 2007, vannguyen0 wrote: > > Hi, > > > > I'm fairly new to webservices and was wondering if CXF has the > > ability to restrict users to certain web services methods. If I > > have PerformProductSearch and UpdateProductInformation, I want to > > allow user A (or users that is in user group A) permission to only > > PerformProductSearch. But user B (or users that are in user group B) > > can access to both methods. > > > > Thanks, > > > > Van -- J. Daniel Kulp Principal Engineer IONA P: 781-902-8727 C: 508-380-7194 [EMAIL PROTECTED] http://www.dankulp.com/blog
