我们通过浏览器观察到此时用户的全部信息都在,这样极为不靠谱,所以我们应当在返回用户信息之前,将用户的敏感信息进行隐藏。
采用的核心思路就是:书写一个UserDto对象,这个UserDto对象就没有敏感信息了,我们在返回前,将有用户敏感信息的User对象转化成没有敏感信息的UserDto对象,那么就能够避免这个尴尬的问题了
将返回客户端的user实体类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("tb_user") public class User implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO) private Long id; private String phone; private String password; private String nickName; private String icon = ""; private LocalDateTime createTime; private LocalDateTime updateTime; }
|
转化为UserDTO类型
1 2 3 4 5 6
| @Data public class UserDTO { private Long id; private String nickName; private String icon; }
|
UserServiceImpl:
不过 Hutool工具已经给我们封装好了, 可以自动把User的属性拷贝到UserDTO对象里。如下:
1 2
| session.setAttribute("user", BeanUtils.copyProperties(user,UserDTO.class));
|
LoginInterceptor拦截器处:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session= request.getSession(); Object user = session.getAttribute("user"); if (user==null) { response.setStatus(401); return false; } UserHolder.saveUser((UserDTO) user); return true; }
|