2017-01-29 15 views
0

私はRESTベースのWebアプリケーションを開発しています。ここでは、休憩サービスにApache shiroが統合されており、基本認証とロールベースの認証が実行されています。Apache shiro + HTTPメソッドレベルの許可

ここでは、メソッドレベル(RESTの場合はマイクロサービス)で権限設定を使用して権限機能を強化したいと考えています。私が間違っていない場合、Apache shiroはHttpMethodPermissionFilterクラスを提供しています。このクラスは、HTTPメソッド(GET、POST、DELETE、HEADなど)に基づいて受信リクエストを制限するフィルタとして使用でき、内部でroles_permissionsテーブルのアクセス権をチェックします。設定したデータベースまたはINI設定ファイル。

したがって、HTTPメソッドベースのアクセス許可機能を実装するには、shiro.iniファイルを変更する必要がありますか。あるいは、私のjdbcの領域には何かがあります。

shiro.iniファイル

[main] 
userRoles = org.apache.shiro.web.filter.authz.RolesAuthorizationFilter 

jdbcRealm = my.custom.jdbc.realm.YhJdbcRealm 
securityManager.realms = $jdbcRealm 

[urls] 
# Allowing login page to any user 
/rest/login/** = anon 

# Page 1 
/rest/page1/** = noSessionCreation, authcBasic, userRoles[role1] 


# page 2 
/rest/page2/** = noSessionCreation, authcBasic, userRoles[role1,role2,role3] 


# page 3 
/yhrest/page3/** = noSessionCreation, authcBasic, userRoles[role1,role3] 

/rest/** = noSessionCreation, authcBasic 

カスタムJDBCレルムに

public class YhJdbcRealm extends JdbcRealm 
{ 
    public YhJdbcRealm() 
    { 
     loadDataSource(); 
    } 

    private void loadDataSource() 
    { 
     this.dataSource = JdbcConnection.initConnection(); 
     this.permissionsLookupEnabled = true; 
     this.authenticationQuery = "SELECT password FROM users WHERE username = ?"; 
     this.userRolesQuery = "SELECT role_name FROM user_roles WHERE username = ?"; 
     this.permissionsQuery = "SELECT permission FROM roles_permissions_temp WHERE role_name = ?"; 
    } 

    @Override 
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException 
    { 
     AuthenticationInfo info = super.doGetAuthenticationInfo(token); 
     return info; 
    } 
} 

任意の参照は感謝されるので、私は、Apache史郎に新しいです。おかげさまで

  • abc:create
  • abc:read
  • abc:update
  • abc:delete

答えて

0

HttpMethodPermissionFilterのためのドキュメントを見ては、あなたが/rest/page1のために、以下のCRUD権限を持って言うことができますあなたの[urls]マッピングは次のようになります。

[urls] 
/rest/page1/** = noSessionCreation, authcBasic, rest[abc] 

すべてが/rest/page1/**に要求をGETですから、「ABC」は、ここでユーザーであり、それはつもりはすべてのCRUDの権限を持っているという意味で許可rest[abc:read]

+0

にマッピングされますpage1のために。どんなフォーマットで、それがデータベースにどのように格納されるのか、素晴らしいですか?特定のページの実際の権限チェックを実行するために必要なスキーマと値を共有できますか。 –

+0

はい 'abc'は基本的なユーザー権限ですが、私は 'page1'を使うつもりでしたが、説明のためにそれらを別々にしておきたいと思いました。 スキーマはあなた次第ですが、例のように 'permission'カラムは権限をロールにマップします。詳細については、以下のリンクをご覧ください。 [Shiro Permissionsに関するブログ](https://stormpath.com/blog/protecting-jax-rs-resources-rbac-apache-shiro#authorize-the-stormtroopers- jax-rs-resource)、 [Shiro Permissions](https://shiro.apache.org/permissions.html) –

関連する問題