`

CXF使用WSS4J实现WS-Security规范之使用用户名令牌(转)

阅读更多

转自 http://blog.csdn.net/fhd001/archive/2010/09/05/5864413.aspx

 

pom.xml

 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>test.cxf</groupId>
	<artifactId>java_first_spring_support1</artifactId>
	<packaging>war</packaging>
	<name>java_first_spring_support1</name>
	<version>0.0.1-SNAPSHOT</version>
	<description>CXF使用WSS4J实现WS-Security规范之使用用户名令牌</description>
	<properties>
		<cxf.version>2.2.5</cxf.version>
	</properties>
	<build>
		<finalName>java_first_spring_support1</finalName>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<configuration>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
		</plugins>
	</build>
	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring</artifactId>
			<version>2.5.6</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-frontend-jaxws</artifactId>
			<version>${cxf.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-transports-http</artifactId>
			<version>${cxf.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-ws-security</artifactId>
			<version>${cxf.version}</version>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.8.1</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
</project>

 

 

服务接口:

package cxf.server;
import javax.jws.WebService;
@WebService
public interface HelloWorld {
    String sayHi(String name);
}

 

接口实现:

package cxf.server;
import javax.jws.WebService;
@WebService(endpointInterface="cxf.server.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
	@Override
	public String sayHi(String name) {
		
		System.out.println("server: say->" + name);
		return "say-->" + name;
	}
}

 服务端的spring配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
	http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
	<import resource="classpath:META-INF/cxf/cxf.xml" />
	<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
	<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
	<bean id="serverPasswordCallback" class="cxf.server.ServerPasswordCallback" />
	<jaxws:endpoint id="helloworld" implementor="cxf.server.HelloWorldImpl"
		address="/helloworld">
		<jaxws:inInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
			<!-- SAAJInInterceptor只在CXF是2.0.X版本时或之前版本时才是必须的 -->
			<!-- <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="FHDServer" />
						<entry key="passwordCallbackRef">
							<ref bean="serverPasswordCallback" />
						</entry>
					</map>
				</constructor-arg>
			</bean>
		</jaxws:inInterceptors>
	</jaxws:endpoint>
	<!-- 
		action:					UsernameToken				指使用用户名令牌 
    	passwordType:			PasswordText				指密码加密策略,这里直接文本 
    	user:					FHDServer					指别名 
    	passwordCallBackRef:	serverPasswordCallback		指消息验证 
	-->
</beans>

 

服务端的验证:

package cxf.server;
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 {
	@Override
	public void handle(Callback[] callbacks) throws IOException,
			UnsupportedCallbackException {
		WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
		String identifier = pc.getIdentifier();
		String password = pc.getPassword();
		if ("admin".equals(identifier) && "888888".equals(password)) {
			System.out.println("验证通过!");
			System.out.println("identifier = " + identifier);
			System.out.println("password = " + password);
		} else {
			throw new SecurityException("验证失败");
		}
	}
}

 

客户端的spring配置:

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
	http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
	<bean id="clientPasswordCallback" class="cxf.client.ClientPasswordCallback"/>
	<jaxws:client id="client"
		address="http://localhost:8080/java_first_spring_support1/service/helloworld"
		serviceClass="cxf.server.HelloWorld">
		<jaxws:outInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
			<!-- SAAJInInterceptor只在CXF是2.0.X版本时或之前版本时才是必须的 -->
			<!-- <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor"/> -->
			<bean class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
				<constructor-arg>
					<map>
						<entry key="action" value="UsernameToken" />
						<entry key="passwordType" value="PasswordText" />
						<entry key="user" value="FHDClient" />
						<entry key="passwordCallbackRef">
							<ref bean="clientPasswordCallback" />
						</entry>
					</map>
				</constructor-arg>
			</bean>
		</jaxws:outInterceptors>
	</jaxws:client>
</beans>

 客户端的验证:

package cxf.client;
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 ClientPasswordCallback implements CallbackHandler {
	@Override
	public void handle(Callback[] callbacks) throws IOException,
			UnsupportedCallbackException {
		WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
		pc.setPassword("888888");
		pc.setIdentifier("admin");
	}
}

 客户端调用代码:

package cxf.client;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cxf.server.HelloWorld;
public final class Client {
    public static void main(String args[]) throws Exception {
    	
        ClassPathXmlApplicationContext context  = new ClassPathXmlApplicationContext(new String[] {"client-beans.xml"});
        HelloWorld client = (HelloWorld)context.getBean("client");
        String str = client.sayHi("fuhaidong");
        System.out.println("client: " + str);
    }
}

 web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	
	<display-name>java_first_spring_support1</display-name>
	
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:beans.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<servlet>
		<servlet-name>CXFServlet</servlet-name>
		<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>CXFServlet</servlet-name>
		<url-pattern>/service/*</url-pattern>
	</servlet-mapping>
</web-app>
 

 

分享到:
评论

相关推荐

    ws-security 和wss4j的jar包

    而Apache WSS4J(Web Services Secure Utilities for Java)则是Apache软件基金会开发的一个实现WS-Security标准的开源库,它为Java开发者提供了处理和验证Web服务消息安全性的工具。 首先,我们来看一下标题提到的...

    CXF WS-Security WSS4J 例子

    2. **WSS4J**:作为CXF中实现WS-Security的库,WSS4J提供了丰富的API,允许开发者在发送和接收Web服务请求时添加安全头信息。这些头信息可以包含用户名令牌、X.509证书、SAML令牌等,以实现不同级别的身份验证和授权...

    android_ksoap2_cxf_wss4j_authentication

    本文将深入探讨如何使用Ksoap2在Android客户端实现与使用Apache CXF和WSS4J安全框架的Web服务的认证过程。 **Ksoap2库** Ksoap2是一个轻量级的开源库,专门用于Android平台,它允许Android应用通过HTTP/HTTPS协议...

    我的cxf与ws-security

    这个过程可能涉及到XML密钥管理、WS-Policy、WSS4J(Web Services Security for Java)等组件的使用,并需要进行详细的配置和调试。 在实现这一过程中,开发者可能需要: 1. **配置CXF**:在CXF的配置文件(如`cxf...

    Spring集成CXF实例(包含WSS4J安全认证)

    1. **用户名令牌验证**: 用户名和密码可以通过WSS4J添加到SOAP头中,服务器端通过验证这些信息确保请求来源的合法性。 2. **数字签名**: 使用公钥/私钥对,对SOAP消息进行签名,确保消息的完整性和不可篡改性。 3....

    webservice+cxf+wss4j+spring

    4. **添加WSS4J安全配置**:使用WSS4J的拦截器,配置所需的WS-Security功能,如用户名令牌验证、X.509证书验证或SAML令牌等。 5. **客户端调用**:创建CXF的Web服务客户端,可以使用`JaxWsProxyFactoryBean`生成...

    WSS4J-1.5.12

    WSS4J(Web Services Security for Java)是Apache软件基金会开发的一个关键项目,它为Java开发者提供了一个强大的工具集,用于实现WS-Security(Web Services Security)规范。WS-Security是 Oasis(Organization ...

    CXF(WS_Security)证书加密

    CXF提供了丰富的安全特性,其中之一就是WS-Security,它可以实现对Web服务调用的双层加密,确保数据在传输过程中的安全。本例将探讨如何使用CXF和WS-Security进行证书加密。 **WS-Security概述** WS-Security(Web ...

    CXF WSSCEURITRY 身份认证demo

    【CXF WSSCEURITRY 身份认证demo】是一个关于在WEB服务中使用Apache CXF框架实现WS-Security(Web Services Security)标准的身份验证的示例项目。该示例着重展示了如何在CXF中配置和使用WS-SecureConversation(WS-...

    WS-Security构筑安全的SOAP消息调用

    1. **Apache WSS4J**:Apache项目下的一个开源库,用于Java应用程序中的WS-Security实现。 2. **Spring Security**:Spring框架中的一个模块,提供了集成WS-Security的功能。 3. **CXF**:一个开源框架,支持多种Web...

    Spring+xFire+wss4j配置Helloworld完整版,Myeclipse项目服务端+客户端.rar

    wss4j是Apache CXF项目的一部分,是一个强大的WS-Security实现,支持多种安全策略,如用户名令牌、X.509证书等。 在这个“Hello World”实例中,我们将学习如何配置Spring、xFire和wss4j来创建一个安全的Web服务。...

    Spring+xFire+wss4j配置Helloworld完整Demo.rar

    3. 安全配置:使用WSS4J进行安全配置,这通常涉及到证书管理、用户名令牌、X.509证书等安全策略的设置。 4. 客户端调用:创建一个Spring客户端代理,使用该代理来调用服务端的Web服务,同时处理安全认证的过程。 这...

    CXF V3.2.4 实现的WebService调用(带安全认证)

    在CXF中,我们可以使用WS-Security(Web Services Security)标准来实现这一功能,它支持多种安全机制,如用户名令牌、X.509证书和SAML令牌。 在CXF V3.2.4中实现带有安全认证的Web服务调用,我们需要以下步骤: 1...

    ws 加验证消息头

    例如,可以使用`&lt;wsse:Security&gt;`元素来包含认证信息,如用户名令牌(UsernameToken)、X.509证书或 Kerberos 令牌。 对于"简单易懂"的描述,这可能意味着我们将探讨一种相对基础的验证方法,如...

    WebService之CXF开发指南.rar

    CXF提供了丰富的安全特性,如WS-Security(WS-SecureConversation、WSS-Timestamp等),支持数字签名、加密、用户名令牌、X.509证书等多种安全策略。开发者可以根据需求选择合适的安全方案。 **7. 性能优化与调试**...

    CXFServer(集成spring)

    用户可以通过配置WSS4J策略来实现基于用户名令牌、X.509证书、SAML令牌等的安全验证机制,确保Web服务通信的安全性。 ### 3. MTOM功能 MTOM(Message Transmission Optimization Mechanism)是一种优化SOAP消息...

    WebService:Axis客户端调用需要身份验证的CXF服务

    这可能涉及到创建和添加WSS4JInInterceptor和WSS4JOutInterceptor,以处理安全令牌。 4. **源码和工具**:标签“源码”和“工具”提示我们可能需要查看具体的代码示例或使用特定的开发工具。例如,使用Eclipse或...

    使用安全验证的JAX-WS WEB SERVICES示例

    例如,我们可以使用WSS4J(Web Services Security for Java)库来实现这一功能。 描述中提到的博文链接可能详细介绍了如何设置和实现这个示例。通常,实现过程包括以下步骤: 1. **创建SEI**:定义服务端点接口,...

    CXF Web Service 安全认证出错?求大牛解决

    - **WS-Security**:CXF支持基于WSS(Web Services Security)的安全标准,这包括用户名令牌、X.509证书、SAML令牌等。 - **Apache Neethi**:用于处理策略文档,定义服务的安全要求。 - **JAX-WS**:CXF基于JAX-...

    cxf与spring整合,以及webservice传输验证demo

    &lt;bean id="wss4j" class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor"&gt; &lt;prop key="action"&gt;UsernameToken &lt;prop key="passwordType"&gt;PasswordText &lt;prop key="wsse.username"&gt;username ...

Global site tag (gtag.js) - Google Analytics