发现错误
我的错误源码:
@Component
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {
/**
* 在执行controller方法之前执行
* 1.需要判断请求接口路径 是否为HandlerMethod(controller方法)
* 2.判断请求头中是否携带token 如果为空 返回错误信息
* 3.不为空,进行登入验证 LoginService checkToken(token)
* 4.验证成功,放行
*/
@Autowired
private LoginService loginService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info("拦截器开始执行");
// 1.判断请求接口路径 是否为HandlerMethod(controller方法)
if (!(handler instanceof HandlerMethod)) {
return true;
}
// 2.判断请求头中是否携带token 如果为空 返回错误信息
String token = request.getHeader("Oauth-Token");
log.info("=================request start===========================");
String requestURI = request.getRequestURI();
log.info("request uri:{}",requestURI);
log.info("request method:{}",request.getMethod());
log.info("token:{}", token);
log.info("=================request end===========================");
if (StringUtils.isBlank(token)) {
Result result = Result.fail(ErrorCode.NO_LOGIN.getCode(), ErrorCode.NO_LOGIN.getMsg());
response.setContentType("application/json;charset=utf-8");
response.getWriter().print(JSON.toJSONString(result));
return false;
}
// 3.不为空,进行登入验证 LoginService checkToken(token)
SysUser sysUser = loginService.checkToken(token);
if (sysUser == null) {
Result result = Result.fail(ErrorCode.NO_LOGIN.getCode(), ErrorCode.NO_LOGIN.getMsg());
response.setContentType("application/json;charset=utf-8");
response.getWriter().print(JSON.toJSONString(result));
return false;
}
// 4.验证成功,放行
UserThreadLocal.setUser(sysUser);
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
UserThreadLocal.remove();
}
}
报错后使用debug发现token无法正常获取(String token = request.getHeader("Oauth-Token");)
值为null,参看前端页面检查请求头信息。
解决错误
发现前端请求头名称和后端设置的不一致
将Oauth-Token改成Authorization就可以正常获取用户信息。