2017-11-06 5 views
0

私は春を使い始めました。知識のある人が私を助けてくれることを願っています。私は春休みデータを使って春休みレポジトリを持っています。私は以下のことをどうやって行うかを考えています。spring RESTリポジトリ - 返されたレスポンスフィールドを変更する

  1. アクセス認証されたユーザ要求は、ユーザーの属性に基づいて、彼らはこの属性を持っているかどうかに基づいて、リポジトリレスポンスフィールドの一つのマスクにしています。たとえば、データのリストを取得する要求が出されます。しかし、私たちはデータを返す前に、ユーザーが例えば「支払った」ことをチェックしてデータを残しているかどうかをチェックし、そうでなければレスポンスフィールドを変更してそのコンテンツをマスクし、「コンテンツフィールド値」を「... " 例えば。標準のリポジトリを使用してこれを行うことはできますか、コントローラに変更してすべてのコードをやり直す必要がありますか?以下のサンプルコード:

    公開インタフェースReadOnlyRepositoryはリポジトリを拡張します{ T findOne(ID id);

    Iterable<T> findAll(); 
    
    Iterable<T> findAll(Sort sort); 
    
    Page<T> findAll(Pageable pageable); 
    

    }

    パブリックインターフェイスContentRepositoryはReadOnlyRepository < ...> {

    }

    //私はその場で交換する必要があるフィールドを拡張して '...' @Entity public class Content {

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private long id; 
    
    @Column(nullable = false) 
    private String content; 
    
    あなたはセットアップに春のセキュリティコンテキストを持っていたと仮定すると、

    }

答えて

0

、あなたがのgetContent()メソッドあなたのEntityクラス

public String getContent(){ 

    Authentication auth = 
    SecurityContextHolder.getContext().getAuthentication(); 
    if(auth.getAuthorities().contains(new SimpleGrantedAuthority("ADMIN"))) { 
    return content; 
    }else{ 
     return "..."; 
    } 

} 
+0

で以下のように行うことができますありがとうございます。これはおおよそ私が探していたものです。私が使用する必要のあるdbフィールドは、権限データベースまたは権限ではなく、ユーザーのデータベーステーブルからのものです。基本的には、oauth2を使用してユーザーをログオンし、トークンを使用してAPIにアクセスします。セキュリティコンテキストがこのトークンを使用してユーザーにアクセスして認証することはできますか?許可された権限と同じ方法でユーザーエンティティフィールドにアクセスできますか? – Richard

+0

リチャード(Richard)は、春に単純な認証フィルタを作成し、トークンを処理し、データベースのUserと照合し、セキュリティコンテキストを設定します。これは完璧な使用例です。セキュリティコンテキストは、認証の詳細を格納するために使用されます。 – VimalKumar

関連する問題