該示例包含四個附加的檔案:
login.conf
policy
resourcepolicy.xml
run.bat
在試圖運行這個示例程式之前,請確保更新了 run.bat、policy 和 resourcepolicy.xml 檔案中的路徑。預設情況下,所有的密碼都是“passw0rd”。
示例如何工作
該示例程式提示輸入用戶標識和密碼。它用 users.xml 檔案中的條目核對所提供的用戶標識和密碼。在認證了用戶之後,程式設法創建一個 userprofile 類實例,修改它並從中讀取。預設情況下,userprofile 類的所有者是 jane(jane)。當 jane 登錄時,三個操作全部成功。當 john(john)登錄時,只有創建操作成功。當 jane 的經理 lou(lou)登錄時,只有第一個和最後一個操作成功。當系統管理員(admin)登錄時,操作全部成功。當然,只有當提供的 resourcepolicy.xml 檔案未被修改時,上述這些才都是真的。
示例安裝
下面的安裝指導假設您正在使用 jdk 1.3 並且已經把檔案解壓縮到 d:\jaasexample 目錄。通過將檔案解壓縮到這個目錄,您可以省去一些工作;否則您就必須使用正確的路徑名修改 policy 和 resourcesecurity.xml 策略檔案。
下面是運行該示例需要做的工作:
下載這個示例的源檔案。
把 jaas.jar 和 jaasmod.jar 複製到 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。
執行 run.bat 檔案。
結束語
類實例級授權把訪問控制分離到一個通用框架(該框架使用基於所有權和特定關係的策略)中。然後管理員可以在應用程式的生命周期內更改這些策略。用這種方法擴展 jaas 減少了您或另一個程式設計師必須在應用程式生命周期內業務規則發生更改時重寫代碼的可能性。
通過將關係字元串抽象為類可以進一步擴展特定關係這個概念。不調用 resource 實現類的 fulfills(subject user, string relationship) 方法,而只要調用 relationship 實現類中定義的新 fulfills(subject user, resource resource) 方法。這樣就會允許許多 resource 實現類使用相同的關係邏輯。
6.java的安全性
1. the security manager是一個application-wide object ( java.lang.securitymanager)
每個java application都可以有自己地security manager,但是默認地java application沒有一個security manager
可以通過下面地代碼得到一個security manager
try
{
system.setsecuritymanager(new securitymanager(“--”));
}
catch( )
{}
2.
jdbc
在 jdbc 2 開發的過程中,sql99 還處在一種變化不定的情況下。現在規範已經完成了,而且資料庫廠商已經採用了部分標準。所以自然地,jdbc 規範就跟著將自己與 sql99 功能的一部分相統一。最新的 jdbc 規範已經採用了 sql99 標準中那些已經被廣泛支持的功能,還有那些在五年內可能會獲得支持的功能。
1. datasource
在jdbc2.0 optional package中,提供了透明的連線池(connection pooling)。
一旦配置了j2ee套用伺服器後,只要用datasource獲取連線(connection),連線池(connection pooling)就會自動的工作。
如果用戶希望建立一個資料庫連線,通過查詢在jndi服務中的datasource,可以從datasource中獲取相應的資料庫連線。
datasource被認為是從jndi中獲取的網路資源。
datasource在池中保存的對象都實現了pooledconnection接口。
當應用程式向datasource請求一個connection時,它會找到一個可用的pooledconnection對象。
如果連線池空了,它就向connectionpoolecdatasource請求一個新的pooledconnection對象
通過使用 datasource 接口 (jdbc 2.0) 或 drivermanager (jdbc 1.0) 接口,j2ee 組件可以獲得物理資料庫連線對象(connection)。要獲得邏輯(合用的)連線,j2ee 組件必須使用以下這些 jdbc 2.0 合用管理器接口:
javax.sql.connectionpooldatasource 接口,該接口充當合用的 java.sql.connection 對象的資源管理器連線 factory。每家資料庫伺服器供應商都提供該接口的實現
(例如,oracle 實現 oracle.jdbc.pool.oracleconnectionpooldatasource 類)。
javax.sql.pooledconnection 接口,該接口封裝到資料庫的物理連線。同樣,資料庫供應商提供其實現。
對於那些接口和 xa 連線的每一個,都存在一個 xa(x/open 規範)等價定義。
2. resultset
在jdbc2.0中,為了獲得一個uptatable result,在query語句里必須包含primarykey,並且查詢的內容里必須來自一個table
ava.sql.resultset接口中定義了三種類型的結果集
type_forward_only
type_scroll_insensitive 這種類型的結果集支持雙向滾動
type_scroll_sensitive
如果要建立一個雙向滾動的resultset,一定要在建立statement的時候使用如下參數
statement stmt = conn.createstatement(resultset.type_scroll_insensitive,
resultset.concur_read_only);
3. jdbc驅動程式
連通oracle8.1.6的jdbc