【轉(zhuǎn)自】http://caterpillar.onlyfun.net/Gossip/JSPServlet/JSPServlet.htm
要 防護(hù)應(yīng)用程式的資源,驗(yàn)證(Authentication)與授權(quán)(Authorization)是基本需求。
驗(yàn)證基本上就是識(shí)別登入系統(tǒng)的使用者,是否為系統(tǒng)所允許的身份,是否如其所宣告的身份。授權(quán)則是對(duì)資源加以管理保護(hù),針對(duì)請(qǐng)求資源的使用者,檢查其是否具 備足夠的權(quán)限。
在Java EE中,容器提供驗(yàn)證、授權(quán)服務(wù),透過(guò)適當(dāng)?shù)慕M態(tài)設(shè)定或API,您可以讓容器為您管理大部份的驗(yàn)證與授權(quán),要運(yùn)用Java EE所提供的驗(yàn)證、授權(quán)服務(wù),基本上您必須了解幾個(gè)概念名詞:
中文稱之為「域」 或「範(fàn)圍」,在Java EE的規(guī)範(fàn)之中,Realm指的是身份驗(yàn)證資料的來(lái)源,Realm可能是記憶體、檔案、憑證、資料庫(kù)、網(wǎng)路(如LDAP)等。
例如若為Web容器部份,Tomcat預(yù)設(shè)是將身份驗(yàn)證資料儲(chǔ)存於tomcat-users.xml檔案之中,在啟動(dòng)Tomcat之後,將該檔案載入記憶 體作為Memory Realm,您也可以將之改為JDBC Realm。Glassfish(原 Sun Java System Application Server)的Realm可以是 File Realm(一般使用者)、Admin Realm(管理者)、 Certificate realm等,您可以在Glassfish管理介面中加以設(shè)定。
在系統(tǒng)上會(huì)有 User,而在多人共用的系統(tǒng)會(huì)有不同的權(quán)限,為了方便管理使用者的權(quán)限,通常會(huì)定義Group,將User歸類於某些Group,您可以直接將權(quán)限設(shè)定 給Group,而Group下的User就擁有該權(quán)限。
然而在設(shè)計(jì)應(yīng)用程式時(shí),並無(wú)法事先得知系統(tǒng)上會(huì)有哪些Group,所以您無(wú)法直接在應(yīng)用程式中使用Group名稱 來(lái)設(shè)定資源的權(quán)限,因此在Java EE的規(guī)範(fàn)中,是定義資源可以被哪些Role存取,至於如何將系 統(tǒng)上的Group對(duì)應(yīng)至應(yīng)用程式的Role不在Java EE的規(guī)範(fàn)之中,而是依伺服器廠商的實(shí)作而有所不同。
在設(shè)計(jì)應(yīng)用程式 時(shí),因無(wú)法事先得知將被部署至的系統(tǒng)上,會(huì)有哪些User,因此在Java EE中,登入系統(tǒng)的使用者是定義為Principal,您是依據(jù)Proincipal於應(yīng)用程式中作識(shí)別驗(yàn)證,如何將系統(tǒng)上的User對(duì)應(yīng)至應(yīng)用程式的 Principal不在Java EE的規(guī)範(fàn)之中,而是依伺服器廠商的實(shí)作而有所不同。
例如,Tomcat可以在tomcat-users.xml中設(shè)定Role與User的對(duì)應(yīng),而Glassfish,則可以在sun-web.xml、 sun-ejb-jar.xml、sun-application.xmll等檔案中設(shè)定Role與Group的對(duì)應(yīng)。
文章來(lái)源:
http://x-spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!787.entry