package com.hehenian.mobile.web.controller.account;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.hehenian.biz.common.account.IUserInfoService;
import com.hehenian.biz.common.account.IUserService;
import com.hehenian.biz.common.account.dataobject.AccountUserDo;
import com.hehenian.biz.common.account.dataobject.LoginInfoRelate;
import com.hehenian.biz.common.identifycode.IIdentifyCodeService;
import com.hehenian.common.constants.HHNConstants;
import com.hehenian.common.session.SessionProvider;
import com.hehenian.common.session.cache.SessionCache;
import com.hehenian.common.utils.ResponseUtils;
import com.hehenian.mobile.common.constants.WebConstants;
import com.hehenian.mobile.web.controller.BaseController;
@Controller
@RequestMapping(value = "/login")
public class LoginController extends BaseController {
private static final Logger logger = Logger.getLogger(LoginController.class);
@Autowired
private IUserService userService;
@Autowired
private IIdentifyCodeService identifyCodeService;
@Autowired
private IUserInfoService userInfoService;
@Resource
private SessionCache sessionCache;
@Resource
private SessionProvider session;
//登录页验证码标识
private final static String pageId = "userlogin";
/**
* 登录入口
* @return
* @author: chenzhpmf
* @date 2015-3-29 上午3:36:11
*/
@RequestMapping(value = "index")
public String index(){
return "login/login";
}
/**
* 登录
* @Description: TODO
* @param response
* @param user
* @return 1用户名或密码未输入|2验证码输入错误
* @author: chenzhpmf
* @date 2015-3-29 上午3:48:38
*/
@RequestMapping(value = "login", method = RequestMethod.POST)
public void login(HttpServletRequest request,HttpServletResponse response) {
JSONObject jsonObject = new JSONObject();
String loginInfo = request.getParameter("userName");
String password = request.getParameter("password");
String code = request.getParameter("code");
//是否输入用户名密码
if (StringUtils.isBlank(loginInfo) || StringUtils.isBlank(password)){
jsonObject.put("result", 1);
ResponseUtils.renderText(response, null, jsonObject.toString());
return;
}
//验证码是否正确
String sessionCode = (String) request.getSession().getAttribute(pageId + "_checkCode");
if(StringUtils.isBlank(code) || !code.equals(sessionCode)){
jsonObject.put("result", 2);
ResponseUtils.renderText(response, null,jsonObject.toString());
return;
}
loginInfo = loginInfo.replaceAll(" ", "");
//获取登录用户userId
LoginInfoRelate lir = userInfoService.getByLoginInfo(loginInfo, LoginInfoRelate.class, true);
AccountUserDo aud = null;
//存储登录渠道
String pwdMd5 = DigestUtils.md5Hex(password + WebConstants.PASS_KEY);
if(lir == null) {
//如果没有处理老数据,兼容老版本,取一次t_user信息
aud = userService.loginWithPwd(loginInfo, pwdMd5);
}else {
aud = userService.getById(lir.getUserId().longValue());
}
if(aud == null || !aud.getPassword().equals(pwdMd5)) {
// 用户名密码错误
jsonObject.put("result", 3);
ResponseUtils.renderText(response, null,jsonObject.toString());
return;
}
//写表信息 最后登录IP 最后登录时间 登录次数 nnd从来没写过!!!
//userService.
request.getSession().setAttribute(HHNConstants.SESSION_INFO, aud);
// 取缓存登录信息
String root = session.getSessionId(request, response);
sessionCache.setAttribute(root, HHNConstants.SESSION_INFO, aud, HHNConstants.SESSION_CACHE_TIME);
String fromUrl = request.getHeader("referer");
jsonObject.put("result", 0);
jsonObject.put("fromUrl", fromUrl);
//
ResponseUtils.renderText(response, "UTF-8", jsonObject.toString());
}
/**
* 退出登录
* @param request
* @param response
* @author: zhanbmf
* @date 2015-3-31 下午3:36:21
*/
@RequestMapping(value = "loginout")
public String loginout(HttpServletRequest request,HttpServletResponse response) {
String root = session.getSessionId(request, response);
sessionCache.setAttribute(root, HHNConstants.SESSION_INFO, null, HHNConstants.SESSION_CACHE_TIME);
session.logout(request, response);
return "redirect:/login/index.do";
}
}