1. 程式人生 > >webservice的幾種驗證方式(一)基於JAX-WS

webservice的幾種驗證方式(一)基於JAX-WS

近年來,隨著面向服務的平臺的大規模開放,異構程式之間的通訊的需求不斷增多,隨之而來的就是webservice的蓬勃發展。
Java中用來構建webservice的主流技術有Axis2,JAX-WS,CXF(主要對JAX-WS進行了一系列的封裝)。
今天主要給大家介紹一些關於webservice的驗證或者說是許可權管理,本文主要針對JAX-WS進行說明,JAX-WS是基本適用於所有的的webservice呼叫,而且它主要依賴於JDK,額外需要的jar很少,我個人認為JAX-WS適用和靈活可以和很多框架結合適用,比如Spring,SSH,SpringMVC框架。只要能夠掌握JAX-WS在平時的工作中使用就綽綽有餘了。
迴歸正題還是來說webservice的驗證,為什麼要做webservice的驗證,基本上都是為了資料安全考慮,當然也有特殊原因。
webservice的驗證主要有一下幾種驗證方式:
1.在獲取wsdl檔案的時候驗證
2.在soap head中驗證


一、在獲取wsdl檔案的時候驗證
1、基本原理:其實就是攔截特定的請求,例如我要獲取wsdl的時候,對方提供wsdl路徑是http://www.baidu.com/XXX/HelloServiceImplPort?wsdl,只要我門獲取到這個地址在測試工具XMLSpy中輸入這個地址時會彈出這個對話方塊,要求你輸入使用者名稱和密碼。
2、實現方式
2.1伺服器實現方式
這裡我使用的是SSH框架,其實主要就是webservice和Spring的整合。我把關鍵的地方貼出來
a.在tomcat中配置使用者名稱和密碼
1.找到tomcat安裝目錄---->conf------>tomcat-users.xml,建立使用者名稱和密碼都為tomcat 
      2.客戶端程式

</pre><pre name="code" class="html">這是一個介面
package com.webservice;
import java.util.List;
import javax.jws.WebService;
import com.xx.bean.Campaign;
import com.xx.bean.Campaigntarget;
@WebService
public interface CRM_CampaignService  {
	public  boolean  addCampaign(List<Campaign> list);
		
	public  boolean  addCampaigntarget(List<Campaigntarget> list);
}


這是介面實現方式,把方法中的程式碼都去掉了,這裡涉及到和Spring整合
package com.webservice;
import java.util.List;
import javax.jws.HandlerChain;
import javax.jws.WebService;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import com.xx.bean.Campaign;
import com.xx.bean.Campaigntarget;
@WebService(endpointInterface="com.webservice.CRM_CampaignService")
public class CRM_CampaignServiceImpl implements CRM_CampaignService{
	
	@Autowired
	private CampaignService campaignService;
	@Autowired
	private CampaigntargetService campaigntargetService;
	@Autowired
	private SessionFactory sessionFactory;
	@Override
	public boolean addCampaign(List<Campaign> list) {
		
	}

	@Override
	public boolean addCampaigntarget(List<Campaigntarget> list) {
		
	}

}

這是web.xml配置

<description>
  		JAX-WS endpoint - CRM_CampaignServiceImplService
</description>
  	<display-name>CRM_CampaignServiceImplService</display-name>
<servlet-name>CRM_CampaignServiceImplService</servlet-name>
  	<servlet-class>
  		com.sun.xml.ws.transport.http.servlet.WSSpringServlet
  	</servlet-class>
  
</servlet>
<servlet-mapping>
  	<servlet-name>CRM_CampaignServiceImplService</servlet-name>
  	<url-pattern>/CRM_CampaignServiceImplPort</url-pattern>
</servlet-mapping>
  <security-role>  
 	 <description>Normal operator user</description>  
  	<role-name>tomcat</role-name>  
  </security-role>  
<security-constraint>  
 <span style="white-space:pre">	</span> <web-resource-collection>  
   <span style="white-space:pre">		</span> <web-resource-name>Operator Roles Security</web-resource-name>  
   <span style="white-space:pre">	</span> <span style="white-space:pre">	</span><url-pattern>/CRM_CampaignServiceImplPort</url-pattern>  
 <span style="white-space:pre">	</span> </web-resource-collection>  
  <span style="white-space:pre">	</span><auth-constraint>  
   <span style="white-space:pre">		</span> <role-name>tomcat</role-name>  
  <span style="white-space:pre">	</span></auth-constraint>  
        <user-data-constraint>  
   <span style="white-space:pre">		</span> <transport-guarantee>NONE</transport-guarantee>  
 <pre name="code" class="html"><span style="white-space:pre">	</span></user-data-constraint> 
</security-constraint> <span style="font-family: Arial, Helvetica, sans-serif;">      </span>
<login-config>  
  <auth-method>BASIC</auth-method> 
</login-config>


這是Spring配置檔案,注意紅線加粗的地方,這是要額外引入的
<?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:context="http://www.springframework.org/schema/context"
	<strong style="background-color: rgb(255, 102, 0);">xmlns:ws="http://jax-ws.dev.java.net/spring/core"
       xmlns:wss="http://jax-ws.dev.java.net/spring/servlet"</strong>
        xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
	http://www.springframework.org/schema/context 
	http://www.springframework.org/schema/context/spring-context-2.5.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
	http://www.springframework.org/schema/tx 
	http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
<strong><span style="color:#ff0000;">	http://jax-ws.dev.java.net/spring/core 
	http://jax-ws.dev.java.net/spring/core.xsd 
	http://jax-ws.dev.java.net/spring/servlet 
	http://jax-ws.dev.java.net/spring/servlet.xsd"	</span></strong>	
	default-autowire="byName" default-lazy-init="true">

	<bean id="cRM_CampaignService" class="com.webservice.CRM_CampaignServiceImpl"/>	
	  <wss:binding url="/CRM_CampaignServiceImplPort">
              <wss:service>
              <ws:service bean="#cRM_CampaignService" />
          </wss:service>
         </wss:binding> 

到這裡服務端基本完成了,輸入訪問地址就會出來這個對話方塊



輸入使用者名稱和密碼都是tomcat




然後就可以看到wsdl檔案

在這裡獲取wsdl是需要的驗證基本上就結束了,有什麼錯誤還請大家斧正。