1

Springデータリポジトリを使用してデータベースにアクセスし、登録ユーザーについてクエリを実行するSpring BootアプリケーションでSpringセキュリティを使用する方法について、具体的で深刻で完全な例を探していました。

configureたとえば、次のオプションを使用してメソッドをオーバーライドすることにより、Spring セキュリティを使用してさまざまな Web ページを簡単に保護できることがわかりました。

http.authorizeRequests()
    .antMatchers("/", "/css/**", "/js/**", "/vendor/**", "/templates/**")
    .permitAll()
    .anyRequest()
    .authenticated()
    .and()
    .formLogin()
    .loginPage("/login")
    .permitAll()
    .and()
    .logout()
    .permitAll();

このコードは、たとえば へのアクセスからユーザーを保護しますが、または単にhttp://localhost:3000/home/users/へのアクセスを許可します。http://localhost:3000/loginhttp://localhost:3000

私はSpringのセキュリティについて読んでいますが、たとえば、ユーザーがWebサイトにログインしたときにアプリケーションのさまざまな部分を保護し、 example からのアクセスを禁止する方法がわかりませんhttp://localhost:3000/home/users/another_user。ログインしたユーザーの Web サイトのすべての部分へのアクセスを制御します。

エンティティを介してデータベースのデータを操作するために、Spring データ リポジトリを使用しています。

Spring セキュリティを Spring リポジトリ (および必要に応じて他のツール) と組み合わせて使用​​し、Web サイトのさまざまな部分を保護 (および認証) する例を知っていますか? (ビデオ) チュートリアルも役立つ場合があります。

助けてくれてありがとう。

注: sagan の Web サイトのリポジトリを見てきましたが、何が起こっているのかを理解するのは非常に複雑です...

4

2 に答える 2

1

これは、Spring Security では Access Control、または「Domain Object Security」と呼ばれます。

http://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#domain-acls

あなたはやるべきことがたくさんあります!

おそらく、Spring Data JPA と組み合わせて、SDJ が必要なレコードのみを返すようにする必要があります。ここに例を示します:

https://github.com/spring-projects/spring-data-examples/tree/master/jpa/security

基本的に、テーブルに「行所有者」情報を追加し、SDJ と SS を連携させてアクセスを制御します。次のようにします。

@Query("select o from BusinessObject o where o.owner.emailAddress like ?#{hasRole('ROLE_ADMIN') ? '%' : principal.emailAddress}")
List<BusinessObject> findBusinessObjectsForCurrentUser();

別の方法として、PostgreSQL などの Row Security をサポートするデータベース サーバーを使用し、データベースでアクセス制御を処理します。

于 2016-05-05T20:03:18.137 に答える