2017-09-25 4 views
4

JEEには、特定の役割の下でアプリケーションメソッドを呼び出すことを可能にする、@RunAs("role_name")アノテーションがあります。@RunAsのSpringアナログはありますか?

春に@RunAsアナログがありますか? 同等のアノテーションがない場合、これはロールを持つメソッドを呼び出す他の方法ですか?この特定の方法は、ROLE SUPER_ADMINまたはADMINのいずれかを持つ唯一のユーザーによって呼び出すことができると言っている何

@PreAuthorize("hasRole('ROLE_SUPER_ADMIN') or hasRole('ROLE_ADMIN')") 
    public ResponseEntity<UserResponse> getAllUserByRole(...) { 
    } 

:春のセキュリティが強化された

答えて

1

スプリングを設定して@Secured("RUN_AS_<MY_ROLE>")と注釈を付けてください。<MY_ROLE>はメソッドを実行するロールです。

ここでのキーは、プレフィックスRUN_ASです。それは、論理として実行をトリガし、接尾辞付きの役割を追加します。

2

、あなたはとして@PreAuthorize("hasRole('ROLE')")を使用することができます。

+0

しかし、この役割を持つ**メソッドを**安全にする方法ではありませんか?私は反対が必要なので。 – Reynard

0

また、セキュリティコンテキストにカスタムユーザーを追加するという簡単な解決策も見つかりました。 私はKafkaリスナークラスのセキュリティで保護されたサービスメソッドを呼び出すためにこれを必要とするので、それ自体は認証プロセスの影響を受けません。

User user = new User("SYSTEM", "SYSTEM", "SYSTEM"); 
UserDetailsImpl userDetails = new UserDetailsImpl(user, 
Arrays.asList(<YOUR_ROLE_HERE>)); 
// UserDetailsImpl - class that implements 
// org.springframework.security.core.userdetails.UserDetails 
UsernamePasswordAuthenticationToken token = 
    new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()); 
SecurityContextHolder.getContext().setAuthentication(token); 
関連する問題