webservice權限控制設計及說明
已有2.0版本,自動實現接口,取消了eclipse生成實現類的過程,詳情見git上2.0文檔
代碼地址(1.0)
https://coding.net/u/mich/p/easytry/git/tree/master/WebService
代碼地址(2.0)
https://coding.net/u/mich/p/easytry/git/tree/master/WebServiceV2.0
模塊划分
模塊主要划分為三個模塊,客戶端,服務端,output模塊
服務端:提供對外服務
author包下為權限相關處理類,此處需要和自己系統做對應處理
webservice包下為對外接口,實現類以及相應pojo
output模塊:通過服務端的wsld利用eclipse插件自動生成接口以及實現類,同時包含授權相關工具代理
Proxy包下主要提供給客戶端權限控制的代理
Webservice包下為eclipse自動根據wsdl生成的實現方法以及代理等類
客戶端:調用方法
java下主要調用服務端的相關接口做的簡單測試代碼
cxf.properties為主要的webservice相關配置文件
同時lib引用了上例output所導出的jar包
核心處理流程
開發流程
1. 服務端開發
a) 編寫接口
注意接口上方要添加@WebService注解
b) 編寫實現類
實現類同樣要添加@WebService注解同時endpointInterface為對應接口類全名,targetNameSpace為實現類包名倒置,@Service添加后,便於webservice的發布
c) 編寫配置文件cxf-servlet.xml
在WebserviceAuthorizeListener中已給所有webservice添加了AuthorInterceptor攔截器,控制權限,如果上例webservice的實現類未添加@Service注解此處需要額外配置
d) 訪問http://localhost:8080/webserviceStudy/services/testService?wsdl
如果顯示信息,則表示成功
2. output模塊開發
a) 開啟服務端服務,保證剛剛發布的wsd可以訪問
b) 點擊項目右鍵,新建一個web Service Client
c) 點擊next,此時如果wsdl不能訪問,則會報錯,點擊finish即可生成對應代碼
d) 生成成功后會生成五個文件,I***Service, I***ServiceProxy,***ImplService,***ImplServiceLactor,***ImplServiceSoapBindingStub,客戶端主要調用Proxy
e) 項目導出jar包
3. 客戶端開發
a) 將output導出的jar包導入項目中
b) 通過authorProxy調用getService,內部傳入相關接口Proxy的get***Service方法
c) 此處可能拋出異常,如缺失頭信息:此錯誤可能由於authorProxy未生效導致,權限不足:可能該用戶並沒有調用該服務的權限
其余cxf相關配置說明
1. 服務端web.xml
2. 客戶端spring-mvc.xml
通過spring注入AuthorizeProxy的Bean不同客戶端的name和token在cxf.properties中設置
測試結果
測試主要通過客戶端的TestController配置,權限主要配置兩個tom:tom,admin:adminPwd,服務端權限主要在AuthorizeService中配置,此處僅為測試使用,實際需以項目做對應處理
以下結果為tom:tom的權限測試
http://localhost:8080/webserviceClientStudy/hello?name=sss
http://localhost:8080/webserviceClientStudy/create?name=tom&id=2
http://localhost:8080/webserviceClientStudy/delete