发布Https的WebService并访问

因为要做个Https访问WebService的功能,所以做例子,对于技术本来就不怎么样的我,这个痛苦啊,幸好,最后还是出来了。。

上步骤:

1. 新建Web工程,Maven依赖如下,因为有别的例子,所以对这个来说可能多了,不一一弄了,直接上全版

<dependencies>
  
	<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>3.2.0.RELEASE</version>
		</dependency>
			<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>3.2.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>3.2.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>3.2.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>3.2.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>3.2.0.RELEASE</version>
		</dependency>
		
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf</artifactId>
			<version>2.7.10</version>
			<type>pom</type>
		</dependency>
		
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-frontend-jaxws</artifactId>
			<version>2.7.10</version>
		</dependency>
		
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-transports-http</artifactId>
			<version>2.7.10</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-transports-http-jetty</artifactId>
			<version>2.7.10</version>
		</dependency>
		
		<dependency>
			<groupId>javax.xml.rpc</groupId>
			<artifactId>javax.xml.rpc-api</artifactId>
			<version>1.1.1</version>
		</dependency>
		<dependency>
			<groupId>javax.xml.ws</groupId>
			<artifactId>jaxws-api</artifactId>
			<version>2.2.11</version>
		</dependency>
		
        <dependency>
			<groupId>com.sun.xml.ws</groupId>
			<artifactId>jaxws-rt</artifactId>
			<version>2.2.8</version>
		</dependency>
                
            
  </dependencies>

 

2. 生成密钥文件

由于SSL需要密钥文件,所以要先生成一个.keystore文件。

生成方法:(1)在cmd中输入命令:

keytool -genkey -alias tomcat-server -keyalg RSA -keypass changeit -storepass 
changeit -validity 3600

                    (2)按照提示一次输入相应的内容,最后一步输入“y”即可。

                    (3)在运行命令的目录下就生成了.keystore文件。密码为:changeit。修改文件名,例如,hello.keystore,否则程序不识别。

将hello.keystore文件拷贝到刚刚建好的Web工程根目录下。

3.Tomcat添加SSL支持

\apache-tomcat-7.0.40\conf\server.xml中,默认8443的Port被注释掉,这里需要放开,并添加keystore文件属性,添加后如下

<Connector SSLEnabled="true" clientAuth="false" keystoreFile="F:\WorkSpace\cxf-web\hello.keystore" 
keystorePass="changeit" maxThreads="150" port="8443" protocol="HTTP/1.1" 
scheme="https" secure="true" sslProtocol="TLS"/>

   添加后启动Tomcat,访问https://localhost:8443/,出现“

此网站的安全证书有问题。”

就表示已经接近配置成功,大胆的点击

继续浏览此网站(不推荐)。

后出现Tomcat页面,证明配置成功!~

 4. 在Web工程中新建接口Hello

package com.uuzz.sporttery;

import java.util.List;

import javax.jws.WebParam;
import javax.jws.WebService;

@WebService
public interface Hello {

    String SayHi(@WebParam(name = "text") String text);

    String SayHiToUser(User user);

    String[] SayHiToUserList(List<User> userList);

}

 5. 添加接口实现

package com.uuzz.sporttery;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.jws.WebService;

@WebService(endpointInterface = "com.uuzz.sporttery.Hello", serviceName = "Hello")
public class HelloImpl implements Hello {

    Map<Integer, User> users = new LinkedHashMap<Integer, User>();

    public String SayHi(String text) {
	return "Hello " + text;
    }

    public String SayHiToUser(User user) {
	users.put(users.size() + 1, user);
	return "Hello " + user.getUserName();
    }

    public String[] SayHiToUserList(List<User> userList) {
	String[] result = new String[userList.size()];
	int i = 0;
	for (User u : userList) {
	    result[i] = "Hello " + u.getUserName();
	    i++;
	}
	return result;
    }

}

 6. 配置XML文件,加载服务,在/WEB-INF下新建sun-jaxws.xml

