1、添加FastJson依赖
在pom.xml中添加如下依赖
<!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
2、在Interceptor中调用自定义方法
在interceptor判断token是否通过检验,否则调用TokenUtils类中的tokenDenied方法,往response中写入需要传回的信息,并return false。
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
boolean flag = false;
// 获取token------
String token = request.getHeader("Token");
if(StringUtils.isNull(token)) {
MyJsonResult.tokenDenied(response, "token为空");
return false;
}
//token验证
flag = TokenUtils.checkToken(token);
//token验证失败
if (!flag) {
MyJsonResult.tokenDenied(response);
return false;
}
return true;
}
上面的自定义方法,TokenUtils类中的tokenDenied方法
public static void tokenDenied(HttpServletResponse response) throws IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
ObjectMapper mapper = new ObjectMapper();
try {
mapper.writeValue(response.getWriter(), JsonResult.error("token认证未通过"));
}catch (Exception e) {
e.printStackTrace();
}
}
此时用PostMan测试到的返回结果
{
"code": 0,
"message": "token为空",
"data": null
}
3、关于返回结果遇到的一些问题
开始并没有使用fastjson的ObjectMapper,用的是JSONObject,发现此时返回结果与@RequestBody返回的json结果有一些区别
{
"code": 0,
"message": "token为空"
}
当JSONObject传入的Obejct参数为空直接省略掉了改键值对,前端可能出现bug
public static void tokenDenied(HttpServletResponse response, String message) {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
PrintWriter writer = null;
Object obj = null;
//要返回的json信息
JSONObject jsonObject = new JSONObject();
jsonObject.put("message", message);
jsonObject.put("data", obj);
jsonObject.put("code", 50002);
try {
writer = response.getWriter();
writer.print(jsonObject);
writer.close();
}catch (IOException e) {
e.printStackTrace();
}
}
把Object obj = null; 改成了Object obj = new Object(); 后返回结果为
{
"code": 0,
"message": "token为空",
"data": {}
}
所以推荐使用fastjson的ObjectMapper来作为返回结果,此时与@RequestBody返回的json结果一致