//定义用户拦截器
public classUserInterceptor implements HandlerInterceptor{
@AutowiredprivateJedisCluster jedisCluster;private ObjectMapper objectMapper = newObjectMapper();/**
* 1.获取用户Cookie获取token数据
* 2.判断token中是否有数据
* false 表示没有登陆,则重定向到用户登陆页面
*
* true :表示用户之前登陆过
* 从redis中根据token获取userJSON,
* 再次判断数据是否有数据
*
* false: 没有数据,则重定向到用户登陆页面
* true : 表示有数据,则程序予以放行.*/@Overridepublicboolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {//1.获取Cookiez中的token
String token = null;
Cookie[] cookies=request.getCookies();for(Cookie cookie : cookies) {if("JT_TICKET".equals(cookie.getName())){
token=cookie.getValue();break;
}
}//2.判断token是否有数据
if(token != null){//2.1判断redis集群中是否有数据
String userJSON = jedisCluster.get(token);if(userJSON != null){
User user= objectMapper.readValue(userJSON,User.class);//将user数据保存到ThreadLocal中
UserThreadLocal.set(user);//证明用户已经登陆 予以放行
return true;
}
}//配置重定向
response.sendRedirect("/user/login.html");return false;
}
@Overridepublic voidpostHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {//TODO Auto-generated method stub
}
@Overridepublic voidafterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {//关闭threadLocal
UserThreadLocal.remove();
}
}