簡體   English   中英

使用 requestbody 和 authenticationprincipal 調用 rest api

[英]calling rest api with requestbody and authenticationprincipal

我有一個 rest api ,它可以基於角色訪問其 http POST 方法。 它使用 spring-security 僅對授權用戶訪問 api。

我有2個問題,

  1. 外部客戶端如何通過請求正文和用戶 object (@AuthenticationPrincipal) 進行此 api 調用

  2. 如何編寫 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM