Java後端避坑——如何使用註解忽略掉JavaBean的屬性值

陳小北發表於2019-04-19

在做前後端分離的時候,我們需要通過JSON資料的傳遞來實現相應的業務功能,例如在做登入介面的時候,我們可以使用Spring Security安全框架進行認證登入,將使用者資訊等資料儲存到Authentication中,然後給前端返回相應的JSON資料,這些資訊肯定會包含使用者賬號密碼等一系列已經儲存在資料庫中使用者的資訊。

像下面這樣的JSON資料:

Java後端避坑——如何使用註解忽略掉JavaBean的屬性值

下面是重寫登入成功的時候認證的方法:

 public void onAuthenticationSuccess(HttpServletRequest req, HttpServletResponse resp, Authentication authentication) throws IOException, ServletException {
    resp.setContentType("application/json;charset=utf-8");
    PrintWriter out = resp.getWriter();
    ObjectMapper om = new ObjectMapper();
    String s = om.writeValueAsString(RespBean.ok("登入成功!",authentication.getPrincipal()));
    out.write(s);
    out.flush();
    out.close();
 }
複製程式碼

這個時候就會涉及到一個問題,我們沒有必要將使用者的密碼資訊也返回到前端去,因為那樣會存在使用者資訊不安全。那我們應該怎麼辦呢?通常我們一般會想要把setPassword設定為null值,然返回的密碼為空,這是一種方法。 不過還有一種更為簡便的方法,就是在getPassword的方法上加上 @JsonIgnore,簡潔又方便。

示例程式碼如下:

@JsonIgnore//生成json時忽略這個欄位
@Override
public String getPassword() {
    return password;
}
複製程式碼

@JsonIgnore,這個註解的作用是JSON序列化時將Java bean中的一些屬性忽略掉,需要注意的是序列化和反序列化都會受到影響。

積少成多,滴水穿石!

相關文章