是否有@RunAs的Spring模拟?

时间:2017-09-25 15:37:40

标签: java spring spring-security

在JEE中有@RunAs("role_name")注释,允许在特定角色下调用应用程序方法。

Spring中是否有@RunAs类似物? 如果没有等效的注释,这是调用具有某种角色的方法的其他方法吗?

3 个答案:

答案 0 :(得分:2)

使用Spring Security,您可以将@PreAuthorize("hasRole('ROLE')")用作:

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

它的含义是,只有具有ROLE SUPER_ADMINADMIN的用户才能调用此特定方法。

答案 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);