用cxf做用户名和密码的检测
在server端,主要为得到JaxWsServerFactoryBean后配置Interceptors,
<code>
......
JaxWsServerFactoryBean svrFactory = new JaxWsServerFactoryBean();
......
Map<String, Object> inProps = new HashMap<String, Object>();
inProps.put(WSHandlerConstants.ACTION,WSHandlerConstants.USERNAME_TOKEN);
inProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
inProps.put(WSHandlerConstants.PW_CALLBACK_CLASS,
ServerPasswordHandler.class.getName());
WSS4JInInterceptor wssIn = new WSS4JInInterceptor(inProps);
svrFactory.getInInterceptors().add(wssIn);
svrFactory.getInInterceptors().add(new SAAJInInterceptor());
......
其中ServerPasswordHandler为真正的用户名密码检查处。
public class ServerPasswordHandler implements CallbackHandler {
@Override
public void handle(Callback[] callbacks) throws IOException,
UnsupportedCallbackException {
WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
if (pc.getIdentifer().equals("userName")) {
if (!pc.getPassword().equals("password")) {
throw new RuntimeException("security error.");
}
} else {
throw new RuntimeException("security error.");
}
}
}
在client端基本和server端对称,只要在client端配置Interceptors就可以工作了。
<code>
.......
JaxWsProxyFactoryBean factory=......;
.......
Map<String, Object> outProps = new HashMap<String, Object>();
outProps.put(WSHandlerConstants.ACTION,
WSHandlerConstants.USERNAME_TOKEN);
outProps.put(WSHandlerConstants.USER, "userName");
outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS,
ClientPasswordCallback.class.getName());
WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps);
factory.getOutInterceptors().add(wssOut);
factory.getOutInterceptors().add(new SAAJOutInterceptor());
其中ClientPasswordCallback实际配置password的地方。
public class ClientPasswordCallback implements CallbackHandler {
public void handle(Callback[] callbacks) throws IOException,
UnsupportedCallbackException {
WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
pc.setIdentifier("userName");
pc.setPassword("password");
}
}
PS:outProps.put(WSHandlerConstants.USER, "userName");一定要设置,即使后来它会被
pc.setIdentifier("userName");
pc.setPassword("password");
覆盖掉。
分享到:
相关推荐
标题中的"CXF 通过用户名和密码进行验证"指的是在使用Apache CXF框架开发Web服务时,如何实现基于用户名和密码的身份验证。Apache CXF是一个开源的Java框架,它用于创建和消费SOAP和RESTful Web服务。这里的验证过程...
java CXF客户端请求ERP SAP webservice通过用户名和密码验证功能!
这样,客户端就可以通过提供的用户名和密码来调用服务端的方法了。 总结起来,Spring Boot整合CXF发布Web服务和实现用户密码验证的客户端调用主要包括以下步骤: 1. 引入CXF和Spring Security依赖。 2. 定义并实现...
SpringBoot整合CXF并实现用户名密码...在这个示例中,我们只是简单地实现了用户名密码校验,但是在实际项目中,我们可能需要使用更加复杂的校验机制,例如使用数据库来存储用户名和密码,或者使用OAuth2进行身份验证。
我们需要创建该拦截器并设置适当的属性,如`wsse:UsernameToken`用于用户名和密码认证,或者`wsse:Security`用于更复杂的认证机制。 ```java WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(); HashMap,...
例如,可以使用X.509证书进行客户端和服务器端的身份验证,或者使用UsernameToken来传递用户名和密码。此外,还可以使用加密和签名策略来保护消息内容。 为了实现这些功能,我们需要进行以下步骤: 1. **服务器端...
1. **基本认证**:这是最简单的身份验证方式,涉及到用户名和密码的传递。在CXF中,可以通过在Spring配置文件中添加`<security:basic-authentication>`元素来启用此功能。 2. **Digest认证**:相比基本认证,Digest...
本篇文章将详细介绍如何使用CXF和camel-cxf调用Web服务,以及这两个工具的核心功能和使用场景。 Apache CXF是一个全面的服务开发框架,它支持多种Web服务标准,如SOAP、WS-*协议栈、RESTful服务等。CXF提供了丰富的...
JAVA7和JAVA8对应CXF资源 WebService CXF 用了一天时间找,官网打不开,国内要积分,下下来又永不了。最后终于搞到手,上传上来分享给大家。 jdk版本 CXF版本 java 9及以上 3.3.x java 8 3.x java 7 2.2x --- ...
1. **基本认证**:基于HTTP的基本认证,需要提供用户名和密码。CXF可以通过设置`<http-basic>`元素来启用此功能。 2. **digest认证**:比基本认证更安全,因为它不直接传输密码。CXF同样支持通过`<http-digest>`...
【标题】"RCP和CXF做的例子"指的是一个基于 Rich Client Platform (RCP) 和 Apache CXF 的应用程序示例。RCP 是 Eclipse 平台的一部分,它提供了一个框架,用于构建功能丰富的桌面应用程序。而 CXF 是一个开源服务...
- 官方文档:Apache CXF和SpringBoot的官方文档提供了详细的配置和使用指南。 - 社区论坛:Stack Overflow和其他技术社区有很多关于SpringBoot+CXF整合的问题和解答,可以作为参考。 6. **调试与测试** - 使用`...
【标题】"02.CXF功能概述_CXF发展历史和使用CXF开发WebService服务器端"主要探讨了Apache CXF框架在Web服务领域的应用及其发展历程,同时也涵盖了如何利用CXF来构建一个高效的WebService服务器端。 Apache CXF是一...
【标题】"用CXF开发SOAP接口"涉及的是在Java环境中使用Apache CXF框架来创建、实现和消费基于SOAP(Simple Object Access Protocol)的Web服务。SOAP是一种用于交换结构化和类型化的信息的协议,常用于企业级应用...
【标题】"cxf+ws-security-JAR"指的是Apache CXF框架与WS-Security整合创建的JAR包,用于在Web服务(Web Service)中实现基于用户名和密码的身份验证安全调用。 【描述】该描述指出,这个项目是关于如何使用Apache ...
2. **设置WS-Security策略**:使用WS-Policy表达安全需求,如必须提供用户名和密码、使用特定的加密算法等。 3. **处理令牌**:根据安全策略,可能需要处理不同类型的令牌,如用户名令牌(UsernameToken)和X.509...
这篇博客文章(尽管描述为空,但可以从博文链接中获取更多信息)可能涵盖了使用CXF框架创建和部署Web服务的基本步骤,以及如何在Spring环境中集成CXF。CXF与Spring的结合使用,使得服务的生命周期管理变得更加简单,...
客户端配置包括使用`WSS4JOutInterceptor`拦截器和`ClientPasswordCallback`类来加载用户名和密码,而服务端则使用`WSS4JInInterceptor`拦截器和`ServerPasswordCallback`类来验证传入请求的用户身份。 在客户端,`...
Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构。它允许创建高性能和可扩展的服务,您可以将这样的服务部署在 Tomcat 和基于 Spring 的轻量级容器中,以及部署在更高级的...