文档章节

Apache CXF实战之九 发布使用SSL的Web Service

OkSerIous
 OkSerIous
发布于 2015/08/22 01:52
字数 1025
阅读 73
收藏 5
点赞 0
评论 0

在使用Web Service的时候,在很多情况下会要求我们发布ssl的web service,此时如果web service是作为一个war包部署在tomcat之类的web容器中的时候,我们可以通过修改tomcat的配置来比较容易的部署发布成ssl的web service的,当对于独立运行的程序来书,此时发布web service是需要一些操作的,下面看看在CXF中怎样发布并调用SSL的Web Service。

1. 首先是一个pojo的实体类

[java] view plaincopyprint?

<EMBED id=ZeroClipboardMovie_1 name=ZeroClipboardMovie_1 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer height=14 width=29 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=1&width=29&height=14" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">

  1. package com.googlecode.garbagecan.cxfstudy.ssl;  

  2.   

  3. public class User {  

  4.     private String id;  

  5.     private String name;  

  6.     private String password;  

  7.     public String getId() {  

  8.         return id;  

  9.     }  

  10.     public void setId(String id) {  

  11.         this.id = id;  

  12.     }  

  13.     public String getName() {  

  14.         return name;  

  15.     }  

  16.     public void setName(String name) {  

  17.         this.name = name;  

  18.     }  

  19.     public String getPassword() {  

  20.         return password;  

  21.     }  

  22.     public void setPassword(String password) {  

  23.         this.password = password;  

  24.     }  

  25. }  

2. 下面是Web Service的接口和实现类,这两个类和前面文章中介绍的没什么区别

[java] view plaincopyprint?

<EMBED id=ZeroClipboardMovie_2 name=ZeroClipboardMovie_2 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer height=14 width=29 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=2&width=29&height=14" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">

  1. package com.googlecode.garbagecan.cxfstudy.ssl;  

  2.   

  3. import java.util.List;  

  4.   

  5. import javax.jws.WebMethod;  

  6. import javax.jws.WebResult;  

  7. import javax.jws.WebService;  

  8.   

  9. @WebService   

  10. public interface UserService {  

  11.     @WebMethod  

  12.     @WebResult List<User> list();  

  13.   

  14. }  

  15.   

  16. package com.googlecode.garbagecan.cxfstudy.ssl;  

  17.   

  18. import java.util.ArrayList;  

  19. import java.util.List;  

  20.   

  21. public class UserServiceImpl implements UserService {  

  22.   

  23.     public List<User> list() {  

  24.         List<User> users = new ArrayList<User>();  

  25.         for (int i = 0; i < 10; i++) {  

  26.             User user = new User();  

  27.             user.setId("" + i);  

  28.             user.setName("user_" + i);  

  29.             user.setPassword("password_" + i);  

  30.             users.add(user);  

  31.         }  

  32.         return users;  

  33.     }  

  34.   

  35. }  

3. 下面看看Server端代码

[java] view plaincopyprint?

<EMBED id=ZeroClipboardMovie_3 name=ZeroClipboardMovie_3 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer height=14 width=29 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=3&width=29&height=14" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">

  1. package com.googlecode.garbagecan.cxfstudy.ssl;  

  2.   

  3. import java.io.File;  

  4. import java.io.FileInputStream;  

  5. import java.security.KeyStore;  

  6.   

  7. import javax.net.ssl.KeyManager;  

  8. import javax.net.ssl.KeyManagerFactory;  

  9. import javax.net.ssl.TrustManager;  

  10. import javax.net.ssl.TrustManagerFactory;  

  11.   

  12. import org.apache.cxf.configuration.jsse.TLSServerParameters;  

  13. import org.apache.cxf.configuration.security.ClientAuthentication;  

  14. import org.apache.cxf.configuration.security.FiltersType;  

  15. import org.apache.cxf.endpoint.Server;  

  16. import org.apache.cxf.jaxws.JaxWsServerFactoryBean;  

  17. import org.apache.cxf.transport.http_jetty.JettyHTTPServerEngineFactory;  

  18.   

  19. public class MyServer {  

  20.   

  21.     private static final int port = 12345;  

  22.       

  23.     private static final String address = "https://0.0.0.0:"+port+"/ws/ssl/userService";  

  24.   

  25.     public static void main(String[] args) throws Exception {  

  26.         System.out.println("Starting Server");  

  27.           

  28.         configureSSLOnTheServer();  

  29.           

  30.         JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();  

  31.         factoryBean.setServiceClass(UserServiceImpl.class);  

  32.         factoryBean.setAddress(address);  

  33.           

  34.         Server server = factoryBean.create();  

  35.         String endpoint = server.getEndpoint().getEndpointInfo().getAddress();  

  36.   

  37.         System.out.println("Server started at " + endpoint);  

  38.     }  

  39.   

  40.     public static void configureSSLOnTheServer() {  

  41.         File file = new File(MyServer.class.getResource("/com/googlecode/garbagecan/cxfstudy/ssl/test.jks").getFile());  

  42.           

  43.         try {  

  44.             TLSServerParameters tlsParams = new TLSServerParameters();  

  45.             KeyStore keyStore = KeyStore.getInstance("JKS");  

  46.             String password = "mypassword";  

  47.             String storePassword = "mypassword";  

  48.               

  49.             keyStore.load(new FileInputStream(file), storePassword.toCharArray());  

  50.             KeyManagerFactory keyFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());  

  51.             keyFactory.init(keyStore, password.toCharArray());  

  52.             KeyManager[] keyManagers = keyFactory.getKeyManagers();  

  53.             tlsParams.setKeyManagers(keyManagers);  

  54.   

  55.             keyStore.load(new FileInputStream(file), storePassword.toCharArray());  

  56.             TrustManagerFactory trustFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());  

  57.             trustFactory.init(keyStore);  

  58.             TrustManager[] trustManagers = trustFactory.getTrustManagers();  

  59.             tlsParams.setTrustManagers(trustManagers);  

  60.               

  61.             FiltersType filtersTypes = new FiltersType();  

  62.             filtersTypes.getInclude().add(".*_EXPORT_.*");  

  63.             filtersTypes.getInclude().add(".*_EXPORT1024_.*");  

  64.             filtersTypes.getInclude().add(".*_WITH_DES_.*");  

  65.             filtersTypes.getInclude().add(".*_WITH_NULL_.*");  

  66.             filtersTypes.getExclude().add(".*_DH_anon_.*");  

  67.             tlsParams.setCipherSuitesFilter(filtersTypes);  

  68.               

  69.             ClientAuthentication ca = new ClientAuthentication();  

  70.             ca.setRequired(true);  

  71.             ca.setWant(true);  

  72.             tlsParams.setClientAuthentication(ca);  

  73.               

  74.             JettyHTTPServerEngineFactory factory = new JettyHTTPServerEngineFactory();  

  75.             factory.setTLSServerParametersForPort(port, tlsParams);  

  76.         } catch (Exception e) {  

  77.             e.printStackTrace();  

  78.         }  

  79.     }  

  80.   

  81. }  

