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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//生成调用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;
}

二、在.net WSDL中设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
......
<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>

三、在.net中定义AuthHead,继承SoapHeader

1
2
3
4
public class AuthHead : SoapHeader
{
public string loginInfo;
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public AuthHead authToken;

......

[WebMethod]
[SoapHeader("authToken")]

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

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

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

}
}

# .NET

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×