[英]calling rest api with requestbody and authenticationprincipal
我有一個 rest api ,它可以基於角色訪問其 http POST 方法。 它使用 spring-security 僅對授權用戶訪問 api。
我有2個問題,
外部客戶端如何通過請求正文和用戶 object (@AuthenticationPrincipal) 進行此 api 調用
如何編寫 junit 來測試下面的代碼,
@PreAuthorize("hasAuthority('ADMIN')") @PostMapping("/api/access/submit") public ResponseEntity<OrderAdminResponse> create(@RequestBody OrderAdminRequest orderAdminSubmitRequest,@AuthenticationPrincipal UserObject user) { return ResponseEntity.accepted().body(orderService.submit(orderAdminSubmitRequest)); }
我的用戶 Object 在下面,
<code>
public class UserObject {
private final String name;
private final String id;
private final String email;
private UserObject(String name, int id, String email){
this.name = name; this.id = id; this.email = email
}
public Collection<String> getRoles() {
return
(Collection)this.getAuthorities().stream()
.map(GrantedAuthority::getAuthority).collect(Collectors.toList());
}
public boolean isUserInRole(String role) {
return this.getAuthorities().stream().anyMatch((a) -> {
return a.getAuthority().equals(role);
})
}
}
</code>
當您向經過身份驗證的用戶發出請求時,controller 將自動填充身份驗證主體。
例如,如果您使用 HTTP 基本身份驗證來保護您的端點,則將從Authorization
header 填充主體。 無論您是否提取主體,您的請求正文都保持不變。
測試 controller 的一種簡單方法是使用 Spring Security 提供的支持。
如果您使用的是MockMvc
,一種選擇是使用后處理器來調用不同類型的用戶的端點。
this.mvc.perform(post("/api/access/submit")
.content("...")
.with(user("user").roles("USER")))
.andExpect(status().isUnauthorized());
this.mvc.perform(post("/api/access/submit")
.content("...")
.with(user("admin").roles("ADMIN")))
.andExpect(status().isOk());
您可以在此處的文檔中了解有關 Spring 安全測試支持的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.