在web service標準規範中,安全性主要通過soap header來保證web service的授權使用,通過ssl(ca認證方式)來保證傳輸層資料的加密,防止網路偵聽(用ssl而不用ws-security是因為效能,雖然ws-security有著很多ssl所無法做到的特性:不基於傳輸層,保障非點對點的安全傳輸,部分加密等等)。
但以上兩種方法還是比較「重」,對計算資源與網路頻寬占用比較高,不太適合輕量級應用,特別是我們的應用執行在客戶的安全內網,對於授權使用與資料加密要求不高,因此可以在初期採用比較簡單的方式來實現授權使用與資料加密。
在兼顧安全性,同時又不能占用太多系統資源的前提下,決定採用唯一會話id的方式來解決問題。
首先,所有呼叫客戶端都要在引數中打包乙個呼叫者物件,並根據其中內容得到唯一會話id。服務端在收到呼叫者物件後,根據其中的內容,也計算乙個唯一會話id,如果與客戶端發來的id完全相同,則認為呼叫者是合法,引數也是完整的。
如有可能,則儲存此呼叫者id到快取或者資料庫中,以後每次呼叫都要先判斷此呼叫者id是否已經存在,如果已經存在,則視同重複呼叫,則服務端拋棄此呼叫申請,或者返回「重複呼叫」出錯資訊。
對於重要的引數,可以在雙方約定乙個加解密演算法單獨進行處理,以保證資料安全性。
一、建立web services 工程(xfire),和平時的一樣。
二、加入身份驗證功能
1、首先編寫服務端驗證類,繼承abstracthandler類
package test;
importorg.codehaus.xfire.messagecontext;
importorg.codehaus.xfire.handler.abstracthandler;
import org.jdom.element;
public classauthenticationhandler extends abstracthandler catch (exception e) catch (malformedurlexception e) catch (illegalargumentexception e) ;
public static string md5(string s) catch (exception e)
md.update(s.getbytes());
returnbytearraytohexstring(md.digest());
} private static stringbytetohexstring(byte b)
int d1 = n / 16;
int d2 = n % 16;
return hexcode[d1] + hexcode[d2];
} private static string bytearraytohexstring(byte b)
return result;
} //c# md5演算法
private staticstring hexcode =;
public staticstring md5(string s)
private static string bytetohexstring(byte b)
int d1 = n / 16;
int d2 = n % 16;
return hexcode[d1] + hexcode[d2];
} private static string bytearraytohexstring(byte b)
return result;
}
非同步呼叫輕量級封裝AsynCaller
當ui動作引發乙個耗時的計算時,我們經常需要將這個耗時的過程放到後台執行緒中去完成,然後獲取該過程的結果。使用.net提供的預設設施,無論是使用thread還是使用非同步呼叫,細節都比較繁瑣。在前幾天的blog上也看到了有些兄台的解決方案,但是覺得還不夠好用,於是自己封了乙個asyncaller。a...
輕量級重量級
輕量級重量級某種程度上是以啟動程式需要的資源來決定。比如,ejb啟動的時候,需要消耗大量的資源,記憶體,cpu等,所以是重量級。而spring則不,所以是輕量級框架。量級主要是看對容器的依賴性所決定的,依賴性越小,越輕量.ejb往往內部做了很多服務,網上的說法是買一得三 而且你不想要就不行!比方說我...
輕量級容器
什麼是輕量級容器?為什麼我們需要輕量級容器?什麼是輕量級容器 所謂容器 container 指應用 的執行框架。業務物件在容器裡執行,被容器管理。像ejb就是過去管理j2ee業務物件時最常用的容器。任何容器都應該包含如下服務 上面講的是容器核心模組應該提供的服務,但是容器還必須提供其它一些服務,增加...