`
umbrellall1
  • 浏览: 142580 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

webservice android 设置head头发送 获取

阅读更多

android 发送方法

//里面地址对应上面图片的namespace  
		 SoapObject request = new SoapObject("http://webservice.wzkj.com/", "hello"); 
		
		//这个是配置参数  
		        request.addProperty("name","dddddddddddd");  
		  
		          SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);  
		          Element[] header = new Element[1]; 
		          header[0] = new Element().createElement("http://webservice.wzkj.com/","hello"); 
		          header[0].setAttribute("http://webservice.wzkj.com/","token","xiebuqing");   
		          
		          envelope.headerOut=header; 
		          envelope.bodyOut = request;
		          envelope.setOutputSoapObject(request); 
		          // 设置是否调用的是dotNet开发的WebService  
		          envelope.dotNet = false;
		          try {  
		//对应图片上的soap:address   
		              HttpTransportSE androidHttpTransport = new HttpTransportSE("http://127.0.0.1:8080/wzkj/webservice/helloworld");  
		//call的第一个参数对应图片上的soapAction=""  
		              androidHttpTransport.call("", envelope);  
		              SoapObject result = (SoapObject)envelope.bodyIn;  
		//这里我获取第一个数据  
		              System.out.println(result.getProperty(0).toString());  
		          } catch (Exception e) {  
		              e.printStackTrace();  
		          }  




通过抓包工工具获取到格式

<v:Envelope xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:d=\"http://www.w3.org/2001/XMLSchema\" xmlns:c=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:v=\"http://schemas.xmlsoap.org/soap/envelope/\">
<v:Header>
	<n0:hello n0:token=\"xiebuqing\" xmlns:n0=\"http://webservice.wzkj.com/\" />
</v:Header>
	<v:Body>
		<n1:hello id=\"o0\" c:root=\"1\" xmlns:n1=\"http://webservice.wzkj.com/\">
			<name i:type=\"d:string\">
				dddddddddddd
			</name>
		</n1:hello>
	</v:Body>
</v:Envelope>




web 端口发送的格式


<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">
	<soap:Header>
		<tns:RequestSOAPHeader xmlns:tns=\"http://192.168.1.113:8080/wzkj/webservice/helloworld\">
			<tns:spId>
				zhong
			</tns:spId>
			<tns:spPassword>
				guo
			</tns:spPassword>
		</tns:RequestSOAPHeader>
	</soap:Header>
<ns2:hello xmlns:ns2=\"http://webservice.wzkj.com/\">
	<name>
		ddd
	</name>
</ns2:hello>
</soap:Body>
</soap:Envelope>




在head中两个格式不一样需要在获取的时候作解析




/**
 * @FileName   : SOAPAuthIntercepter
 * @Copy Right : WZKJ Technology Ltd
 * @Comments   : soap认证拦截器
 * @Author     :liyulong
 * @Create Date: 2014.6.23
 * @Modified By:
 * @Modified Date:
 * @Why & What is modified
 * @version   : 1.0
 */

package com.wzkj.webservice.auth;

import java.util.List;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;
import org.apache.cxf.binding.soap.SoapHeader;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.binding.soap.saaj.SAAJInInterceptor;
import org.apache.cxf.headers.Header;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.springframework.beans.factory.annotation.Autowired;
import org.w3c.dom.Element;

import com.wzkj.core.util.BlowfishUtil;
import com.wzkj.web.entity.Ciphertext;
import com.wzkj.web.mapper.CipherTextMapper;
public class SOAPAuthIntercepter  extends AbstractPhaseInterceptor<SoapMessage>{
	private SAAJInInterceptor saa = new SAAJInInterceptor();
	public String token;
	@Autowired
	private CipherTextMapper cipherTextMapper;
	public SOAPAuthIntercepter(String phase) {
		super(phase);
	}
	public SOAPAuthIntercepter(){  
		// 指定该拦截器在哪个阶段被激发
		super(Phase.PRE_INVOKE);
	}  
	  
	/**
	 * 处理消息
	 * */
	public void handleMessage(SoapMessage message) throws Fault {
        SOAPMessage mess = message.getContent(SOAPMessage.class);
          //判断消息是否为空
        if (mess == null) {
        	saa.handleMessage(message);
        	mess = message.getContent(SOAPMessage.class);
        }
        
        SOAPHeader head = null;
        try {
        	head = mess.getSOAPHeader();
        } catch (Exception e) {
        	e.printStackTrace();
        }
        
        if (head == null) {
        	throw new Fault(new SOAPException("SOAP消息头格式不对!"));
        }
        
  		// 获取SOAP消息的全部头
  		List<Header> headers = message.getHeaders();
  		if (null == headers || headers.size() < 1) {
  			throw new Fault(new SOAPException("SOAP消息头格式不对!"));
  		}
  		
  		//认证token令牌
  		if(!checkQnameHeader(headers)){
  			throw new Fault(new SOAPException("认证失败"));
  		}
	}

	
	/**
	* 认证token令牌
	* @param headers 消息体
	* @return boolean
	*/
	private boolean checkQnameHeader(List<Header> headers) {
		SoapHeader soapHeader = (SoapHeader) headers.get(0);
		Element element = (Element) soapHeader.getObject();
  		String token = element.getAttribute("n0:token");
  		Ciphertext cipher = cipherTextMapper.getById(1);
  		BlowfishUtil chiper = new BlowfishUtil(cipher.getKey());
  		String value = chiper.decryptString(token);
		return value.equals(cipher.getText());
	}

	public String getToken() {
		return token;
	}

	public void setToken(String token) {
		this.token = token;
	}
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics