在JEE中有@RunAs("role_name")
註釋,它允許在特定角色下調用應用程序方法。@RunAs是否存在Spring模擬?
在春天有沒有@RunAs
模擬? 如果沒有等效的註釋,這是其他方式來調用某些角色的方法?
在JEE中有@RunAs("role_name")
註釋,它允許在特定角色下調用應用程序方法。@RunAs是否存在Spring模擬?
在春天有沒有@RunAs
模擬? 如果沒有等效的註釋,這是其他方式來調用某些角色的方法?
設置彈簧RunAsManager然後用@Secured("RUN_AS_<MY_ROLE>")
註釋您的方法,其中<MY_ROLE>
是您希望執行該方法的角色。
這裏的關鍵是前綴RUN_AS
。它觸發運行作爲添加後綴角色的邏輯。
使用Spring Security,您可以使用@PreAuthorize("hasRole('ROLE')")
爲:
@PreAuthorize("hasRole('ROLE_SUPER_ADMIN') or hasRole('ROLE_ADMIN')")
public ResponseEntity<UserResponse> getAllUserByRole(...) {
}
它是什麼,是說,這種特殊的方法可以通過只ROLE要麼SUPER_ADMIN
或ADMIN
用戶調用。
我還發現了一個將自定義用戶添加到安全上下文的快速解決方案。 因爲我需要這個來調用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);
但是,這不僅僅是一種**安全**方法與這個角色?因爲我需要相反的東西。 – Reynard