2017-04-10 9 views
0

JavaEEアプリケーションをWARファイル(WAS Liberty Profileアプリケーションサーバーを使用)としてデプロイする場合、アプリケーションロールとユーザーグループ間のマッピングはserver.xmlで定義されます。私たちは、メソッド注釈に記述されているパーミッションと、ユーザに割り当てられているパーミッションのセットを比較するEJB beanインターセプタを使用してセキュリティを実装することを選択しました。 このアイデアは、Java Magazine (Secure Java EE Authentication," Java Magazine, January/February 2013)の元の記事に基づいています。@DeclareRolesで定義されたロールをプログラムで取得する方法

さらに詳しい情報を得るには、ユーザーに関連付けられたロールをより詳細な権限セットにマッピングする必要があります。残念ながら、(現在)ユーザに関連付けられたロールのリストを取得するのは簡単ではありません。このstack overflow articleでは、2つの提案された方法が@Josh@Steveで提案されています。

@DeclareRoles()アノテーションで定義されたロールのリストを取得できる場合は、これらのロールごとにrequest.isUserInRole(role)メソッドを使用することができます私自身。

誰かがこの方法を使用したのですか、記事が書かれて以来、より細かい粒度のセキュリティモデルを実装するためのより良い方法がありますか?これは私が数年前に誰かのためにした古いArquillian Security Demoからである

@Stateless 
@LocalBean 
@DeclareRoles({ ROLE1, ROLE2, ROLE3 }) 
public class IsCallerInRoleDemoSessionBean { 

    @Resource 
    private SessionContext sessionContext; 

    @PermitAll 
    public Set<String> discoverRoles() { 
     Set<String> roleNames = new HashSet<>(); 
     DeclareRoles declaredRoles = IsCallerInRoleDemoSessionBean.class.getAnnotation(DeclareRoles.class); 
     for (String roleName : declaredRoles.value()) 
      if (sessionContext.isCallerInRole(roleName)) 
       roleNames.add(roleName); 
     return roleNames; 
    } 

} 

+0

[javax.annotation.security.DeclareRoles](http://docs.oracle.com/javaee/7/api/javax/annotation/security/DeclareRoles.html)を意味しましたか? –

+0

スティーブさん、ありがとうございました。私の質問が更新されました。 – mikee

答えて

1

さて、あなたは確かのような何かを行うことができます。

理想的には、スーパークラスも同様に検討されます。

関連する問題