2017-03-19 3 views
-3

ownerIdでアカウントレコードをフィルタリングし、誰かが所有者ではないレコードにアクセスしようとするとアクセスが拒否されるようにします。owner行のデータベースをフィルタリングするjava spring security

Javaスプリングセキュリティでは可能ですか?

「はい」の場合は、すべてのグループで共有レコードのみが表示されるユーザーグループに適用できますか。

答えて

0

これは、Spring SecurityのFilterアノテーションで実現できます。 PreFilterとPostFilterが用意されています。セキュリティ設定ファイルに注釈を付けることで、注釈の前後に有効にすることができます。

@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(prePostEnabled = true) 
public class SecurityConfiguration extends WebSecurityConfigurerAdapter { 

    // your web security stuff. 

} 

あなたがポストフィルタ

@PostFilter("filterObject.ownerId == authentication.name") 
public List<Record> findAllRecords() { 

    // perform query to get records. 

} 

春はすべてのレコードを取得し、OWNERIDが一致しないすべてのレコードをフィルタリングするために続行されます使用したい属性でフィルタリングしたいので、認証されたユーザー。

式を結合するだけでなく、他のスプリング式(hasRole、hasAuthority、isAuthenticatedなど)を適用することもできます。たとえば、ROLE_ADMINを持つユーザーのみがすべてのレコードにアクセスするようにし、ROLE_ADMINがownerIdによってフィルタにかけられない場合は、次の操作を実行できます。 http://docs.spring.io/spring-security/site/docs/current/reference/html/el-access.html#filtering-using-prefilter-and-postfilter

baeldung.com上のこれらの機能の素敵な書き込みアップ http://www.baeldung.com/spring-security-prefilter-postfilter

+0

私が使用している:

@PostFilter("hasRole('ROLE_ADMIN') or filterObject.ownerId == authentication.name") public List<Record> finAllRecords() { // perform query to get all records. } 

SPRINGのDOC(あなたはユーザー 'と' または 'または' 式と演算子缶)ページング可能で、@postFilterのように見えます – user3347018

関連する問題