package com.feetao.web.interceptor;
import javax.annotation.Resource;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.feetao.web.constants.Constants;
import com.feetao.web.service.MemberService;
import com.feetao.web.support.RequestContextHolder;
import com.feetao.web.support.RequestData;
import com.feetao.web.support.UrlContainer;
public class PrepareUtilsInterceptor implements HandlerInterceptor {
private static Logger logger = LoggerFactory.getLogger(PrepareUtilsInterceptor.class);
@Resource
private MemberService memberService;
@Resource
private UrlContainer urlContainer;
@Resource
private RequestContextHolder requestContextHolder;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String cookieValue = request.getParameter(Constants.COOKIEKEY);
boolean iscoming = false;
if(StringUtils.isBlank(cookieValue)) {
Cookie[] cookies = request.getCookies();
if(cookies != null) {
for(Cookie cookie : cookies) {
if(Constants.COOKIEKEY.equals(cookie.getName())) {
cookieValue = cookie.getValue();
break;
}
}
}
} else {
iscoming = true;
Cookie cookie = new Cookie(Constants.COOKIEKEY , cookieValue);
cookie.setPath("/");
response.addCookie(cookie);
}
RequestData data = urlContainer.parserCookie(cookieValue);
logger.info("url:" + request.getRequestURI() + " ; data:" + data);
//TODO 需要一个错误跳转地址
if(data == null) return false;
if(iscoming) {
memberService.enterMember(data.getOpenId(), data.getUserId());
response.sendRedirect(urlContainer.get("index"));
return false;
}
requestContextHolder.set(data);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
if(modelAndView != null)
modelAndView.addObject("urlUtil" , urlContainer.getUrls());
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
requestContextHolder.remove();
}
}