在做前后端分离的时候,我们需要通过JSON数据的传递来实现相应的业务功能,例如在做登录接口的时候,我们可以使用Spring Security安全框架进行认证登录,将用户信息等数据保存到Authentication中,然后给前端返回相应的JSON数据,这些信息肯定会包含用户账号密码等一系列已经保存在数据库中用户的信息。
像下面这样的JSON数据:
下面是重写登录成功的时候认证的方法:
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中的一些属性忽略掉,需要注意的是序列化和反序列化都会受到影响。
积少成多,滴水穿石!