在JEE中有@RunAs("role_name")
注释,允许在特定角色下调用应用程序方法。
Spring中是否有@RunAs
类似物?
如果没有等效的注释,这是调用具有某种角色的方法的其他方法吗?
答案 0 :(得分:2)
使用Spring Security,您可以将@PreAuthorize("hasRole('ROLE')")
用作:
@PreAuthorize("hasRole('ROLE_SUPER_ADMIN') or hasRole('ROLE_ADMIN')")
public ResponseEntity<UserResponse> getAllUserByRole(...) {
}
它的含义是,只有具有ROLE SUPER_ADMIN
或ADMIN
的用户才能调用此特定方法。
答案 1 :(得分:1)
设置弹簧RunAsManager,然后使用@Secured("RUN_AS_<MY_ROLE>")
为您的方法添加注释,其中<MY_ROLE>
是您希望执行该方法的角色。
这里的关键是前缀RUN_AS
。它触发运行作为添加后缀角色的逻辑。
答案 2 :(得分: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);