JBoss EJB Security

EJB Client 的 standalone 方式, 是可以 Work ….
不過, 不知道為何 EJB Client 放在 JBoss WS (JBoss 4.2.3 GA ) 裡面實現卻無法實現!!…
我混搭了 Spring ….然後在 Spring 的設定裏面 注入 Remote EJB,
可是….無論如何就是跳出 權限的錯誤!!…..

1
2
3
4
5
18:48:16,126 ERROR [RoleBasedAuthorizationInterceptor] Insufficient permissions, principal=null, 
                   requiredRoles=[admin, manager], principalRoles=null
18:48:16,142 ERROR [[default]] Servlet.service() for servlet default threw exception
javax.ejb.EJBAccessException: Authorization failure

今天終於解決了這個問題…

經過多天來的努力, 終於找出原因了,
原來在 JBoss中, 如果你使用 JBoss 作為 EJB Container,
那麼, JBoss 是利用 JAAS 來實現, EJB 的 Security,
但是, 由於 我在 JBoss 的架構下混搭了 Spring , Web Security 是採用 Spring Security
因此, 就沒有辦法通過 JBoss EJB Container 的權限檢查,

相信到這邊, 有經驗的你一定已經知道該怎麼處理了,
沒錯, 就是改回利用 JBoss Security 所能接受的方法,
利用 JBoss Realm 的設定方式,
簡單的說, 就是設定 web.xml 以及 Jboss-web.xml 兩個檔案

web.xml 設定如下 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
   <security-role>
        <role-name>ejb-user</role-name>
    </security-role>
 
   <security-constraint>
     <web-resource-collection>
       <web-resource-name>EJB Security</web-resource-name>
       <description>EJB Security</description>
       <url-pattern>/*</url-pattern>
       <http-method>GET</http-method>
       <http-method>POST</http-method>
     </web-resource-collection>
     <auth-constraint>
       <role-name>ejb-user</role-name>
     </auth-constraint>
   </security-constraint>

    <login-config>
        <auth-method>FORM</auth-method>
        <form-login-config>
            <form-login-page>/login.jsp</form-login-page>
            <form-error-page>/error.jsp</form-error-page>
        </form-login-config>
    </login-config>

Jboss-web.xml

1
2
3
<jboss-web>
    <security-domain>java:/jaas/EJB3</security-domain>
</jboss-web>

當然, 你的~/jboss-4.2.3.GA/server/default/conf/login-config.xml 設定也不能少, ( 不過這之前當然就已經設過了!!… )
login-config.xml

1
2
3
4
5
6
7
8
9
    <application-policy name = "EJB3">
       <authentication>
          <login-module code = "org.jboss.security.auth.spi.UsersRolesLoginModule" flag = "required">
             <module-option name = "usersProperties">props/ejb3-users.properties</module-option>
             <module-option name = "rolesProperties">props/ejb3-roles.properties</module-option>
             <module-option name = "unauthenticatedIdentity">anonymous</module-option>
          </login-module>
       </authentication>
    </application-policy>

廣告

About fenjj

Perfect !!??...
本篇發表於 Uncategorized。將永久鏈結加入書籤。

One Response to JBoss EJB Security

  1. Brandon 說道:

    謝謝你分享的資訊..

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s