服务器返回http状态码401,华为平板不能解析
使用token的机制,后台使用的是ssm框架,使用springmvc拦截器校验app用户是否已经登录。由于没有找到方法直接在拦截器中返回json数据,只能通过response.setStatus(401)来通知app端需要登录,使用华为手机和别的测试机都没问题,但今天使用华为的平板,则发现获取不了401状态码,报了一个空指针异常,部分错误:
05-10 16:24:04.900: W/x_log:HttpRetryHandler.canRetry(L:64)(30512): The Request Method can not be retried.
由于安卓的人走了,明天再补齐所有错误!
我服务器的代码是这样的:
public class WalletInterceptor extends HandlerInterceptorAdapter {
// 不拦截的url
private List<String> uncheckUrls;
public void setUncheckUrls(List<String> uncheckUrls) {
this.uncheckUrls = uncheckUrls;
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("进入拦截器");
// 如果为登录,注册,获取验证码的接口,则不拦截
String requestUrl = request.getRequestURI();
if (uncheckUrls.contains(requestUrl)) {
System.out.println("跳过拦截器");
return super.preHandle(request, response, handler);
}
// 获取token和ID
String token = request.getParameter("token");
String ID = request.getParameter("ID");
System.out.println("token:" + token + "===" + "ID" + ID);
if (token == null || "".equals(token)) {
// 不存在则抛出一个401异常给移动端
response.setStatus(401);
return false;
}
// 判断是否存在连接,不存在则要通知前端登录
Jedis jedis = RedisUtils.getJedis();
byte[] by = jedis.get(token.getBytes());
if ((by == null) || (!(new String(by)).equals(walletID))) {
// 不存在连接,则抛一个401给移动端
response.setStatus(401);
return false;
}
System.out.println("校验成功");
return super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
super.postHandle(request, response, handler, modelAndView);
}
}
第一次发帖,有什么写的不好的地方请指出来,下次发帖再改善一下