<?xml version="1.0" encoding="UTF-8"?>  
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"  
    version="2.0">  
    <endpoint name="HelloImplWS" implementation="com.uuzz.sporttery.HelloImpl"  
        url-pattern="/helloImpl" />  
</endpoints>

     并在web.xml中添加以下代码

<login-config>  
        <auth-method>CLIENT-CERT</auth-method>  
        <realm-name>Client Cert Users-only Area</realm-name>  
    </login-config>  
    <security-constraint>  
            
        <web-resource-collection >  
            <web-resource-name >SSL</web-resource-name>  
            <url-pattern>/*</url-pattern>  
        </web-resource-collection>  
        <user-data-constraint>  
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>  
        </user-data-constraint>  
	</security-constraint>  
	
	<listener>    
        <listener-class>    
            com.sun.xml.ws.transport.http.servlet.WSServletContextListener    
        </listener-class>    
    </listener>    
    <servlet>    
        <servlet-name>helloImpl</servlet-name>    
        <servlet-class>    
            com.sun.xml.ws.transport.http.servlet.WSServlet    
        </servlet-class>    
    </servlet>    
    <servlet-mapping>    
        <servlet-name>helloImpl</servlet-name>    
        <url-pattern>/helloImpl</url-pattern>    
	</servlet-mapping>  

 7. WebService部分实现完成,使用Maven打包后,将WebService.war包放入Tomcat的webapps后,启动Tomcat,访问https://localhost:8443/WebService/helloImpl?wsdl,出现WSDL,表示WebService的服务正式发布成功啦!

 8. 然后就只剩调用了,新建Java工程,先上Maven依赖

<dependencies>
		<dependency>
			<groupId>org.apache.axis2</groupId>
			<artifactId>axis2-kernel</artifactId>
			<version>1.6.2</version>
		</dependency>

		<dependency>
			<groupId>org.apache.axis2</groupId>
			<artifactId>axis2-adb</artifactId>
			<version>1.6.2</version>
		</dependency>

		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf</artifactId>
			<version>2.7.5</version>
			<type>pom</type>
		</dependency>
		<dependency>
			<groupId>ws-commons</groupId>
			<artifactId>axiom-api</artifactId>
			<version>1.1.1</version>
		</dependency>
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.1.3</version>
		</dependency>
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging-api</artifactId>
			<version>1.1</version>
		</dependency>
		<dependency>
			<groupId>org.apache.axis2</groupId>
			<artifactId>axis2-jaxws</artifactId>
			<version>1.6.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.axis2</groupId>
			<artifactId>axis2-java2wsdl</artifactId>
			<version>1.6.2</version>
		</dependency>
		<dependency>
			<groupId>ant</groupId>
			<artifactId>ant-apache-log4j</artifactId>
			<version>1.6.5</version>
		</dependency>
	</dependencies>

 

   然后就是调用类啦,使用Service类调用,新建Class类,具体如下

 

package com.uuzz.sporttery.client;

import java.rmi.RemoteException;

import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import javax.xml.rpc.encoding.XMLType;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class HelloClientHttps {

    public static void main(String[] args) throws ServiceException,
	    RemoteException {

	System.setProperty("javax.net.ssl.keyStore",
		"F:\\WorkSpace\\cxf-web\\hello.keystore");

	System.setProperty("javax.net.ssl.keyStorePassword", "changeit");

	System.setProperty("javax.net.ssl.trustStore",
		"F:\\WorkSpace\\cxf-web\\hello.keystore");

	System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

	Service _service = new Service();

	Call _call = (Call) _service.createCall();

	_call.setTimeout(1000);

	_call.setTargetEndpointAddress("https://localhost:8443/WebService/helloImpl");

	QName opAddEntry = new QName("http://sporttery.uuzz.com/", "SayHi");
	_call.setOperationName(opAddEntry);

	_call.addParameter("text", XMLType.XSD_STRING, ParameterMode.IN);

	_call.setReturnType(XMLType.XSD_STRING);

	Object result = _call.invoke(new String[] { "My Friend" });
	System.out.println(result);
    }

}

 9. 然后直接run就可以啦,执行结果:Hello My Friend

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值