- 浏览: 158750 次
- 性别:
- 来自: 奥克兰
文章分类
最新评论
-
u012625419:
...
CXF之用spring配置服务端和客户端实例(转) -
bambooshangye:
CXF之用spring配置服务端和客户端实例(转) -
最佳蜗牛:
写的很好,谢谢!
tomcat下的server.xml文件和context.xml (转) -
mohaowen1989:
亲 有中文版的么?在grails基础上的spring-secu ...
Simplified Spring Security with Grails(转) -
douhongyang:
挺好,,思路很清晰,
spring 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>
发表评论
-
Difference between RPC/Document, literal/encoded
2011-12-01 16:39 2327转自 http://www.ibm.com/dev ... -
Java web services: WS-Security with CXF (转)
2011-09-05 17:45 2184This article is refered from h ... -
CXF全接触 --- WS-Security的实现 (转)
2011-09-05 17:36 2318转自 http://blog.csdn.net/kuns ... -
SSL原理解密(转)
2011-07-26 06:47 1551RSA公钥加密在计算机产 ... -
UsernameToken 介绍(转)
2011-04-14 12:39 1780很好的一篇文章,转过 ... -
不同格式证书导入keystore方法(转)
2011-04-14 12:24 2481转自: http://hi.baidu.com/%D3%C ... -
WSDL 规则解释(转)
2011-04-13 11:56 3423转自 http://www.blogjava.net/baoy ... -
深入浅出WS-Addressing(转)
2010-10-28 11:51 12371. 为什么需要 WS-Addressin ... -
WS-Addressing EndpointReference(转)
2010-10-28 11:18 1038WS-Addressing规范主要描述 ... -
WS-Addressing 问题的引出(转)
2010-10-28 11:15 825SOAP 协议定义了在 Web Services 之间传 ... -
WS-Addressing Message Addressing Properties (转)
2010-10-28 11:09 1796相对EndpointReference而言,个人认为在WS-A ... -
SOAP与CORBA,COM/DCOM的区别(转)
2010-09-23 17:49 1778CORBA(Common Object Request Br ... -
Java Web 服务: Axis2 中的 JAXB 和 JAX-WS(转)
2010-09-23 17:41 1300Apache Axis2 支持各种数据 ... -
Web Service简介 (转)
2010-09-23 17:25 7161.定义 由两部分组成 ... -
WSDL & SOAP & Web Service (转)
2010-09-23 17:24 918WSDL 是基于 XML 的用于描述 Web Services ...
相关推荐
而Apache WSS4J(Web Services Secure Utilities for Java)则是Apache软件基金会开发的一个实现WS-Security标准的开源库,它为Java开发者提供了处理和验证Web服务消息安全性的工具。 首先,我们来看一下标题提到的...
2. **WSS4J**:作为CXF中实现WS-Security的库,WSS4J提供了丰富的API,允许开发者在发送和接收Web服务请求时添加安全头信息。这些头信息可以包含用户名令牌、X.509证书、SAML令牌等,以实现不同级别的身份验证和授权...
本文将深入探讨如何使用Ksoap2在Android客户端实现与使用Apache CXF和WSS4J安全框架的Web服务的认证过程。 **Ksoap2库** Ksoap2是一个轻量级的开源库,专门用于Android平台,它允许Android应用通过HTTP/HTTPS协议...
这个过程可能涉及到XML密钥管理、WS-Policy、WSS4J(Web Services Security for Java)等组件的使用,并需要进行详细的配置和调试。 在实现这一过程中,开发者可能需要: 1. **配置CXF**:在CXF的配置文件(如`cxf...
1. **用户名令牌验证**: 用户名和密码可以通过WSS4J添加到SOAP头中,服务器端通过验证这些信息确保请求来源的合法性。 2. **数字签名**: 使用公钥/私钥对,对SOAP消息进行签名,确保消息的完整性和不可篡改性。 3....
4. **添加WSS4J安全配置**:使用WSS4J的拦截器,配置所需的WS-Security功能,如用户名令牌验证、X.509证书验证或SAML令牌等。 5. **客户端调用**:创建CXF的Web服务客户端,可以使用`JaxWsProxyFactoryBean`生成...
WSS4J(Web Services Security for Java)是Apache软件基金会开发的一个关键项目,它为Java开发者提供了一个强大的工具集,用于实现WS-Security(Web Services Security)规范。WS-Security是 Oasis(Organization ...
CXF提供了丰富的安全特性,其中之一就是WS-Security,它可以实现对Web服务调用的双层加密,确保数据在传输过程中的安全。本例将探讨如何使用CXF和WS-Security进行证书加密。 **WS-Security概述** WS-Security(Web ...
【CXF WSSCEURITRY 身份认证demo】是一个关于在WEB服务中使用Apache CXF框架实现WS-Security(Web Services Security)标准的身份验证的示例项目。该示例着重展示了如何在CXF中配置和使用WS-SecureConversation(WS-...
1. **Apache WSS4J**:Apache项目下的一个开源库,用于Java应用程序中的WS-Security实现。 2. **Spring Security**:Spring框架中的一个模块,提供了集成WS-Security的功能。 3. **CXF**:一个开源框架,支持多种Web...
wss4j是Apache CXF项目的一部分,是一个强大的WS-Security实现,支持多种安全策略,如用户名令牌、X.509证书等。 在这个“Hello World”实例中,我们将学习如何配置Spring、xFire和wss4j来创建一个安全的Web服务。...
3. 安全配置:使用WSS4J进行安全配置,这通常涉及到证书管理、用户名令牌、X.509证书等安全策略的设置。 4. 客户端调用:创建一个Spring客户端代理,使用该代理来调用服务端的Web服务,同时处理安全认证的过程。 这...
在CXF中,我们可以使用WS-Security(Web Services Security)标准来实现这一功能,它支持多种安全机制,如用户名令牌、X.509证书和SAML令牌。 在CXF V3.2.4中实现带有安全认证的Web服务调用,我们需要以下步骤: 1...
例如,可以使用`<wsse:Security>`元素来包含认证信息,如用户名令牌(UsernameToken)、X.509证书或 Kerberos 令牌。 对于"简单易懂"的描述,这可能意味着我们将探讨一种相对基础的验证方法,如...
CXF提供了丰富的安全特性,如WS-Security(WS-SecureConversation、WSS-Timestamp等),支持数字签名、加密、用户名令牌、X.509证书等多种安全策略。开发者可以根据需求选择合适的安全方案。 **7. 性能优化与调试**...
用户可以通过配置WSS4J策略来实现基于用户名令牌、X.509证书、SAML令牌等的安全验证机制,确保Web服务通信的安全性。 ### 3. MTOM功能 MTOM(Message Transmission Optimization Mechanism)是一种优化SOAP消息...
这可能涉及到创建和添加WSS4JInInterceptor和WSS4JOutInterceptor,以处理安全令牌。 4. **源码和工具**:标签“源码”和“工具”提示我们可能需要查看具体的代码示例或使用特定的开发工具。例如,使用Eclipse或...
例如,我们可以使用WSS4J(Web Services Security for Java)库来实现这一功能。 描述中提到的博文链接可能详细介绍了如何设置和实现这个示例。通常,实现过程包括以下步骤: 1. **创建SEI**:定义服务端点接口,...
- **WS-Security**:CXF支持基于WSS(Web Services Security)的安全标准,这包括用户名令牌、X.509证书、SAML令牌等。 - **Apache Neethi**:用于处理策略文档,定义服务的安全要求。 - **JAX-WS**:CXF基于JAX-...
<bean id="wss4j" class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor"> <prop key="action">UsernameToken <prop key="passwordType">PasswordText <prop key="wsse.username">username ...