JAASRealm 是 Tomcat 的 Realm 接口的一種實現(xiàn),通過 Java Authentication & Authorization Service(JAAS,Java身份驗證與授權(quán)服務(wù))架構(gòu)來實現(xiàn)對用戶身份的驗證。JAAS 架構(gòu)現(xiàn)已加入到標準的 Java SE API 中。
通過 JAASRealm,開發(fā)者實際上可以將任何安全的 Realm 與 Tomcat 的 CMA 一起組合使用。
JAASRealm 是 Tomcat 針對基于 JAAS 的 J2EE 1.4 的 J2EE 認證框架的原型實現(xiàn),基于 JCP Specification Request 196,從而能夠增強容器管理安全性,并且能促進“可插拔的”認證機制,該認證機制能夠?qū)崿F(xiàn)與容器的無關(guān)性。
根據(jù) JAAS 登錄模塊和準則(參見 javax.security.auth.spi.LoginModule 與 javax.security.Principal 的相關(guān)說明),你可以自定義安全機制,或者將第三方的安全機制與 Tomcat 所實現(xiàn)的 CMA 相集成。
為了利用自定義的 JAAS 登錄模塊使用 JAASRealm,需要執(zhí)行如下步驟:
為 Java 建立一個 login.config 文件(參見 JAAS LoginConfig 文件)。將其位置指定給 JVM,從而便于 Tomcat 明確它的位置。例如,設(shè)置如下環(huán)境變量:
???
JAVA_OPTS=$JAVA_OPTS -Djava.security.auth.login.config==$CATALINA_BASE/conf/jaas.config
在上述步驟中,為了配置步驟 6 以上的 JAASRealm,需要創(chuàng)建一個 元素,并將其內(nèi)嵌在 元素中的 $CATALINA_BASE/conf/server.xml 文件內(nèi)。關(guān)于 JAASRealm 中的屬性定義可參看 Realm 配置文檔。
下例是 server.xml 中的一截代碼段:
<Realm className="org.apache.catalina.realm.JAASRealm"
appName="MyFooRealm"
userClassNames="org.foobar.realm.FooUser"
roleClassNames="org.foobar.realm.FooRole"/>
完全由登錄模塊負責創(chuàng)建并保存用于表示用戶規(guī)則的 User 與 Role 對象(javax.security.auth.Subject)。如果登錄模塊不僅無法創(chuàng)建用戶對象,而且也無法拋出登錄異常,Tomcat CMA 就會失去作用,所在頁面就會變成 http://localhost:8080/myapp/j_security_check 或其他未指明的頁面。
JAAS 方法具有雙重的靈活性: