配置文件
<mvc:interceptors>
<mvc:interceptor>
<!--拦截路径 -->
<mvc:mapping path="/order/**"/>
<bean class="拦截类的全类名"></bean>
</mvc:interceptor>
</mvc:interceptors>
本地线程类
public class ObjectThreadLocal {
private static final ThreadLocal<Object> LOCAL = new ThreadLocal<Object>();
public static void set(Object object) {
LOCAL.set(object);
}
public static Object get() {
return LOCAL.get();
}
public static void clear(){
set(null);
}
}
拦截器类
public class LoginInterceptor implements HandlerInterceptor{
@Autowired
private UserService userService;
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
//判断用户是否登录
String ticket = null;
//获取cookie
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if (cookie.getName().equals(SjEnum.CookieKey.SJ_TICKET.toString())) {
//获取cookie的value:ticket
ticket = cookie.getValue();
}
}
//判断ticket是否有值
if (StringUtils.isBlank(ticket)) {
//调往登录页面
response.sendRedirect("/user/login.html");
return false;
}
//看缓存中是否有用户信息
User user = userService.queryUserByTicket(ticket);
if (null == user) {
//缓存信息失效,跳到登录页面
response.sendRedirect("/user/login.html");
return false;
}
//有登陆信息,将其写入
ObjectThreadLocal.set(user);
return true;
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
}
}
获取登录信息
@RequestMapping(value = "submit",method=RequestMethod.POST)
@ResponseBody
public ShangjiResult saveOrder(Order order){
//获取用户的信息
User user = (User)ObjectThreadLocal.get();
order.setUserId(user.getId());
order.setBuyerNick(user.getUsername());
return orderService.saveOrder(order);
}