最近在做一个java web项目(自己随便想的),遇到一个这个的需求,就是从后台数据库根据用户id数据查询用户信息给前端用作个人主页展示吧!,但是后台数据库中用户信息中是有密码字段(虽然进行了加密处理)的,对于这个密码数据,很明显在这个需求上是不需要,为此个人觉得这是一个无效数据,如果把这个数据也传给前端,万一被人破解了加密数据呢?(这只是举个例子而已,虽然觉得这样也毫无意义,但是别人可不是这样认为的)。
Java Web项目中无效数据怎样处理?
- 1. 举个例子
- 2. 总结
1. 举个例子
我的解决方法是在mapper.xml映射文件中不传回密码字段即可,如下:
<resultMap id="userMap2" type="User">
<id column="u_id" property="uId"/>
<result column="u_account_name" property="uAccountName"/>
<result column="u_email" property="uEmail"/>
<result column="u_name" property="uName"/>
</resultMap>
<select id="selectById" resultMap="userMap2">
select u_id, u_account_name, u_email, u_name
from user where u_id = #{uId}
</select>
后台返回给前端数据:
这个uPassword字段为空。
这样做显得这个链接的后台sql查询语句中的确查询了u_password这个字段,但是映射上没有给而已,从而返回结果中uPassword这个字段,但是结果为null。个人觉得也可以再写一个实体类,这个实体类缺少uPassword这个变量,映射文件基本差不多,这样返回结果中就没有这个uPassword字段了。当然,第1种方式再进行处理一下,也行。
package com.example.demo.entity;
import lombok.Data;
import lombok.ToString;
@Data
@ToString
public class User2 {
private Integer uId;
private String uAccountName;
private String uEmail;
private String uName;
}
映射文件
<resultMap id="userMap3" type="User2">
<id column="u_id" property="uId"/>
<result column="u_account_name" property="uAccountName"/>
<result column="u_email" property="uEmail"/>
<result column="u_name" property="uName"/>
</resultMap>
<select id="selectById2" resultMap="userMap3">
select u_id, u_account_name, u_email, u_name
from user where u_id = #{uId}
</select>
在第1中方式的基础上进行处理,直接利用JSONArray包的方法进行处理,返回结果(字符串)也行.
【注】:输出结果中第一个为map对象,可以看到uPassword字段值为null,但是转为json数据之后,把值为null的键过滤掉了,从而结果没有这个字段uPassword。
package com.example.demo.utils;
import com.alibaba.fastjson2.JSONArray;
import java.util.HashMap;
public class MessgaeUtils {
// 将map对象转换成json对象
public static String getObjStr(HashMap<String,Object> map){
return JSONArray.toJSONString(map);
}
}
发现使用这个方法,可以对map对象中值为null进行过滤处理。
2. 总结
上面只是举个例子,像查询用户信息的接口个人觉得uPassword个人觉得都不应该返回给前端的(过去个人刚学习的时候,把这个数据返回给了前端,现在想起来感觉很好笑,当时这个数据还没有加密处理,也就是明文,别人懂一些这个知识的,很容易就把我的账号或者其他人的账号盗取了),也有其他很多数据,也不需要传回给前端(比如一个管理系统中,查询用户年龄大于多少的用户信息,不需要把用户头像存储路径返回给前端,应为作为后台管理系统的前端在这里的需求是看用户数据,至于用户头像并不怎么关注,而对于个人主页而言,用户头像存储路径则最好返回给前端,除非没有这个字段,这样显得美观一些吧!后台管理的界面看重的是数据,而网页界面可以更看重美观与功能便捷吧!),但是这些无效数据返回前端,一旦总的数据数据很大,那么必然会影响到界面的响应速度的,所以处理好这些无效数据是很有必要的。当然,这毕竟是我的个人见解,欢迎各位大佬评论指正哈!