cxf webservice配置(带超时)

来源:互联网 发布:unity3d 沙盒fps源码 编辑:程序博客网 时间:2024/05/18 08:53

cxf webservice配置(带超时)

 
1.spring配置文件方式测试 
<!-- 客户端密码配置Bean定义 --> 
<bean id="passwordCallback" class="com.creditease.core.ws.client.ClientValidateCallback"> 
<property name="userMap"> 
<map> 
<entry key="abc" value="abc" /> 
</map> 
</property> 
</bean> 

<jaxws:client id="testService" serviceClass="com.creditease.core.ws.client.UserService" 
address="http://localhost:8080/project/services/testService"> 
      <jaxws:outInterceptors> 
<bean class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor"> 
<property name="properties"> 
<map> 
<entry key="action" value="UsernameToken" /> 
<entry key="user" value="admin" /> 
<entry key="passwordType" value="PasswordText" /> 
<entry key="passwordCallbackRef" value-ref="passwordCallback" /> 
</map> 
</property> 
</bean> 
</jaxws:outInterceptors> 
</jaxws:client> 
用户名密码验证类 
Java代码  收藏代码
  1. public class ClientValidateCallback implements CallbackHandler {  
  2.   
  3.     private Map<String, String> userMap = null;  
  4.   
  5.     public void setUserMap(Map<String, String> userMap) {  
  6.         this.userMap = userMap;  
  7.     }  
  8.   
  9.     public void handle(Callback[] callbacks) throws IOException,  
  10.             UnsupportedCallbackException {  
  11.         for (int i = 0; i < callbacks.length; i++) {  
  12.             WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];  
  13.             int usage = pc.getUsage();  
  14.             if (!userMap.containsKey(pc.getIdentifier()))  
  15.                 throw new WSSecurityException("user not exists ");  
  16.             String pass = userMap.get(pc.getIdentifier());  
  17.             if (usage == WSPasswordCallback.USERNAME_TOKEN && pass != null) {  
  18.                 pc.setPassword(pass);  
  19.                 return;  
  20.             }  
  21.         }  
  22.     }  
  23. }  

@Autowired 
private TestService testService; 
2.客户端java代码测试 
Java代码  收藏代码
  1. JaxWsProxyFactoryBean userClient = new JaxWsProxyFactoryBean();  
  2.         userClient.setServiceClass(UserService.class);  
  3.         userClient.setAddress("http://localhost:8080/project/services/testService");  
  4.         // 设置用户名密码  
  5.         Map<String, Object> outProps = new HashMap<String, Object>();   
  6.         outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);   
  7.         outProps.put(WSHandlerConstants.USER, "abc");   
  8.         outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);   
  9.         outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, ClientPasswordCallback.class.getName());   
  10.           
  11.         WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps);   
  12.         userClient.getOutInterceptors().add(wssOut);   
  13.         userClient.getOutInterceptors().add(new SAAJOutInterceptor());   
  14.   
  15.         TestService testService = (TestService) userClient.create();  
  16. // 超时设置  
  17. Client proxy = ClientProxy.getClient(testService);  
  18.         HTTPConduit conduit = (HTTPConduit) proxy.getConduit();   
  19.         HTTPClientPolicy httpClientPolicy =  new  HTTPClientPolicy();     
  20.         httpClientPolicy.setConnectionTimeout(360000);     
  21.         httpClientPolicy.setAllowChunking( false );     
  22.         httpClientPolicy.setReceiveTimeout(320000);     
  23.         conduit.setClient(httpClientPolicy);  
  24.   
  25. 用户名密码验证类  
  26. public class ClientPasswordCallback implements CallbackHandler {  
  27.   
  28.     public void handle(Callback[] callbacks) throws IOException,  
  29.             UnsupportedCallbackException {  
  30.   
  31.         WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];  
  32.         pc.setIdentifier("admin");  
  33.         pc.setPassword("admin");  
  34.     }  
  35.   
  36. }  
0 0
原创粉丝点击