.net WebService拦截器 && android Soap头部验证

1年前 (2017-04-17) wang .NET 0评论 已收录 431℃ 浏览数:116

此文是为了记录在修改一个老旧的项目时,由于webservice可以通过浏览器的地址直接访问后台的方法,由于项目急,于是在每次调用后台方法时进行一次账号密码的验证。来保证安全性。

以下提供了一种将账号密码封装在 android 头部信息Soap里,.net的后台方法每次首先读取头部信息进行账号密码验证,如果验证错误则直接返回,相当于简易的.net WebService拦截器。

1.首先在安卓中定义AuthHead,存储头部信息


//生成调用Webservice方法的SOAP请求信息。该信息由SoapSerializationEnvelope对象描述
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.headerOut = new Element[1];
envelope.headerOut[0] = buildAuthHeader();

......

public static Element buildAuthHeader(){
Element hElement = new Element().createElement(Constants.NAMESPACE, "AuthHead");
Element passwordElement = new Element().createElement(Constants.NAMESPACE, "loginInfo");
passwordElement.setName("loginInfo");

passwordElement.addChild(org.kxml2.kdom.Node.TEXT, "这是头部信息包含的内容");
hElement.addChild(org.kxml2.kdom.Node.ELEMENT, passwordElement);
return hElement;
}

2.在.net WSDL中设置

......
<wsdl:types>  
    <s:schema ...>  
    ......

    <s:element name="AuthHead" type="tns:AuthHead"/>
         <s:complexType name="AuthHead">
            <s:sequence>
              <s:element minOccurs="0" maxOccurs="1" name="loginInfo" type="s:string" />
            </s:sequence>
          <s:anyAttribute />
     </s:complexType>

    ...... 
    </ s:schema >  
</wsdl:types>  

 

3.在.net中定义AuthHead,继承SoapHeader 。

public class AuthHead : SoapHeader
{
      public string loginInfo;
}

 

4.在.net服务器端的Webservice中添加接口


public AuthHead authToken;

......

[WebMethod]
[SoapHeader("authToken")]

public string getSoap()
{
    if (authToken == null)
    {
        return null;
    }else{

       //得到头部信息
       string loginInfo = authToken.loginInfo;

       //进行验证
       .......

     }
}

博主

Just do it. Now or never.

相关推荐

    嗨、骚年、快来消灭0回复。