2017-01-09 12 views
4

私はSpring SecurityとOAuth2でSpring Bootで書かれたREST APIを持っています。私は権限がプロジェクトに基づいて、粒度の細かいAPIの新しい部分を紹介したいと思いSpringセキュリティREST APIのURLパラメータに基づくロール

@Override 
public void configure(HttpSecurity http) throws Exception { 
    http 
      .authorizeRequests() 
      .antMatchers("/api/v1/security/**").hasRole("ADMIN"); 
} 

:リソースは、このように固定されています。プロジェクト構成を出力する簡単なエンドポイントを考えてみましょう。私は手動でのみすべてのプロジェクトを指定しなくても、役割ROLE_PROJECT_{projectId}_ADMINを持っているユーザーのアクセスを許可するようにリソースサーバを設定する方法を

GET /api/v1/project/{projectId}/config 

また、このメカニズムに特定の名前がある場合は、私は質問のタイトルを変更することができると私にコメントでお知らせください。

+0

あなたは、コントローラのメソッドにPreAuthorize'注釈@ '入れて、春のMVCを使用している場合は、一般的にきめ細かいアクセス権を処理するための最良の方法です。 – chrylis

答えて

6

許可値式でパス値を使用できます。

Path Variables in Web Security Expressionsによれば、カスタム認証ロジックを作成する必要があります。

public class WebSecurity { 
    public boolean checkUserHasAccessToProjectId(Authentication authentication, int projectId) { 
    // here you can check if the user has the correct role 
    // or implement more complex and custom authorization logic if necessary 
    } 
} 

は、その後、あなたのJavaのセキュリティ設定では、このメソッドを参照し、それに関連するパスフラグメントの値を渡すことができます。

http.authorizeRequests() 
    .antMatchers("/api/v1/project/{projectId}/config") 
    .access("@webSecurity.checkUserHasAccessToProjectId(authentication,#projectId)") 
    ... 
関連する問題