4. 下面看看Client端代码

[java] view plaincopyprint?

<EMBED id=ZeroClipboardMovie_4 name=ZeroClipboardMovie_4 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer height=14 width=29 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=4&width=29&height=14" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">

  1. package com.googlecode.garbagecan.cxfstudy.ssl;  

  2.   

  3. import java.io.File;  

  4. import java.io.FileInputStream;  

  5. import java.security.KeyStore;  

  6.   

  7. import javax.net.ssl.KeyManager;  

  8. import javax.net.ssl.KeyManagerFactory;  

  9. import javax.net.ssl.TrustManager;  

  10. import javax.net.ssl.TrustManagerFactory;  

  11.   

  12. import org.apache.cxf.configuration.jsse.TLSClientParameters;  

  13. import org.apache.cxf.configuration.security.FiltersType;  

  14. import org.apache.cxf.endpoint.Client;  

  15. import org.apache.cxf.frontend.ClientProxy;  

  16. import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;  

  17. import org.apache.cxf.transport.http.HTTPConduit;  

  18.   

  19. public class MyClient {  

  20.   

  21.     private static final String address = "https://localhost:12345/ws/ssl/userService";  

  22.   

  23.     public static void main(String[] args) throws Exception {  

  24.         JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();  

  25.         factoryBean.setAddress(address);  

  26.         factoryBean.setServiceClass(UserService.class);  

  27.         Object obj = factoryBean.create();  

  28.         UserService userService = (UserService) obj;  

  29.           

  30.         configureSSLOnTheClient(userService);  

  31.   

  32.         System.out.println(userService.list());  

  33.     }  

  34.   

  35.     private static void configureSSLOnTheClient(Object obj) {  

  36.         File file = new File(MyServer.class.getResource("/com/googlecode/garbagecan/cxfstudy/ssl/test.jks").getFile());  

  37.           

  38.         Client client = ClientProxy.getClient(obj);  

  39.         HTTPConduit httpConduit = (HTTPConduit) client.getConduit();  

  40.   

  41.         try {  

  42.             TLSClientParameters tlsParams = new TLSClientParameters();  

  43.             tlsParams.setDisableCNCheck(true);  

  44.   

  45.             KeyStore keyStore = KeyStore.getInstance("JKS");  

  46.             String password = "mypassword";  

  47.             String storePassword = "mypassword";  

  48.               

  49.             keyStore.load(new FileInputStream(file), storePassword.toCharArray());  

  50.             TrustManagerFactory trustFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());  

  51.             trustFactory.init(keyStore);  

  52.             TrustManager[] trustManagers = trustFactory.getTrustManagers();  

  53.             tlsParams.setTrustManagers(trustManagers);  

  54.   

  55.             keyStore.load(new FileInputStream(file), storePassword.toCharArray());  

  56.             KeyManagerFactory keyFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());  

  57.             keyFactory.init(keyStore, password.toCharArray());  

  58.             KeyManager[] keyManagers = keyFactory.getKeyManagers();  

  59.             tlsParams.setKeyManagers(keyManagers);  

  60.               

  61.             FiltersType filtersTypes = new FiltersType();  

  62.             filtersTypes.getInclude().add(".*_EXPORT_.*");  

  63.             filtersTypes.getInclude().add(".*_EXPORT1024_.*");  

  64.             filtersTypes.getInclude().add(".*_WITH_DES_.*");  

  65.             filtersTypes.getInclude().add(".*_WITH_NULL_.*");  

  66.             filtersTypes.getExclude().add(".*_DH_anon_.*");  

  67.             tlsParams.setCipherSuitesFilter(filtersTypes);  

  68.   

  69.             httpConduit.setTlsClientParameters(tlsParams);  

  70.         } catch (Exception e) {  

  71.             e.printStackTrace();  

  72.         }  

  73.     }  

  74. }  

