2017-01-03 8 views
11

私は別の消費者を持つAPIを持っています。私は彼らに春のセキュリティにおける彼らの役割に基づいて関連文書を入手してほしい。Swagger + Springセキュリティ - ロールに基づいたメソッドを非表示にする

例:

API操作Aは

役割Aと役割BにくびれのAPI操作Bは

API操作のCは、私はすべての

ために開いているロールBにくびれですspringfox、spring 4、spring rest、securityを使用しています。

@ApiIgnoreと呼ばれる注釈があります。

これはすべて可能ですか?

+0

どのように '@のApiIgnore'をご利用の場合に有用であろうか?次のようにいくつかのリソースが表示されないようにするだけです... ロール、ユーザー、権限などを格納するテーブルを持つSpring Securityモデルを使用している場合は、エンドポイントを作成してこのデータを取得できます。スワッガーマッピングが本当に残りの注釈を必要とするため、これらのすべてをリソースとして作成します。 – bosco

+0

私はおそらく、役割が存在しなかったapiignoreを利用した私自身の注釈を書くことができたと考えています。またはそのようなものです。 –

答えて

-4

あなたはこれをすでに見ているかもしれませんが、SpringFox自体がセキュリティ設定の仕組みを提供しています。公式なSpringFoxのドキュメントではthis section、例としてはthis sectionを参照してください(注記#14と#15の注記)。

異なるコンシューマがAPIを表示できても、まだAPIを実行できない場合は、@Secured注釈をAPIに適切な役割で追加することを検討できます。例えば

:@Securedが動作するために

@Secured ({"ROLE_A", "ROLE_B") 
@RequestMapping ("/open/to/both") 
public String operationA() { 
    // do something 
} 

@Secured ("ROLE_B") 
@RequestMapping ("/open/to/b/only") 
public String operationB() { 
    // do something 
} 

// No @Secured annotation here 
@RequestMapping ("/open/to/all") 
public String operationC() { 
    // do something 
} 

はあなたSecurityConfigクラス(またはものは何でも、あなたが持っている1)で@EnableGlobalMethodSecurity (securedEnabled = true)を追加したことを確認します。

+0

ありがとうございますが、これで私の問題は解決しません。私は既にロールでアプリケーションを保護しています。ドキュメントにそのことを考慮してほしいです。 –

+0

@EspenSchulstadあなたの問題の解決策を見つけましたか?ありがとう – drenda

-2

ブロッククォーグ 以下のコードスニペットをセキュリティ設定ファイルで使用することができます。また、拡張GlobalMethodSecurityConfigurationが必要です。

@Autowired Auth2ServerConfiguration auth2ServerConfiguration;コードの下にAPIの使用中

@Override 
    protected MethodSecurityExpressionHandler createExpressionHandler() { 
     return new OAuth2MethodSecurityExpressionHandler(); 
    } 

@PreAuthorize("hasRole('ROLE_ADMIN') and hasRole('ROLE_USER')") 
@Transactional(readOnly = true) 
public @ResponseBody ModelAndView abc() { 
    //do something 
    } 
関連する問題