设计一个单态登录的功能,在拦截器处对sessionId进行了校验,如果已在其他设备登录会返回错误信息,但是vue前端怎么接收这个错误信息并根据错误信息进行踢人下线呢
public class JwtIntercepter implements HandlerInterceptor {
private AuthenticationCheck AuthticationCheck;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if("OPTIONS".equals(request.getMethod().toUpperCase())){
return true;
}
String token = request.getHeader("token");
Map map = new HashMap();
try {
JwtUtils jwtUtils = new JwtUtils();
jwtUtils.verify(token);
AuthticationCheck.getToken(token);
try{
LoginListener loginListener = new LoginListener();
loginListener.checkSessionId(token);
}catch (Exception e){
e.printStackTrace();
map.put("msg",e.getMessage());
String json = new ObjectMapper().writeValueAsString(map);
response.setContentType("application/json;charset=UTF-8");
response.getWriter().println(json);
return false;
}
System.out.println("拦截器role"+jwtUtils.getRole(request));
return true;
}catch (SignatureVerificationException e){
e.printStackTrace();
map.put("msg","无效签名");
}catch (TokenExpiredException e){
e.printStackTrace();
map.put("msg","令牌过期");
}catch (Exception e){
e.printStackTrace();
map.put("msg","令牌无效");
}
map.put("state",false);
String json = new ObjectMapper().writeValueAsString(map);
response.setContentType("application/json;charset=UTF-8");
response.getWriter().println(json);
return false;
}
}