java學(xué)習(xí)心得筆記
該示例包含四個(gè)附加的文件:
login.conf
policy
resourcepolicy.xml
run.bat
在試圖運(yùn)行這個(gè)示例程序之前,請確保更新了 run.bat、policy 和 resourcepolicy.xml 文件中的路徑。缺省情況下,所有的密碼都是“passw0rd”。
示例如何工作
該示例程序提示輸入用戶標(biāo)識和密碼。它用 users.xml 文件中的條目核對所提供的用戶標(biāo)識和密碼。在認(rèn)證了用戶之后,程序設(shè)法創(chuàng)建一個(gè) userprofile 類實(shí)例,修改它并從中讀取。缺省情況下,userprofile 類的所有者是 jane(jane)。當(dāng) jane 登錄時(shí),三個(gè)操作全部成功。當(dāng) john(john)登錄時(shí),只有創(chuàng)建操作成功。當(dāng) jane 的經(jīng)理 lou(lou)登錄時(shí),只有第一個(gè)和最后一個(gè)操作成功。當(dāng)系統(tǒng)管理員(admin)登錄時(shí),操作全部成功。當(dāng)然,只有當(dāng)提供的 resourcepolicy.xml 文件未被修改時(shí),上述這些才都是真的。
示例安裝
下面的安裝指導(dǎo)假設(shè)您正在使用 jdk 1.3 并且已經(jīng)把文件解壓縮到 d:\jaasexample 目錄。通過將文件解壓縮到這個(gè)目錄,您可以省去一些工作;否則您就必須使用正確的路徑名修改 policy 和 resourcesecurity.xml 策略文件。
下面是運(yùn)行該示例需要做的工作:
下載這個(gè)示例的源文件。
把 jaas.jar 和 jaasmod.jar 復(fù)制到 jdk jre\lib\ext 目錄(即 d:\jdk1.3\jre\lib\ext)。
向位于 jdk 的 jre\lib\security 目錄(即 d:\jdk1.3\jre\lib\security)中的 java.security 文件的末尾添加下面的字符串:auth.policy.provider=com.ibm.resource.security.auth.xmlpolicyfile。
執(zhí)行 run.bat 文件。
結(jié)束語
類實(shí)例級授權(quán)把訪問控制分離到一個(gè)通用框架(該框架使用基于所有權(quán)和特定關(guān)系的策略)中。然后管理員可以在應(yīng)用程序的生命周期內(nèi)更改這些策略。用這種方法擴(kuò)展 jaas 減少了您或另一個(gè)程序員必須在應(yīng)用程序生命周期內(nèi)業(yè)務(wù)規(guī)則發(fā)生更改時(shí)重寫代碼的可能性。
通過將關(guān)系字符串抽象為類可以進(jìn)一步擴(kuò)展特定關(guān)系這個(gè)概念。不調(diào)用 resource 實(shí)現(xiàn)類的 fulfills(subject user, string relationship) 方法,而只要調(diào)用 relationship 實(shí)現(xiàn)類中定義的新 fulfills(subject user, resource resource) 方法。這樣就會(huì)允許許多 resource 實(shí)現(xiàn)類使用相同的關(guān)系邏輯。
6.java的安全性
1. the security manager是一個(gè)application-wide object ( java.lang.securitymanager)
每個(gè)java application都可以有自己地security manager,但是默認(rèn)地java application沒有一個(gè)security manager
可以通過下面地代碼得到一個(gè)security manager
try
{
system.setsecuritymanager(new securitymanager(“--”));
}
catch( )
{}
2.
jdbc
在 jdbc 2 開發(fā)的過程中,sql99 還處在一種變化不定的情況下。現(xiàn)在規(guī)范已經(jīng)完成了,而且數(shù)據(jù)庫廠商已經(jīng)采用了部分標(biāo)準(zhǔn)。所以自然地,jdbc 規(guī)范就跟著將自己與 sql99 功能的一部分相統(tǒng)一。最新的 jdbc 規(guī)范已經(jīng)采用了 sql99 標(biāo)準(zhǔn)中那些已經(jīng)被廣泛支持的功能,還有那些在五年內(nèi)可能會(huì)獲得支持的功能。
1. datasource
在jdbc2.0 optional package中,提供了透明的連接池(connection pooling)。
一旦配置了j2ee應(yīng)用服務(wù)器后,只要用datasource獲取連接(connection),連接池(connection pooling)就會(huì)自動(dòng)的工作。
如果用戶希望建立一個(gè)數(shù)據(jù)庫連接,通過查詢在jndi服務(wù)中的datasource,可以從datasource中獲取相應(yīng)的數(shù)據(jù)庫連接。
datasource被認(rèn)為是從jndi中獲取的網(wǎng)絡(luò)資源。
datasource在池中保存的對象都實(shí)現(xiàn)了pooledconnection接口。
當(dāng)應(yīng)用程序向datasource請求一個(gè)connection時(shí),它會(huì)找到一個(gè)可用的pooledconnection對象。
如果連接池空了,它就向connectionpoolecdatasource請求一個(gè)新的pooledconnection對象
通過使用 datasource 接口 (jdbc 2.0) 或 drivermanager (jdbc 1.0) 接口,j2ee 組件可以獲得物理數(shù)據(jù)庫連接對象(connection)。要獲得邏輯(合用的)連接,j2ee 組件必須使用以下這些 jdbc 2.0 合用管理器接口:
javax.sql.connectionpooldatasource 接口,該接口充當(dāng)合用的 java.sql.connection 對象的資源管理器連接 factory。每家數(shù)據(jù)庫服務(wù)器供應(yīng)商都提供該接口的實(shí)現(xiàn)
(例如,oracle 實(shí)現(xiàn) oracle.jdbc.pool.oracleconnectionpooldatasource 類)。
javax.sql.pooledconnection 接口,該接口封裝到數(shù)據(jù)庫的物理連接。同樣,數(shù)據(jù)庫供應(yīng)商提供其實(shí)現(xiàn)。
對于那些接口和 xa 連接的每一個(gè),都存在一個(gè) xa(x/open 規(guī)范)等價(jià)定義。
2. resultset
在jdbc2.0中,為了獲得一個(gè)uptatable result,在query語句里必須包含primarykey,并且查詢的內(nèi)容里必須來自一個(gè)table
ava.sql.resultset接口中定義了三種類型的結(jié)果集
type_forward_only
type_scroll_insensitive 這種類型的結(jié)果集支持雙向滾動(dòng)
type_scroll_sensitive
如果要建立一個(gè)雙向滾動(dòng)的resultset,一定要在建立statement的時(shí)候使用如下參數(shù)
statement stmt = conn.createstatement(resultset.type_scroll_insensitive,
resultset.concur_read_only);
3. jdbc驅(qū)動(dòng)程序
連通oracle8.1.6的jdbc