JBoss4.2.3GA + EJB3.0 + JAAS

JAAS在網上的評價度不是很高,你們一致認爲它比較晦澀難用。雖然如此,可是由於咱們開發的項目裏用到了JAAS,因此還不得不研究一下。
     所謂JAAS(Java Authentication Authorization Service Java認證與受權服務)就是爲了保證Java代碼的安全執行而分離出來的一個獨立安全模塊。它的一個顯著的優勢就是它被設計成可插入式的,這樣就保證了 應用程序的獨立性。詳細介紹請參看http://baike.baidu.com/view/72676.htm
    我這裏假設你已經初步瞭解JAAS機制,而後我主要介紹其在JBoss裏如何配置,並如何應用在EJB的Stateless Bean上。具體實現請參考附件。
    一、編寫一個主角類,即實現Principle接口的類。接着編寫一個角色組類,即實現Group接口的類。寫這兩個類時和不用JBoss時的寫法相同。
    二、寫好登陸模塊,即繼承LoginModule接口的類。寫這個類時也不用考慮JBoss的因素。
    三、把JAAS配置集成到JBoss裏面去。打開<JBOSS安裝目錄>/server/<default(這裏是JBoss啓動模式對應的文件夾)>/conf/login-config.xml,參照以下格式添加內容:
   <!-- Deploy Ejb_JBoss_JaasSecurityDomain -->
   <application-policy name="Ejb_JBoss_JaasSecurityDomain">
<authentication>
  <login-module code="jaas.MyLoginModule" flag="required">   </login-module>
</authentication>
   </application-policy>

而後在項目裏的src/META-INF下新建jboss.xml,參照以下格式填寫內容:
  <jboss>
    <security-domain>Ejb_JBoss_JaasSecurityDomain</security-domain>
  </jboss>

這樣咱們就完成了JAAS在JBoss中的配置。
    接下來,討論咱們如何在EJB服務裏使用該JAAS驗證。
    一、首先,需寫好一個EJB服務,即Stateless Bean。無需多言。
    二、咱們採用註解方式插入JAAS驗證模塊。這裏涉及到的註解有@DeclareRoles、@RolesAllowed、@PermitAll、 @DenyAll、@RunAs,這幾個註釋裏面,@RolesAllowed使用最頻繁。就我測試發現,@DeclareRoles只起聲明做用,就如 VB中聲明基本變量同樣,沒有實際意義。而@PermitAll是容許全部經過驗證的用戶訪問,而@DenyAll還未被支持,尚不能使用。具體使用請參 考J2EE5API。
    三、寫客戶端時須要注意:初始化InitialContext的Properties的設置以下:
Properties prop = new Properties();
prop.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.security.jndi.JndiLoginInitialContextFactory");
prop.put(Context.URL_PKG_PREFIXES,
"org.jboss.naming:org.jnp.interfaces");
prop.put(Context.PROVIDER_URL, "(1)");
prop.put(Context.SECURITY_PRINCIPAL, "(2)");
prop.put(Context.SECURITY_CREDENTIALS, "(3)");
InitialContext ctx = new InitialContext(prop);

其中,(1)處應填寫JBoss所在服務器的URL,如"localhost:1099";
      (2)處對應上面所寫登陸模塊(實現LoginModule接口)中的NameCallback(需在代碼裏添加)的getName()方法;
      (3)處對應上面所寫登陸模塊中的PasswordCallback(需在代碼裏添加)的getPassword()方法。
    四、使用InitialContext獲得所寫服務,並調用其中的方法。
   
    休息一下,理理思路,你會發現,在JBoss裏使用JAAS並非一件困難的事。安全

相關文章
相關標籤/搜索