2017-09-25 60 views
4

在JEE中有@RunAs("role_name")註釋,它允許在特定角色下調用應用程序方法。@RunAs是否存在Spring模擬?

在春天有沒有@RunAs模擬? 如果沒有等效的註釋,這是其他方式來調用某些角色的方法?

回答

1

設置彈簧RunAsManager然後用@Secured("RUN_AS_<MY_ROLE>")註釋您的方法,其中<MY_ROLE>是您希望執行該方法的角色。

這裏的關鍵是前綴RUN_AS。它觸發運行作爲添加後綴角色的邏輯。

2

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

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

它是什麼,是說,這種特殊的方法可以通過只ROLE要麼SUPER_ADMINADMIN用戶調用。

+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); 
相關問題