`
xaocaotanghui
  • 浏览: 56077 次
  • 性别: Icon_minigender_1
  • 来自: 广西
文章分类
社区版块
存档分类
最新评论

SOAP header验证WebService接口的访问权限

阅读更多

webService对外提供的服务,在验证客户端访问权限方面,最笨的验证方法应该是在业务方法上面加参数了,这也是之前的做法!发现网上通行的办法是在SOAP协议头增加对用户的验证。实验完总结如下。

 

客户端采用cxf+spring  配置文件如下

 

<jaxws:endpoint id="receptionAdapter" implementor="#itReceptionAdapter"
		address="/resSync/ITReceptionAdapter">
		<jaxws:inInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
			<bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" />
			<bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
				<constructor-arg>
					<map>
						<!--  -->
						<entry key="action" value="UsernameToken" />
						<entry key="passwordType" value="PasswordText" />
						<entry key="user" value="cxfServer" />
						<entry key="passwordCallbackRef">
							<ref bean="serverPasswordCallback" />
						</entry>
					</map>
				</constructor-arg>
			</bean>
		</jaxws:inInterceptors>
	</jaxws:endpoint>

	<bean id="serverPasswordCallback" class="com.ServerPasswordCallback" />

 ServerPasswordCallback相当于filter,代码如下

import java.io.IOException;

import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;

import org.apache.ws.security.WSPasswordCallback;

public class ServerPasswordCallback implements CallbackHandler {

	public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
		WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
		String pw = pc.getPassword();
		String idf = pc.getIdentifier();
		System.out.println("密码是:" + pw);
		System.out.println("类型是:" + idf);
		if (pw.equals("test") && idf.equals("test")) {
			System.out.println("成功");
		} else {
			throw new SecurityException("验证失败");
		}
	}

}

 

客户端采用axis2  生成客户端代码访问

 

ITReceptionAdapterStub adapterStub=new ITReceptionAdapterStub();
		//设置超时
		adapterStub._getServiceClient().getOptions().setTimeOutInMilliSeconds(600000L);
		
		//设置header账号密码
		ServiceClient serviceClient=adapterStub._getServiceClient();
		SOAP11Factory factory=new SOAP11Factory(); 
		OMNamespace SecurityElementNamespace = factory.createOMNamespace("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd",
				"wsse");
		OMElement usernameTokenEl = factory.createOMElement("UsernameToken",SecurityElementNamespace);
		OMElement usernameEl = factory.createOMElement("Username",SecurityElementNamespace);
		OMElement passwordEl = factory.createOMElement("Password",SecurityElementNamespace);
		OMElement actionEl = factory.createOMElement("Action",SecurityElementNamespace);
		passwordEl.addAttribute(factory.createOMAttribute("Type",null,"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"));
		usernameEl.setText("test");
		passwordEl.setText("test");
		usernameTokenEl.addChild(usernameEl);
		usernameTokenEl.addChild(passwordEl);
		usernameTokenEl.addChild(actionEl);
		SOAPHeaderBlockImpl block = new SOAP11HeaderBlockImpl("Security",SecurityElementNamespace, factory);
		block.addChild(usernameTokenEl);
		serviceClient.addHeader(block);
		
		
		ProcessE processE=new ProcessE();
		Process process=new Process();
//		process.setXmldata();
		process.setXmldata(jiFangXml);
		process.setName("test");
		process.setPassword("test");
		processE.setProcess(process);
		ProcessResponseE responseE=adapterStub.process(processE);
		String xml=responseE.getProcessResponse().get_return();
		System.out.println(xml);

 好了,这样既可做到在业务方法之外验证用户的权限,对外的业务方法里面也不会出现对权限的验证,不失为一种好办法 。

ps:网上的参考,加上自己经验,记录在此,备查

分享到:
评论

相关推荐

    采用custom SOAP Header实现的 .NET web service 的权限控制源码例子

    - 优点:自定义SOAP Header提供了灵活的身份验证和授权机制,可以在不修改Web服务接口的情况下增加安全性。 - 缺点:可能会增加SOAP消息的大小,从而影响性能;安全性依赖于传输层安全(HTTPS)来防止中间人攻击。 ...

    Web Service 身份验证1

    - 我们在`WebService`类中定义了一个`MySoapHeader`类型的变量`header`,这是为了在Web Service的方法中可以访问到身份验证信息。 - `[System.Web.Services.Protocols.SoapHeader("header")]`特性用于指示`Hello...

    Domino_webservice应用技巧.docx

    但为了安全考虑,建议限制访问权限,通过SOAP Header传递用户名和密码进行身份验证。这需要在数据库的Access Control List (ACL)中进行设置。 3. **新建Webservice** - **Webservice属性**:为Webservice命名,这...

    android访问webservice

    4. **SOAP请求**:如果Web Service使用SOAP协议,我们需要构建SOAP请求的XML结构,包括SOAP Header和SOAP Body,然后将其作为POST请求的Body发送。Android中可以使用Ksoap2库处理SOAP请求,简化XML构造过程。 5. **...

    PHP Webservice的发布与调用 中文WORD版

    同时,限制访问权限,只允许特定IP地址或经过验证的客户端调用服务。 2. **缓存与性能** - 对于频繁请求但数据不常变的Web服务,可以考虑使用缓存机制,如Memcached或Redis,提高响应速度。 3. **错误处理与日志...

    Android使用webservice客户端实例

    2. **Android网络访问权限**:在AndroidManifest.xml中添加`&lt;uses-permission android:name="android.permission.INTERNET" /&gt;`,这是进行任何网络操作的必要权限。 3. **Ksoap2库**:由于Android原生不支持SOAP...

    VC调用WebServcve安全验证

    "VC调用WebService安全验证"这个主题涉及到如何确保只有经过授权的客户端才能访问和调用Web服务。在本文中,我们将探讨一种基于SoapHeader的自定义安全验证方法,这种方法适用于Visual C++(VC)或者其他.NET平台的...

    Android调用.net webservice数据传递所需类库

    4. **添加Header(可选)**:如果Web Service需要身份验证或其他头部信息,可以使用`envelope.headerOut`添加它们。 5. **设置HttpTransportSE**:创建一个`HttpTransportSE`对象,指定Web Service的URL: ```java ...

    中国联通综合增值业务平台(VASP)接口技术要求:VASP和第三方的接口ParlayX分册

    - **SOAP HEADER定义**:定义了用于身份验证、事务追踪等目的的消息头部。 - **XML Schema数据类型定义**:定义了WebService中使用的数据结构,确保了数据的一致性和有效性。 - **公共异常定义**:明确了当...

    XML Web Service期末复习指南(微软认证)

    18. **HttpMode身份验证和授权**:通过HTTP模式进行身份验证和权限控制,确保服务访问的安全性。 19. **加密**:使用SOAP扩展进行数据加密,保护敏感信息。 20. **正则表达式**:正则表达式是字符串匹配和验证的...

    Android客户端访问服务器端的Web Service所需的KSoap包

    5. **添加Header(可选)**:如果Web Service需要身份验证或其他Header信息,可以在这里添加。 6. **创建HttpTransportSE对象**:这是KSoap2的HTTP客户端,用于发送SOAP请求。 ```java HttpTransportSE ...

    介绍Web Service

    3. **代理者(或称为中介者)**:可选的角色,用于处理一些与业务逻辑无关的任务,如身份验证、权限管理等。通过将这些任务从服务提供者中分离出来,可以使得服务端的代码更加清晰、易于维护。 #### 三、Web ...

    java SOAPHEADER的web service

    它位于SOAP消息的头部区域,可用于验证、授权、消息路由等。在Web服务中,客户端通常需要在SOAPHEADER中添加认证信息,如用户名和密码。 2. 使用Axis生成客户端类包:在Java中,要创建SOAPHEADER的Web服务客户端,...

    BEA portal精华贴

    - **技术细节**:WSRP 使用 WSDL 来定义服务接口,并通过 SOAP 协议进行通信。远程 Portlet 在远程服务器上作为 Web 服务运行,这些服务可以在 UDDI 目录中注册以便于发现和调用。客户端(通常是 Portlet 代理)通过...

Global site tag (gtag.js) - Google Analytics