Rev 2998 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package in.shop2020.serving.interceptors;import java.util.HashMap;import java.util.Map;import in.shop2020.model.v1.user.User;import in.shop2020.model.v1.user.UserContextService.Client;import in.shop2020.serving.services.UserSessionInfo;import in.shop2020.serving.utils.DesEncrypter;import in.shop2020.thrift.clients.UserClient;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.apache.log4j.Logger;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class CreateUserInterceptor extends AbstractInterceptor {private static final long serialVersionUID = -4125815700236506235L;private static Logger log = Logger.getLogger(CreateUserInterceptor.class);private Map<String, Cookie> cookiesMap = null;private Cookie userCookie = null;private String cookieDomain = "";private DesEncrypter desEncrypter = new DesEncrypter(UserInterceptor.COOKIE_DECRYPTION_STRING);public void setCookieDomain(String cookieDomain) {this.cookieDomain = cookieDomain;}@Overridepublic String intercept(ActionInvocation invocation) throws Exception {log.info("inside create user interceprot");HttpServletRequest request = ServletActionContext.getRequest();HttpSession session = request.getSession(); // Get the existing session or create a new onecreateCookiesMap(request);UserSessionInfo userInfo = null;Cookie userinfoCookie = cookiesMap.get(UserInterceptor.USER_INFO_COOKIE_NAME);//FIXME Remove the if part once we are done with solving the side effected of deleting anonymous users.if(userinfoCookie!=null){userInfo = UserSessionInfo.getUserSessionInfoFromCookieValue(userinfoCookie.getValue());UserClient ucsc = new UserClient();Client userClient = ucsc.getClient();User existingUser = userClient.getUserById(userInfo.getUserId());if(existingUser == null || existingUser.getUserId() == -1){userInfo = new UserSessionInfo(session.getId());request.setAttribute(UserInterceptor.USER_INFO_COOKIE_NAME, userInfo);createUserCookie(userInfo.getUserId(), true);}}else{userInfo = new UserSessionInfo(session.getId());request.setAttribute(UserInterceptor.USER_INFO_COOKIE_NAME, userInfo);createUserCookie(userInfo.getUserId(), true);}return invocation.invoke();}private void createUserCookie(long userId, boolean force) {userCookie = (Cookie) cookiesMap.get(UserInterceptor.USER_ID_COOKIE_NAME);String encryptedUserId = desEncrypter.encrypt(userId + "");if(force || userCookie == null || !(encryptedUserId + "").equals(userCookie.getValue())){userCookie = new Cookie(UserInterceptor.USER_ID_COOKIE_NAME, encryptedUserId);userCookie.setMaxAge(UserInterceptor.SECONDS_IN_YEAR); // one yearuserCookie.setPath("/");if(!cookieDomain.isEmpty()) {userCookie.setDomain(cookieDomain);}log.info("Created new cookie.");cookiesMap.put(UserInterceptor.USER_ID_COOKIE_NAME, userCookie);HttpServletResponse response = ServletActionContext.getResponse();response.addCookie(userCookie);}}private void createCookiesMap(HttpServletRequest request) {cookiesMap = new HashMap<String, Cookie>();Cookie[] cookies = request.getCookies();if(cookies==null)return;for (Cookie cookie : cookies) {cookiesMap.put(cookie.getName(), cookie);}}}