using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Collections;
using System.Text.RegularExpressions;
using System.Xml;
using Core;
namespace GreenWebService
{
#region MyRegion
/// <summary>
/// 此类为单例模式,实现ip认证,调用方法如果下
/// AuthIP.getInstance(AppDomain.CurrentDomain.BaseDirectory + "App_Data/ipconfig.xml").AuIp("192.168.0.1")
/// 其中AppDomain.CurrentDomain.BaseDirectory + "App_Data/ipconfig.xml"为配置文件xml的路径
/// 192.168.0.1为需要认证的IP地址
/// </summary>
public class AuthIP
{
public const String REGEX_IP = @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$"; //验证ip地址正则表达式
//验证ip段地址正则表达式
public const String REGEX_AREA_IP = @"((25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)-((25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)";
private ArrayList auths = new ArrayList();
private static AuthIP authInstance;
private AuthIP() { }
public static AuthIP getInstance(String filepath)
{
if (null == authInstance)
{
authInstance = new AuthIP();
authInstance.ParseXml(filepath);
}
return authInstance;
}
public bool AuthIp(String ip)
{
if(null == ip || !IsIp(ip))
{
throw new Exception("参数是空的或者参数不是ip");
}
foreach (IAuthIP iau in auths)
{
if (iau.Auth(ip))
{
return true;
}
}
return false;
}
/// <summary>
/// 读取配置文件里的配置信息
/// </summary>
/// <param name="filepath"></param>
private void ParseXml(String filepath)
{
XmlNodeList nlist = XmlHelper.GetAreaString(filepath);
if (nlist.Count < 1) return ;
IAuthIP auth = null;
foreach (XmlNode xn in nlist)
{
if (xn.LocalName == "ip" || xn.LocalName == "ips")
{
auth = new ArrayIAuthIP(xn.InnerText);
auths.Add(auth);
}
else if (xn.LocalName == "areaip")
{
auth = new AreaIAuthIP(xn.InnerText);
auths.Add(auth);
}
}
}
/// <summary>
/// 认证接口,如果要添加新的认证规则 则必须要实现此接口
/// </summary>
public interface IAuthIP {
bool Auth(String ip);
}
private class ArrayIAuthIP : IAuthIP {
private ArrayList authIps;
public ArrayIAuthIP (String tag)
{
authIps = new ArrayList();
Inflater(tag);
}
/// <summary>
/// 转换给定ip规则字符串,如192.168.0.1,192.168.0.1
/// </summary>
/// <param name="tag"></param>
public void Inflater(String tag)
{
if (null == tag || tag == "") return;
String[] strs = tag.Split(',');
foreach (String str in strs)
{
if (IsIp(str))
{
authIps.Add(str);
}
else
{
throw new Exception("请检查配置文件<ip>或者<ips>标签");
}
}
}
public bool Auth(String ip)
{
foreach (String authIp in authIps)
{
if (authIp == ip)
{
return true;
}
}
return false;
}
}
private class AreaIAuthIP : IAuthIP
{
private String areaStr;
public AreaIAuthIP(String tag)
{
Inflater(tag);
}
private void Inflater(string tag)
{
if (null == tag || tag == "") return;
if (IsAreaIp(tag))
{
areaStr = tag;
}
else
{
throw new Exception("请检查配置文件areaip标签");
}
}
public bool Auth(String authIp)
{
if(null == areaStr)
{
return false;
}
String[] areaIps = areaStr.Split('-');
String startIp = areaIps[0];
String endIp = areaIps[1];
String[] startIpArray = startIp.Split('.');
String[] endIpArray = endIp.Split('.');
String[] authIpArray = authIp.Split('.');
long startIpLong = 0L;
long endIpLong = 0L;
long authIpLong = 0L;
for (int i = 0; i < 4; i++ )
{
startIpLong = startIpLong << 8 | Convert.ToUInt32(startIpArray[i]);
endIpLong = endIpLong << 8 | Convert.ToUInt32(endIpArray[i]);
authIpLong = authIpLong << 8 | Convert.ToUInt32(authIpArray[i]);
}
if (startIpLong > endIpLong)
{
long temp = 0L;
temp = startIpLong;
startIpLong = endIpLong;
endIpLong = temp;
}
return startIpLong <= authIpLong && endIpLong >= authIpLong ;
}
}
/// <summary>
/// 检查给定的字符串是否是ip类型
/// </summary>
/// <param name="ip"></param>
/// <returns></returns>
public static bool IsIp(string ip){
return Regex.IsMatch(ip, REGEX_IP);
}
/// <summary>
/// 检查给定的字符串是否是ip段类型
/// </summary>
/// <param name="areaIp"></param>
/// <returns></returns>
public static bool IsAreaIp(String areaIp)
{
return Regex.IsMatch(areaIp , REGEX_AREA_IP);
}
}
#endregion
}
配置文件
<?xml version="1.0" encoding="utf-8"?>
<ipallows>
<ip>192.168.0.1</ip>
<ips>127.0.0.1,127.0.0.2</ips>
<areaip>61.234.145.102-61.235.145.102</areaip>
</ipallows>
分享到:
相关推荐
关于此代码的使用及相关配置,可以见此文:...代码开发时环境:Windows8.1、Visual Studio 2013、IIS8 注意:测试代码时,重新部署WebService服务且修改客户端测试程序的服务引用
2、利用SoapHeader应用Soap扩展。 3、在写WebService时只需加认证标签,客户端调用时传入SoapHeader,即可完成认证。 4、当然你还可以发挥,比如压缩消息,日志记录,Trace之类,网上也有很多文章讲。
本示例“WebService安全性之SoapHeader”关注的是如何在VS2010环境下利用SoapHeader增强Web服务的安全性。Visual Studio 2010是一款强大的开发工具,支持创建、调试和部署各种类型的应用程序,包括Web服务。 在VS...
本文将深入探讨如何在C#环境中为Web Service接口添加SoapHeader认证,这对于初学者来说是一次宝贵的实践。 首先,让我们理解什么是SoapHeader。SoapHeader是SOAP消息的一个组成部分,它提供了扩展功能,允许传递非...
SoapHeader authHeader = new SoapHeader(); authHeader.Name = "Authentication"; authHeader.Namespace = "http://yournamespace.com"; proxy.Headers.Add(authHeader); // 调用服务方法 proxy.YourServiceMethod...
### SOAPHeader 使用详解 SOAP(Simple Object Access Protocol)是一种基于XML的信息交换协议,主要用于Web服务之间的数据通信。在SOAP消息中,SOAPHeader部分用于包含与实际业务数据无关但对消息处理有重要作用的...
调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,通过C#添加Web引用方式访问JavaWebService的方法,除了string...
在这个"soapHeader验证例子"中,我们将探讨如何使用Java和相关工具实现SOAP头验证。 首先,我们需要了解环境:MyEclipse 6.0是一个集成开发环境(IDE),专门针对Java EE应用,而Tomcat 6.x是一个流行的开源Java ...
本示例使用C#构造SOAP信息,通过HttpWebRequest调用java编写的带有Windows身份验证的WebService,代码中详细注释了每行代码的功能与作用; 对应文章:http://blog.csdn.net/cgs_______/article/details/77894599
SoapHeader作为SOAP消息的一部分,常被用于传递额外的控制信息,如认证、授权等,因此,对它进行加密是确保服务安全的关键步骤。本文将深入探讨如何使用SoapHeader进行加密,以及案例中的申明和调用方法。 首先,让...
### C#调用金蝶登录界面(反射)及使用说明 #### 一、概述 本文档将详细介绍如何在C#中通过反射的方式调用金蝶软件的登录界面,并解析登录后返回的一些关键信息,如账户名、用户名、用户ID以及数据库连接字符串等。 ...
在Axis2中,可以通过`SOAPHeader`和`SOAPHeaderBlock`对象来实现。例如,如果你的SOAP Header需要包含认证信息,可以这样做: ```java OMFactory omFactory = OMAbstractFactory.getOMFactory(); OMElement ...
标题与描述均提到了“.NET调用Java XFire发布的WebService封装SOAPHeader头信息”,这是一个涉及跨平台服务调用的问题,具体来说是关于如何在.NET环境中调用由Java使用XFire框架发布的WebService,并正确处理...
在CXF客户端中,我们通常通过`SoapHeader`类来设置和操作这些Header。 1. 添加依赖:在项目中,我们需要引入CXF的相关库。根据描述,这里涉及的jar包有`apache-cxf-3.1.15`和`cxf-manifest.jar`。通常,你可以通过...
如果Web服务端和客户端在不同的域或IP地址上,可能还会涉及到跨域安全和权限认证的问题。此外,在实际部署时还需要考虑网络环境、性能优化和安全加固等因素。 以上知识点总结了在Java中处理SOAPHEADER的Web服务请求...
JAVA 解析 SOAP Header 在 Java 中,SOAP Header 是一种重要的数据结构,它是 Web 服务编程中用于传输数据的标准协议。SOAP Header 中包含了许多重要的信息,如认证信息、交易信息等。下面将详细介绍如何在 Java 中...
SOAPHeader header = context.getMessage().getSOAPPart().getEnvelope().getHeader(); if (header != null) { // 遍历并处理Header中的节点 } return true; } // 其他方法... } ``` ### 客户端创建SOAP ...
soapheader简单的说明,可以使用协议和服务器加载数据
2. **服务端验证**:在服务端,我们需要解析接收到的SOAP请求,提取`SoapHeader`中的安全信息,然后进行验证。这可能涉及到与数据库或其他身份验证服务的交互,以确认提供的凭证是否有效。 3. **客户端设置**:在...
在 ASP.NET 中,为了在 SOAP 请求中添加自定义头部信息,我们需要创建一个类,该类继承自 `SoapHeader` 类。例如,创建一个名为 `UserSoapHeader` 的类,包含用户名(UserName)和密码(Pwd)属性。这些公共属性将...