- 浏览: 109911 次
- 性别:
- 来自: 沈阳
文章分类
最新评论
-
ipuhua:
写得很好,很详细。感谢!!
axis和cxf客户端对cxf服务器的访问及常见问题 -
sucheng2016:
webservice安全之cxf用wss4j加密 -
boolean2011:
大哥,有没有axis调用cxf服务端的例子呢
axis和cxf客户端对cxf服务器的访问及常见问题 -
zqb666kkk:
楼主,源代码也发一份,谢谢。6637152@qq.com
webservice安全之cxf用wss4j加密 -
maihemude:
479330473@qq.com麻烦发一下源码
webservice安全之cxf用wss4j加密
wss4j是在ws-security规范基础上对axis的安全应用。同样也可用于CXF上,本章讲在cxf上的使用,之后会讲解在axis上应用。
首先要生成公钥和密钥我在可以放在bat文件中放在项目中,此方式是自动生成的。
在项目中建立key文件夹,之后放入key.bat和serverKey.bat两个bat文件
key.bat内容如下:
rem @echooff
echo alias%1
echo keypass%2
echo keystoreName%3
echo KeyStorePass%4
echo keyName%5
echo keyName%5
keytool -genkey -alias %1 -keypass %2 -keystore %3 -storepass %4 -dname "cn=%1" -keyalg RSA
keytool -selfcert -alias %1 -keystore %3 -storepass %4 -keypass %2
keytool -export -alias %1 -file %5 -keystore %3 -storepass %4
serverKey.bat内容如下:注意一定将项目的工程空间加上
call workspace/cxfSecurity/key/key.bat serverAlias aliaspass workspace/cxfSecurity/key/serverStore.jks keystorePass workspace/cxfSecurity/key/serverKey.rsa
call workspace/cxfSecurity/key/keybat client-344-839 client344Password workspace/cxfSecurity/key/clientStore.jks keystorePass workspace/cxfSecurity/key/clientKey.rsa
keytool -import -alias serverAlias -file workspace/cxfSecurity/key/serverKey.rsa -keystore workspace/cxfSecurity/key/clientStore.jks -storepass keystorePass -noprompt
keytool -import -alias client-344-839 -file workspace/cxfSecurity/key/clientKey.rsa -keystore workspace/cxfSecurity/key/serverStore.jks -storepass keystorePass -noprompt
之后生成的clientStore.jks和serverStore.jks文件考到src目录下
建立两个outsecurity_sign.properties和server_insecurity_sign.propertues文件放在client的目录下和src目录下
内容如下:
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
org.apache.ws.security.crypto.merlin.keystore.type=jks
org.apache.ws.security.crypto.merlin.keystore.password=keystorePass
org.apache.ws.security.crypto.merlin.alias.password=client344Password
org.apache.ws.security.crypto.merlin.keystore.alias=client-344-839
org.apache.ws.security.crypto.merlin.file=clientStore.jks
另一个
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
org.apache.ws.security.crypto.merlin.keystore.type=jks
org.apache.ws.security.crypto.merlin.keystore.password=keystorePass
#org.apache.ws.security.crypto.merlin.alias.password=aliaspass
org.apache.ws.security.crypto.merlin.keystore.alias=serveralias
org.apache.ws.security.crypto.merlin.file=serverStore.jks
配置clientApplicationContext.xml文件
<?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="client" class="jp.co.apm.service.impl.TestServiceImpl" factory-bean="clientFactory" factory-method="create"/>
<bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
<property name="serviceClass" value="jp.co.apm.service.TestService">
</property>
<property name="address" value="http://localhost:8088/services/test">
</property>
<property name="outInterceptors">
<list>
<bean class="org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor"/>
<ref bean="wss4jOutConfiguration"/>
</list>
</property>
</bean>
<bean id="wss4jOutConfiguration" class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
<property name="properties">
<map>
<entry key="action" value="Signature"/>
<entry key="user" value="client-344-839"/>
<entry key="passwordType" value="PasswordDigest"/>
<entry key="signatureKeyIdentifier" value="IssuerSerial"/>
<entry key="signaturePropFile" value="client/outsecurity_sign.properties"/>
<entry>
<key>
<value>passwordCallbackRef</value>
</key>
<ref bean="passwordCallback"/>
</entry>
</map>
</property>
</bean>
<bean id="passwordCallback" class="security.PasswordCallbackHandler"/>
</beans>
PasswordCallbackHandler类放在security目录下
package security;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
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 PasswordCallbackHandler implements CallbackHandler {
private Map<String, String> passwords = new HashMap<String, String>();
public PasswordCallbackHandler() {
passwords.put("serveralias", "aliaspass");
passwords.put("client-344-839", "client344Password");
}
public void handle(Callback[] callbacks) throws IOException,
UnsupportedCallbackException {
WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
String id = pc.getIdentifer();
pc.setPassword((String) passwords.get(id));
}
}
然后就写一个服务类
package service;
import javax.jws.WebService;
@WebService
public interface TestService{
public String sayHello() throws javax.xml.ws.WebServiceException;
}
和
package service.impl;
import javax.jws.WebService;
import jp.co.apm.service.TestService;
@WebService
public class TestServiceImpl implements TestService{
public String sayHello(){
return "Hello,ShenBin";
}
}
之后是cxf-servlet.xml文件发布服务的 放在webinfo下
<?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"/>
<jaxws:endpoint id="testservice" implementor="jp.co.apm.service.impl.TestServiceImpl" address="/test">
<jaxws:features>
<bean class="org.apache.cxf.feature.LoggingFeature"/>
</jaxws:features>
<jaxws:inInterceptors>
<bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor"/>
<ref bean="wss4jInConfiguration"/>
</jaxws:inInterceptors>
</jaxws:endpoint>
<bean id="wss4jInConfiguration" class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
<property name="properties">
<map>
<entry key="action" value="Signature"/>
<!--
<entrykey="user"value="client-344-839"/>
<entrykey="passwordType"value="PasswordDigest"/>
-->
<entry key="signaturePropFile" value="server_insecurity_sign.properties"/>
<entry>
<key><value>passwordCallbackRef</value></key>
<ref bean="passwordCallback"/>
</entry>
</map>
</property>
</bean>
<bean id="passwordCallback" class="jp.co.apm.security.PasswordCallbackHandler"/>
</beans>
最后就是web.xml了
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>APM</display-name>
<description>APM</description>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/cxf-servlet.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>APM</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>APM</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>60</session-timeout>
</session-config>
</web-app>
测试类如下
package client;
import javax.xml.ws.WebServiceException;
import jp.co.apm.service.TestService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestServiceClient {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "jp/co/apm/client/clientApplicationContext.xml" });
TestService service = (TestService) context.getBean("client");
try {
System.out.println(service.sayHello());
} catch (WebServiceException e) {
e.printStackTrace();
}
}
}
这就完成了,最好跟着做一下,如果要源代码,可以留言
评论
6637152@qq.com
求源码,626121727@qq.com
460700470@qq.com
623713375@qq.com
我加你吧
623713375@qq.com
175224490@qq.com
zdy_zyl1988@163.com
发表评论
-
webservice生成代码工具
2012-10-30 09:49 2369介绍一个cxf的见wsdl生成代码的工具 1、新建文件夹ws ... -
axis2客户端基于ws-security用户令牌验证访问
2012-06-08 15:45 6362如果服务端使用了ws-security进行用户验证时,客户端访 ... -
axis加密
2012-06-06 10:56 1437转自[url]http://hi.baidu.com/ ... -
CXF项目部署weblogic9.2终极解决方案
2012-04-26 21:11 6251文章为本人部署项目时的遇到的问题及解决办法。 为了兼容性的问题 ... -
CXF发布到weblogic问题
2012-04-01 13:28 6265服务器端问题 1.javax.jws.webService. ... -
CXF部署在was和weblogic
2012-03-21 09:39 1523再将cxf部署到websphere时需要将wsdl4j.jar ... -
websphere中发布cxf注意的问题
2011-10-27 10:21 6425当用cxf发布webservice时,在tomcat下可能不会 ... -
axis2和cxf复合类型参数传递(绝对权威)
2011-09-21 20:23 7653首先服务端是由CXF发布 ... -
axis和cxf客户端对cxf服务器的访问及常见问题
2011-09-16 19:39 10014上一篇博客简单介绍 ... -
axis2和CXF集成spring发布服务
2011-09-16 19:05 1973首先到官网上下载CXF整套包导入项目中,另外CXF2.2以下版 ... -
CXF客户端对axis服务器的访问
2011-09-14 09:26 11122CXF 和 axis都是非常不错的webservice ...
相关推荐
本文将深入探讨如何使用Ksoap2在Android客户端实现与使用Apache CXF和WSS4J安全框架的Web服务的认证过程。 **Ksoap2库** Ksoap2是一个轻量级的开源库,专门用于Android平台,它允许Android应用通过HTTP/HTTPS协议...
总之,这个示例展示了如何使用Apache CXF、WSS4J和Spring框架构建一个安全的、基于Java的Web服务,并提供了客户端和服务器端的实现。对于想要深入理解Web服务开发和安全性的开发者来说,这是一个很好的学习资源。...
本实例将详细介绍如何在Spring环境中集成CXF,并使用WSS4J进行安全认证。 **一、Spring与CXF集成** 1. **配置CXFServlet**: 首先,我们需要在Spring的`web.xml`配置文件中声明CXF的Servlet,如`...
CXF使用WSS4J实现WS-Security规范,本例的配置是Timestamp Signature Encrypt,具体使用可以参考我的博客http://blog.csdn.net/wangchsh2008/article/details/6708270
2. **创建安全上下文**:为了实现身份验证,你需要创建一个`WSS4JOutInterceptor`,并提供安全相关的配置,比如使用`UsernameToken`进行基本认证。这可以通过`WSSecurityProperties`类来完成。 3. **添加拦截器**:...
4. **wss4j-bindings.jar**:包含了与不同Web服务框架(如CXF、Axis2等)的绑定和集成代码。 5. **wss4j-policy.jar**:提供了对WS-Policy和WS-SecurityPolicy的支持,帮助开发者定义和验证服务的安全策略。 6. 可能...
2. **配置安全策略**:CXF支持通过`WSS4JOutInterceptor`进行安全策略配置。我们需要创建该拦截器并设置适当的属性,如`wsse:UsernameToken`用于用户名和密码认证,或者`wsse:Security`用于更复杂的认证机制。 ```...
在这个示例中,WSS4J的集成确保了传输的数据安全性,支持消息认证、加密、数字签名等安全特性。通过WSS4J,你可以添加和验证SOAP消息的安全头,保护服务免受恶意攻击。 3. **MTOM功能示例**: MTOM(Message ...
【标题】:“WebService+CXF+Spring”是一个关于在Java环境中使用Apache CXF框架与Spring框架集成实现Web服务的专题。Apache CXF是一个开源的Web服务框架,它允许开发人员创建和部署SOAP和RESTful Web服务。Spring...
5. 安全性:通过WSS,CXF提供了一套完整的安全解决方案,包括基本认证、数字签名、消息加密等。 6. 传输协议:CXF不仅支持HTTP/S,还可以通过JMS、JBI等多种传输协议。 在实际开发中,使用CXF可以极大地简化Web服务...
CXF提供了丰富的安全特性,如WS-Security(WS-SecureConversation、WSS-Timestamp等),支持数字签名、加密、用户名令牌、X.509证书等多种安全策略。开发者可以根据需求选择合适的安全方案。 **7. 性能优化与调试**...
【标题】"cxfSecurity.rar" 是一个与Apache CXF框架相关的压缩文件,它涉及到在Web服务(Webservice)环境中实现安全加密以及使用拦截器(Interceptors)的技术。Apache CXF是一个开源的服务框架,用于构建和开发...
8. **wss4j-1.6.11.jar**:WS-Security for Java,提供了Web服务安全标准的支持,如SOAP消息的签名和加密。 这些jar文件的组合,为开发者提供了一个完整的环境,能够创建、测试和部署基于CXF的Web服务。开发者可以...
3. **wss4j-1.5.11.jar**:Web Services Security for Java(WSS4J)是Apache提供的安全框架,它为CXF提供了Web服务安全支持,如数字签名、加密、身份验证等。 4. **jetty-server-7.2.2.v20101205.jar** 和 **jetty...
这可能涉及到创建和添加WSS4JInInterceptor和WSS4JOutInterceptor,以处理安全令牌。 4. **源码和工具**:标签“源码”和“工具”提示我们可能需要查看具体的代码示例或使用特定的开发工具。例如,使用Eclipse或...
在实际应用中,开发者可能需要使用工具如Apache WSS4J、cxf-codegen-plugin等辅助实现和测试SIG_N_ENC安全策略。 在“webservice_sign_enc”压缩包文件中,可能包含CXF配置示例、源代码片段、测试用例等相关资源,...
在CXFServer中集成WSS4J,意味着服务支持安全认证、加密、消息完整性检查等安全特性。用户可以通过配置WSS4J策略来实现基于用户名令牌、X.509证书、SAML令牌等的安全验证机制,确保Web服务通信的安全性。 ### 3. ...
这个过程可能涉及到XML密钥管理、WS-Policy、WSS4J(Web Services Security for Java)等组件的使用,并需要进行详细的配置和调试。 在实现这一过程中,开发者可能需要: 1. **配置CXF**:在CXF的配置文件(如`cxf...
7. `wss4j-1.6.1.jar`: Web Services Security for Java(WSS4J)是Apache CXF项目的一部分,专门用于实现WS-Security规范,提供身份验证、消息完整性、加密等功能。 这些jar包组合在一起,为开发者提供了完整的CXF...
在"Server"部分的源码中,可能会看到实现这些安全特性的代码,如使用X.509证书进行SSL/TLS握手,或者使用WSS4J库实现WS-Security头的添加和验证。"Client"则可能包含相应的调用和服务请求,同时处理服务器返回的加密...