`
xbcoil
  • 浏览: 126289 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

CXF密码验证_服务端和客户端配置

阅读更多

CXF密码认证是在我前面的一篇文章WebService CXF+struts+spring 示例 的基础上写的.如果你感觉看不懂这篇.那就先看看前面的那篇文章吧!

1:spring服务端的配置

  <bean id="Customer" class="org.web.HelloServiceImpl"></bean>
	<jaxws:endpoint  id="custom"  implementor="#Customer"   address="/web" >
	  	 <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="org.web.ServerPasswordCallback" />  

 

action:UsernameToken 是使用用户令牌

passwordType:PasswordText 是指密码加密策略.这里是直接密码文本.

user:cxfServer 是指别名

passwordCallbackRef:serverPasswordCallback 是这密码验证..类..就是下面配置的..

2: 类:serverPasswordCallback

 

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("wdwsb")&&idf.equals("admin")){
			System.out.println("成功");
		}
		else{
			throw new SecurityException("验证失败");
		}
	}

  这个不用多说..就是密码验证..很简单!!

3:spring客户端的配置:

 

<bean id="webTest" class="org.web.HelloService" factory-bean="client" factory-method="create"/>
	 <bean id="client" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean" >
	 		<property name="address" value="http://127.0.0.1:88/Hello/web/web"></property>
	 		<property name="serviceClass" value="org.web.HelloService"></property>
	 		<property name="outInterceptors">
	 			<list>
					<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />  
		            <bean class="org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor" />  
		            <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="cxfClient" />  
		                        <entry key="passwordCallbackRef">  
		                            <ref bean="clientPasswordCallback" />  
		                        </entry>  
		                    </map>  
		                </constructor-arg>  
		            </bean>  
	 			</list>
		</property>
	 </bean>
	 <bean id="clientPasswordCallback" class="org.web.clientPasswordCallback"></bean>

跟server的配置差不多..没多少要讲的.呵呵...

4: 类clientPasswordCallback的配置

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 {

	public void handle(Callback[] callbacks) throws IOException,
			UnsupportedCallbackException {
		for(int i=0;i<callbacks.length;i++){
			WSPasswordCallback ps=(WSPasswordCallback) callbacks[i];
			ps.setPassword("wdwsb");
			ps.setIdentifier("admin");
		}
	}

   到此为止..密码认证用户令牌就完成了...

测试!

 

通过!

 

当然我前面写的一篇文章是最基本的.缺少了一些jar包.会报错的.

所以要加上以下jar包..

 

 

 

 

  • 大小: 8.4 KB
分享到:
评论
7 楼 zhenglongfei 2013-07-24  
我在客户端设置了callback.setPassword("admin");  
为什么服务端callback.getPassword()为null
??????????????楼主请指导。。。谢谢
6 楼 xbcoil 2011-07-13  
Mybeautiful 写道
例子中 id, password是写死的,
ps.setPassword("wdwsb");  
 ps.setIdentifier("admin");  


如果 我希望是填入当前登陆用户的用户名,密码,怎么办呢?




可以设置变量,传值啊.应该不难.
5 楼 fw_lucifer 2011-07-12  
shibingli 写道
为什么我的pc.getPassword()得到的值为null


试了一下,我也拿不到,但是用set可以比较
看了一下CXF2.4的sample,没看到哪里有用get的,都是用set的
4 楼 shibingli 2011-05-04  
为什么我的pc.getPassword()得到的值为null
3 楼 waitingmyself 2011-04-29  
PasswordDigest类型的时候是设置password,PasswordText类型时是直接验证的
zhouxianglh 写道
serverPasswordCallback这里有问题:
org.apache.ws.security.validate中
WSPasswordCallback pwCb = new WSPasswordCallback(user, null, pwType, 2, data);
 try
 {
       data.getCallbackHandler().handle(new Callback[] { pwCb });
 }

也就是说,在这里要设置password,然后
if (passwordsAreEncoded)
passDigest = UsernameToken.doPasswordDigest(nonce, createdTime, Base64.decode(origPassword));
else {
 passDigest = UsernameToken.doPasswordDigest(nonce, createdTime, origPassword);
}
if (!(passDigest.equals(password))) {
throw new WSSecurityException(5);
}

在这里比两个密码是否一致,之后的操作由框架完成所以
serverPasswordCallback要做的是setPassword,而不是在这里比较.
apache-cxf-2.4.0

2 楼 zhouxianglh 2011-04-29  
serverPasswordCallback这里有问题:
org.apache.ws.security.validate中
WSPasswordCallback pwCb = new WSPasswordCallback(user, null, pwType, 2, data);
 try
 {
       data.getCallbackHandler().handle(new Callback[] { pwCb });
 }

也就是说,在这里要设置password,然后
if (passwordsAreEncoded)
passDigest = UsernameToken.doPasswordDigest(nonce, createdTime, Base64.decode(origPassword));
else {
 passDigest = UsernameToken.doPasswordDigest(nonce, createdTime, origPassword);
}
if (!(passDigest.equals(password))) {
throw new WSSecurityException(5);
}

在这里比两个密码是否一致,之后的操作由框架完成所以
serverPasswordCallback要做的是setPassword,而不是在这里比较.
apache-cxf-2.4.0
1 楼 Mybeautiful 2010-08-04  
例子中 id, password是写死的,
ps.setPassword("wdwsb");  
 ps.setIdentifier("admin");  


如果 我希望是填入当前登陆用户的用户名,密码,怎么办呢?

相关推荐

    Springboot整合CXF发布Web service和客户端调用(用户和密码验证)

    本教程将详细介绍如何利用Spring Boot与CXF进行集成,以发布Web服务并实现用户和密码验证的客户端调用。 首先,我们需要在Spring Boot项目中引入CXF的依赖。这通常通过在`pom.xml`文件中添加对应的Maven依赖来完成...

    使用cxf和spring开发基于https的webservice服务端以及客户端样例

    同时,配置HTTPS需要在CXF的Servlet配置中启用SSL,指定密钥库路径和密码。 客户端开发相对简单,它通过CXF的WSClientAPI动态生成代理对象,调用远程服务。首先,我们需要设置HTTPS的信任管理器,信任服务端的证书...

    cxf webservice简单例子 服务端 客户端

    本教程将基于CXF构建一个简单的Web服务,包括服务端和客户端的实现。我们将使用CXF提供的工具和服务接口来创建服务,然后通过客户端调用来验证服务的正确性。 ### 1. CXF简介 CXF是Apache软件基金会的一个项目,它...

    CXF 通过用户名和密码进行验证

    总结,"CXF 通过用户名和密码进行验证"涉及到了Web服务安全的基本概念,包括WS-Security标准、CXF的安全配置以及最佳实践。理解并正确应用这些知识对于开发安全的Web服务至关重要。提供的压缩包文件"cxftestClient...

    CXF服务端和客户端 应用开发指南

    ### CXF服务端和客户端应用开发指南:详细解析与实践 #### 一、CXF概述与应用场景 CXF(Camel XFire Framework)是Apache软件基金会的一个开源项目,旨在简化Web Services的开发过程,提供了一个强大的框架来创建...

    CXF和Spring整合开发的服务端及客户端

    **标题解析:** "CXF和Spring整合开发的服务端及客户端" 指的是使用Apache CXF框架与Spring框架相结合,构建服务端(服务提供者)和服务端客户端(服务消费者)。CXF是一个开源的Web服务框架,它允许开发者创建和...

    CXF(WS_Security)证书加密

    5. **客户端配置**:同样,客户端也需要配置其证书,并设置如何验证服务端的证书。CXF客户端API允许我们设置这些属性。 6. **测试通信**:最后,通过发起一个带有WS-Security头的SOAP请求,测试加密和认证是否成功...

    Cxf客户端及服务器端,实现客户端和服务器端的权限验证

    2. **客户端配置**: - 配置CXF客户端,添加安全拦截器,如WSS4JOutInterceptor,以添加必要的安全头部。 - 客户端需要提供认证信息,对于基本认证,这可以通过设置HTTP请求头完成;对于WS-Security,可能需要创建...

    Java webservice cxf客户端调用demo和服务端

    Java WebService CXF客户端调用和服务端的实现是企业级应用程序中常见的通信方式,它基于标准的SOAP(Simple Object Access Protocol)协议,提供了一种在分布式环境中交换信息的方法。CXF是一个开源框架,它简化了...

    springboot整合CXF发布webservice和客户端调用

    它允许开发者以Java注解或XML方式定义服务接口,并提供了丰富的客户端和服务端工具。 3. **整合过程** - 首先,我们需要在`pom.xml`中添加CXF和SpringBoot的相关依赖。 - 创建一个服务接口,使用JAX-WS注解如`@...

    cxf+spring开发webservice客户端与服务端实例

    4. 测试:编写测试用例,验证服务端和客户端的正常交互。 六、注意事项 1. 异常处理:在服务端和客户端都要进行适当的异常处理,确保服务的健壮性。 2. 安全性:考虑服务的安全性,如使用HTTPS,认证和授权等。 3. ...

    使用cxf和spring开发基于https的webservice服务端以及客户端样例源码.rar

    9. **源码分析**:提供的源码示例应该包含了服务端和客户端的完整实现,包括Spring配置文件、服务接口和实现类、以及测试代码。通过研究这些代码,可以更深入地理解如何结合CXF和Spring来创建和消费基于HTTPS的Web...

    CXF 添加soap 头部信息.zip_CXF增加soap头验证_bluex8z_cxf_meltedkw7_soap信息头

    将自定义的Interceptor添加到CXF服务端或客户端的配置中。如果是Spring配置,可以在`cxf.xml`文件中添加以下代码: ```xml &lt;cxf:bus&gt; &lt;cxf:outInterceptors&gt; &lt;/cxf:outInterceptors&gt; &lt;/cxf:bus&gt; ``` 4. *...

    CXF开发webservice服务端

    ### CXF 开发 WebService 服务端详解 #### 一、引言 随着企业级应用对服务化的不断追求,Web Service 成为了实现不同系统间通信的重要手段之一。Apache CXF 是一个高性能、易于使用的框架,它支持多种协议,如SOAP...

    spring2.5+xfire1.2.6 客户端和服务端的配置

    `WSSpring`可能包含了Spring配置文件以及与服务相关的类,而`WSTest`可能包含测试用例,用于验证服务端和客户端的正确配置和功能。 总结来说,"spring2.5+xfire1.2.6 客户端和服务端的配置"涉及到的是一项历史性的...

    cxf生成onvif客户端

    5. **处理异常和认证**:ONVIF服务可能需要身份验证,如用户名和密码。你需要在创建服务代理时提供这些凭证。同时,处理可能的SOAP或网络异常也很重要。 6. **测试和调试**:编译并运行你的客户端应用,测试与ONVIF...

    CXF协议WebService+Spring客户端和服务端程序,实现了多数据源动态切换

    测试部分可能包含了一些单元测试或者集成测试,通过运行这些测试可以验证客户端和服务端的交互是否正常。 为了实现多数据源动态切换,项目可能使用了Spring的`AbstractRoutingDataSource`类。这是一个抽象数据源,...

    WebService_CXF_x509

    2. **CXF配置**:在服务端,你需要将生成的证书和私钥添加到服务器的Keystore中,并在CXF的服务器配置中指定Keystore路径和密码。在客户端,需要将信任的证书添加到Truststore,并配置Truststore信息。 3. **安全...

    使用cxf的webservice安全验证

    1. **基本认证**:这是最简单的身份验证方式,涉及到用户名和密码的传递。在CXF中,可以通过在Spring配置文件中添加`&lt;security:basic-authentication&gt;`元素来启用此功能。 2. **Digest认证**:相比基本认证,Digest...

    CXF客户端启动过程

    - 如果服务配置了安全机制(如SSL/TLS、WS-Security),CXF会在客户端启动时进行相应的安全设置,如证书验证、用户名/密码认证等。 通过以上步骤,CXF客户端完成了启动和准备过程,能够向服务端发起请求并处理响应...

Global site tag (gtag.js) - Google Analytics