2009-05-07 9 views
2

私は認可のためにJbos AS 5とDatabaseServerLoginModuleを使用しています。私は私のサーブレットからユーザーのロールを取得することができますどのようにユーザーが正常に認証されたらサーブレットでユーザーの役割を取得する方法は?

<application-policy name = "jbossmq"> 
    <authentication> 
    <login-module code = "org.jboss.security.auth.spi.DatabaseServerLoginModule" 
     flag = "required"> 
     <module-option name = "unauthenticatedIdentity">guest</module-option> 
     <module-option name = "dsJndiName">java:/MyDatabaseDS</module-option> 
     <module-option name = "principalsQuery">SELECT PASSWD FROM JMS_USERS WHERE USERID=?</module-option> 
     <module-option name = "rolesQuery">SELECT ROLEID, 'Roles' FROM JMS_ROLES WHERE USERID=?</module-option> 
    </login-module> 
    </authentication> 
</application-policy> 

、私は自分のアプリケーションポリシーは、(例えばだけではなく、実際のコード)のように定義しましたか?上記のコードスニペットでは、ロールはデータベースから選択されていますが、どこに格納されていますか?セッション中!はいの場合、どのセッション変数の下にありますか?

また、JBossでLdap認証とデータベース認証を併用することはできますか?

答えて

3

クリントン

boolean HttpServletRequest.isUserInRole(String role) 

方法は、ユーザが割り当てられた特定の役割を持っているかどうかを確認するために使用することができ、基本的権利です。 ただし、このメソッドは、アプリケーションによって定義されたJ2EEロール(EARの記述子であるapplication.xml)をチェックするためのものです。

EARファイルにAS固有のディスクリプタをパックするか、アプリケーション固有のディスクリプタをパッケージ化して、アプリケーションサーバーのユーザーロール(ログインモジュールのプリンシパルに設定したもの)をJ2EEアプリケーションにマッピングする必要があります。役割。

1

私は方法を知っています:

boolean HttpServletRequest.isUserInRole(String role) 

私が知っているあなたのすべてのロールのリストを与えるものではありませんが、それはあなたの目的を果たすのでしょうか?

1

コンテナは、次のスニペットは、(通常は)最初のヒットがある

Subject subject = (Subject) PolicyContext.getContext("javax.security.auth.Subject.container"); 
for (Principal principal : subject.getPrincipals()) { 
    LOG.debug("In subject: " + principal.getName()); 
} 

(のGlassFish 3.1.xを上に少なくとも私にとっては)働くユーザー校長と他の人がグループになりがちかもしれませんJACC互換性がある場合プリンシパル。あなたがグループプリンシパルのクラス名を知っている場合は、代わりにgetPrincipals(Class<T> c)を呼び出すことでフィルタすることができます。