2017-04-24 23 views
1

私は春のセキュリティのためのカスタムメソッドを使用しています。私は匿名の許可リストを渡す必要があります。私はいくつかの場所で使用されているので、そのリストを外部に保存したいそのリストを参照する方法を理解しているようだ。それはいつもヌルとして通っているようだ。クラスのSpEL参照インスタンス変数

@RestController 
@RequestMapping("/example") 
public class MyController { 

...constructor/other stuff 
public List<String> perms_I_want_to_reference = Arrays.asList("super","long","list") 

@PreAuthorizze("@securityService.MyCustomMethod(principal, *this where I want to reference perms*) 
@RequestMapping(method = RequestMethod.GET) 
public ResponseEntity<?>doSomethingTopSecret(){ 
} 

} 

私は#と静的リストを作り、Tを使用して試してみましたが、今のところ何も作業していません。

+0

あなたがWhayそれらを渡す必要がありますか?あなたはsecurityService.MyCustomMethodからアクセスできませんか? –

+0

だから、たくさんのコントローラーがそのサービスを利用していて、誰がそれを誰が呼んでいるのかは分かっていません。私はリファクタントを誰かが知っているか、誰が呼び出しているかについてのフィードバックを受け取ることができます。私はpermsのリストを静的にしてTを使って作業していますが、誰かが知っているかどうかわからない場合は、 – Barry

答えて

1

アノテーションからフィールドにアクセスする唯一の方法は、リフレクションによるものです。これを行うには、そのクラスのフィールドへのアクセス権が必要です。私は式が評価されているときに現在のクラスへの参照を取得する方法を聞いていない、しかし、あなたが欲しいものを行うための一つの方法は、Bean自体を参照すると、フィールドにアクセスすることです:

public List<String> perms_I_want_to_reference = Arrays.asList("super","long","list"); 

@PreAuthorizze("@securityService.MyCustomMethod(principal, @myController.perms_I_want_to_reference)") 
@RequestMapping(method = RequestMethod.GET) 
public ResponseEntity<?>doSomethingTopSecret(){ } 
+0

のようにして、私は 'T'を完全なパッケージ名で使用できます。私はそれがベストを読むように感じたので、私は定数をロードした別の豆を使用するあなたのソリューションのようなもので終わった。完全修飾されたパッケージと変数名は、私にとっては冗長であった。 – Barry

関連する問題