Mule ESB 学习笔记(14)CXF SOAP基于UsernameToken的验证

阅读更多

 简单需求:

         针对在webservice中一些商业数据的机密性采用加密等验证的方式实现,这里主要说明soap使用UsernameToken的验证方式.

mule-config.xml配置:



    
        
        
        
    

    
        
        
            
                
                    
                    
                
            
        
        
    

 

 

package com.mulesoft.mule.soap.security;

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

@WebService
public interface Greeter
{
    @WebResult(name="name")
    public String greet(@WebParam(name="name") String name);
}

 

 

package com.mulesoft.mule.soap.security;

public class GreeterService implements Greeter
{
    public String greet(String name)
    {
        return "Hello " + name;
    }
}

 

 

回调类:

package com.mulesoft.mule.soap.security;

import java.io.IOException;

import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;

import org.apache.ws.security.WSPasswordCallback;
/**
 * 
 * 

功能描述,该部分必须以中文句号结尾。

* * 创建日期 2013-8-27
* @author $Author$
* @version $Revision$ $Date$ * @since 3.0.0 */ public class PasswordCallback implements CallbackHandler { public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { WSPasswordCallback pc = (WSPasswordCallback) callbacks[0]; if (pc.getIdentifier().equals("joe")) { pc.setPassword("secret"); } else if (pc.getIdentifier().equals("stan")) { pc.setPassword("elephant"); } } }

 

 

服务端测试

public class MuleServerApp {
      public static void main(String[] args) throws MuleException {
    	  String configFile = "mule-config.xml";
          System.setProperty("mule.verbose.exceptions","true");
          String[] configFileArr = new String[] {configFile };
          MuleContextFactory muleContextFactory = new DefaultMuleContextFactory();
          MuleContext muleContext = muleContextFactory
                  .createMuleContext(new SpringXmlConfigurationBuilder(configFileArr));
          muleContext.start();
      }
}

 

客户端测试

package com.mulesoft.mule.soap.test;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;

import com.mulesoft.mule.soap.security.Greeter;
import com.mulesoft.mule.soap.security.PasswordCallback;
/**
 * 
 * 

功能描述,该部分必须以中文句号结尾。

* * 创建日期 2013-8-27
* @author $Author$
* @version $Revision$ $Date$ * @since 3.0.0 */ public class MuleSecureClient { public static void main(String[] args) throws Exception { Greeter service1 = createService("http://localhost:63082/services/unsecure?wsdl", null); System.out.println(service1.greet("Mule")); Greeter service2 = createService("http://localhost:63082/services/username?wsdl", getUsernameTokenProps("UsernameToken Timestamp")); System.out.println(service2.greet("Mule")); } protected static Map getUsernameTokenProps(String action) { Map wss4jProps = new HashMap(); //设置请求时候的参数信息 wss4jProps.put("action", action); wss4jProps.put("user", "joe"); //回调类 wss4jProps.put("passwordCallbackClass", PasswordCallback.class.getName()); return wss4jProps; } public static Greeter createService(String url, Map wss4jProps) { URL wsdlDocumentLocation; try { wsdlDocumentLocation = new URL(url); } catch (MalformedURLException e) { throw new RuntimeException("Invalid test definition", e); } QName serviceName = new QName("http://security.soap.mule.mulesoft.com/", "GreeterService"); Service dynService = Service.create(wsdlDocumentLocation, serviceName); Greeter service = dynService.getPort(Greeter.class); Client client = ClientProxy.getClient(service); if (wss4jProps != null) { client.getOutInterceptors().add(new WSS4JOutInterceptor(wss4jProps)); } return service; } }

 

你可能感兴趣的:(Mule,ESB,SOA,SOAP,UsernameToken,WebService认证)