2011-02-03 32 views
1

Springのセキュリティ3 - jdbc認証プロバイダを使用して認証されたすべての認証済みユーザーに割り当てるデフォルトの権限を宣言的に定義できますか?現在のところ、私のwebappにはロールの概念がありません。あなたはあなたのアカウントにアクセスすることが許可されているユーザーでもありません。また、権限テーブルをデータベースに実装する必要はありません。現在以下の宣言で私は次のエラーメッセージが表示されます。Spring Security - DB権限を持つ権限?

メッセージ[テーブル 'authority'は が存在しません]。

<authentication-manager> 
     <authentication-provider> 
      <password-encoder hash="plaintext"/> 
      <jdbc-user-service data-source-ref="dataSource" 
           users-by-username-query="select account_uid,hashedpassword,true from account where account_uid=?" /> 

     </authentication-provider> 
    </authentication-manager> 

これは宣言的に行うことができない場合 - 何が最善のアプローチことでしょうか?

ありがとうございます。

イアン。

答えて

2

<jdbc-user-service>要素はJdbcUserServiceBeanDefinitionParserクラスで処理され、JdbcUserDetailsManager beanをインスタンス化して構成します。このBeanには、管理対象のユーザー、グループおよび権限に関連するSQLが含まれています。

JdbcUserDetailsManagerのソースコードを見ると、その柔軟性がかなり制限されていることがわかります。ユーザー権限テーブルを必要としない場合は、代わりにグループ権限テーブルが必要です。どちらか一方。

もっと簡単にしたい場合は、独自のカスタム実装UserDetailsServiceを作成する必要があるようです。あなたがそれを行うと文脈における通常のSpring Beanとして宣言する場合は、使用して春のセキュリティにそれをフックすることができます:

<authentication-manager> 
    <authentication-provider user-service-ref="myUserService"> 
     <password-encoder hash="plaintext"/> 
    </authentication-provider> 
</authentication-manager> 

をおそらくJdbcUserDetailsManagerのソースをコピーして権限/グループのものを除去することが最も簡単でしょうアプローチ。

+0

ありがとうございますSkaffman - 明確で簡単な答え - 私はそれを打つつもりです... – Ian

2

これは簡単な方法で行うことができます「?account_uid =口座からaccount_uidを選択し、 『デフォルト』、」

当局・バイ・ユーザ名、クエリ=

このクエリはアカウントテーブルを再利用し、各ユーザーに既定の権限を与えます。