package com.alatus.mall.cart.interceptor; import com.alatus.common.constant.AuthServerConstant; import com.alatus.common.constant.CartConstant; import com.alatus.common.vo.MemberRespVo; import com.alatus.mall.cart.vo.UserInfoTo; import org.apache.commons.lang.StringUtils; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.util.UUID; public class CartInterceptor implements HandlerInterceptor { public static ThreadLocal<UserInfoTo> threadLocal = new ThreadLocal<>(); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { UserInfoTo userInfoTo = new UserInfoTo(); HttpSession session = request.getSession(); // 用户已登录 MemberRespVo memberRespVo = (MemberRespVo) session.getAttribute(AuthServerConstant.LOGIN_USER); if(memberRespVo!=null){ userInfoTo.setUserId(memberRespVo.getId()); } // 有临时用户 Cookie[] cookies = request.getCookies(); if(cookies!=null&&cookies.length>0){ for (Cookie cookie : cookies) { if(CartConstant.TEMP_USER_COOKIE_NAME.equals(cookie.getName())){ userInfoTo.setUserKey(cookie.getValue()); } } } // 如果没有临时用户,也没有登录 if(StringUtils.isEmpty(userInfoTo.getUserKey())){ userInfoTo.setUserKey(UUID.randomUUID().toString()); } threadLocal.set(userInfoTo); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { UserInfoTo userInfoTo = threadLocal.get(); if(userInfoTo.getUserId()!=null){ Cookie[] cookies = request.getCookies(); for (Cookie cookie : cookies) { if(CartConstant.TEMP_USER_COOKIE_NAME.equals(cookie.getName())){ cookie.setMaxAge(CartConstant.TEMP_USER_COOKIE_TIMEOUT); response.addCookie(cookie); } } } else{ Cookie newCookie = new Cookie(CartConstant.TEMP_USER_COOKIE_NAME,userInfoTo.getUserKey()); newCookie.setDomain("alatusmall.com"); newCookie.setMaxAge(CartConstant.TEMP_USER_COOKIE_TIMEOUT); response.addCookie(newCookie); } } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { HandlerInterceptor.super.afterCompletion(request, response, handler, ex); } }
package com.alatus.mall.cart.interceptor; import com.alatus.common.constant.AuthServerConstant; import com.alatus.common.constant.CartConstant; import com.alatus.common.vo.MemberRespVo; import com.alatus.mall.cart.vo.UserInfoTo; import org.apache.commons.lang.StringUtils; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.util.UUID; public class CartInterceptor implements HandlerInterceptor { public static ThreadLocal<UserInfoTo> threadLocal = new ThreadLocal<>(); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { UserInfoTo userInfoTo = new UserInfoTo(); HttpSession session = request.getSession(); // 用户已登录 MemberRespVo memberRespVo = (MemberRespVo) session.getAttribute(AuthServerConstant.LOGIN_USER); if(memberRespVo!=null){ userInfoTo.setUserId(memberRespVo.getId()); } // 有临时用户 Cookie[] cookies = request.getCookies(); if(cookies!=null&&cookies.length>0){ for (Cookie cookie : cookies) { if(CartConstant.TEMP_USER_COOKIE_NAME.equals(cookie.getName())){ userInfoTo.setUserKey(cookie.getValue()); } } } // 如果没有临时用户,也没有登录 if(StringUtils.isEmpty(userInfoTo.getUserKey())){ userInfoTo.setUserKey(UUID.randomUUID().toString()); } threadLocal.set(userInfoTo); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { UserInfoTo userInfoTo = threadLocal.get(); if(userInfoTo.getUserId()!=null){ Cookie[] cookies = request.getCookies(); for (Cookie cookie : cookies) { if(CartConstant.TEMP_USER_COOKIE_NAME.equals(cookie.getName())){ cookie.setMaxAge(CartConstant.TEMP_USER_COOKIE_TIMEOUT); response.addCookie(cookie); } } } else{ Cookie newCookie = new Cookie(CartConstant.TEMP_USER_COOKIE_NAME,userInfoTo.getUserKey()); newCookie.setDomain("alatusmall.com"); newCookie.setMaxAge(CartConstant.TEMP_USER_COOKIE_TIMEOUT); response.addCookie(newCookie); } } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { HandlerInterceptor.super.afterCompletion(request, response, handler, ex); } }
商城项目改进临时用户在Cookie的保存逻辑完善临时用户功能-----商城项目
最新推荐文章于 2024-09-26 15:45:00 发布