2

私は@PreAuthorizeでカスタムアクセスチェッカーを使用しています:カスタムPreAuthorizeメソッドでRequestMethod-verbを取得することは可能ですか?

@RestController 
@RequestMapping("/users") 
public class Users { 

    @PreAuthorize("@customAccessChecker.hasAccessToMethod('USERS', 'GET')") 
    @RequestMapping(method = RequestMethod.GET) 
    User getUsers() { 
     ... 
    } 

    @PreAuthorize("@customAccessChecker.hasAccessToMethod('USERS', 'POST')") 
    @RequestMapping(method = RequestMethod.POST) 
    User addUser() { 
     ... 
    } 
} 

私は@PreAuthorize注釈内の文字列「GET」と「POST」を取り除くしたいと思います。どうすればhasAccessToMethodの変数入力として@RequestMappingで使用されるRequestMethodを取得することは可能ですか?

答えて

2

注釈からデータを取得するためのSpEL式は覚えていませんが、SpELを使用して#文字のメソッドのパラメータから値を取得できます。 HttpServletRequestを挿入すると、希望の内容を含むgetMethodメソッドがあります。

@PreAuthorize("@customAccessChecker.hasAccessToMethod('USERS', #request.method)") 
@RequestMapping(method = RequestMethod.POST) 
User addUser(HttpServletRequest request) { 
    // ... 
} 
+0

これはまったく答えです。注釈値は一定のSpringを期待するので、それをいくつかのenum値と連結することはできません。 – Andrew

+0

恐ろしい!それは完璧に働いた。 – maxo

+0

リクエストから、ハードコードされた「USERS」文字列を使用する代わりに、#request.servletPathを使用してリソース名を取得することもできます。 – maxo

関連する問題