5. 我们需要手动生成jks文件,并将其放在maven工程resources的/com/googlecode/garbagecan/cxfstudy/ssl/目录下,下面是手动生成时使用的命令

[plain] view plaincopyprint?

<EMBED id=ZeroClipboardMovie_5 name=ZeroClipboardMovie_5 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer height=14 width=29 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=5&width=29&height=14" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">

  1. keytool -genkey -alias test -keyalg RSA -keypass mypassword -storepass mypassword -dname "CN=, OU=, O=, L=, ST=, C=" -validity 3650 -keystore test.jks  

6. 最后我们可以通过启动MyServer和MyClient来验证我们的测试。

本文转载自:http://blog.csdn.net/kongxx/article/details/7738717

共有 人打赏支持
OkSerIous
粉丝 30
博文 34
码字总数 4888
作品 0
贵阳
后端工程师
SOA调用wsdl报 No binding operation info while invoking unknown method with params unknown

根据xsd文件用cxf生成对应wsdl,提供给soa调用,soa调用报No binding operation info while invoking unknown method with params unknown 接口模式是订阅发布; 1.想询问如何定位问题;2.想...

cflulu-heixiong ⋅ 06/06 ⋅ 0

mule发布调用webservice

mule发布webservice 使用mule esb消息总线发布和调用webservice都非常精简,mule包装了所有操作,你只需要拖控件配置就可以,下面讲解mule发布: 1.下面是flow,http监听接口,CXF发布webse...

jiazhipeng12 ⋅ 05/28 ⋅ 0

NutzBoot v2.1.7 新增 maven 插件和 mqtt-client

NutzBoot v2.1.7 已发布,更新如下: 新增maven插件和mqtt支持 时间: 2018-05-04 事件: 青年节 曲目: Penguin's Game 兼容性: 与2.0.x和2.1.x完全兼容 变更: fix: 修改jetty热加载无效问题 ...

wendal ⋅ 05/04 ⋅ 0

Android调用Axis、Axis2、Cxf发布的web service

在Android中调用axis2发布web service过程中一直报http500错误,axis2 web service是用eclipse插件生成的,发现直接打包成war包或直接在eclipse运行,Android调用的时候会报错,一定要打包成...

yuewawa ⋅ 05/04 ⋅ 0

因为Java10发布所以学些Java8

前言 不知不觉间Java10TM都发布了,看了下新特性,好激动啊,然后回过头来继续工作,叹一口气,看着这个已经上线在改造过程中的Java7项目开始暗自神伤 总想找点代码来写,可是这些年太依赖客...

天下无敌强 ⋅ 03/31 ⋅ 0

JBoss7.1.1 安装配置

一、下载安装 首先要注意安装jdk环境,笔者安装的是较新的jdk1.7版本 1、下载地址: http://www.jboss.org/jbossas/downloads ,下载Certified Java EE 6 Full Profile版本。 2、解压 jboss-...

zhangdiandong ⋅ 2014/08/18 ⋅ 0

Apache CXF 介绍

Apache CXF 简介 关于Apache CXF   Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XF...

hanfeng ⋅ 2014/07/04 ⋅ 1

使用 Apache CXF 实现 Web Service 详解

1.Web service的概念 什么是WebService呢?从表面上看,Web Service就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web调用来实现某个功...

核桃白果 ⋅ 2013/08/08 ⋅ 10

一个WebService入门实例

1Web Service基本概念和CXF Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在 Web上提...

蜡笔小小小新 ⋅ 2015/12/26 ⋅ 0

Apache CXF 3.0.13 和 3.1.11 发布

Apache CXF 3.0.13 和 3.1.11 发布了,暂未发现具体更新内容。 点此查看 Apache CXF 3.0.13 和 3.1.11 的提交记录。 下载地址 和 发布主页 Apache CXF是一个开源的Service框架,它实现了JCP...

淡漠悠然 ⋅ 2017/04/06 ⋅ 3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java软件工程师简历中项目经验怎么写?

作者:暗灭 链接:https://www.zhihu.com/question/20695310/answer/180691302 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 直接给你贴个我自己的简历...

颖伙虫 ⋅ 19分钟前 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

Linux系统日志

linux 系统日志 /var/log/messages /etc/logrotate.conf 日志切割配置文件 https://my.oschina.net/u/2000675/blog/908189 logrotate 使用详解 dmesg 命令 /var/log/dmesg 日志 last命令,调......

Linux学习笔记 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部