Web Service呼叫輕量級安全解決方案

2021-06-07 05:41:05 字數 1761 閱讀 5407

在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業務物件時最常用的容器。任何容器都應該包含如下服務 上面講的是容器核心模組應該提供的服務,但是容器還必須提供其它一些服務,增加...