package com.sohu.cache.web.controller;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.sohu.cache.constant.AppUserTypeEnum;
import com.sohu.cache.entity.AppUser;
import com.sohu.cache.entity.LoginResult;
import com.sohu.cache.util.ConstUtils;
import com.sohu.cache.web.enums.AdminEnum;
import com.sohu.cache.web.enums.LoginEnum;
import com.sohu.cache.web.service.UserLoginStatusService;
import com.sohu.cache.web.util.LoginUtil;
/**
* 登录逻辑
*
* @author leifu
* @Time 2014年6月12日
*/
@Controller
@RequestMapping("manage")
public class LoginController extends BaseController {
@Resource(name = "userLoginStatusService")
private UserLoginStatusService userLoginStatusService;
/**
* 用户登录界面
*
* @param request
* @return
*/
@RequestMapping(value = "/login", method = RequestMethod.GET)
public ModelAndView init(HttpServletRequest request, HttpServletResponse response, Model model) {
model.addAttribute(ConstUtils.RREDIRECT_URL_PARAM, request.getParameter(ConstUtils.RREDIRECT_URL_PARAM));
return new ModelAndView("manage/login");
}
/**
* 用户登录
*
* @param userName 用户名
* @param password 密码
* @param isAdmin 是否勾选超级管理员选项,1是0否
* @return
*/
@RequestMapping(value = "/loginIn", method = RequestMethod.POST)
public ModelAndView loginIn(HttpServletRequest request,
HttpServletResponse response, Model model, String userName, String password, boolean isAdmin) {
// 登录结果
LoginResult loginResult = new LoginResult();
loginResult.setAdminEnum((isAdmin == true ? AdminEnum.IS_ADMIN : AdminEnum.NOT_ADMIN));
loginResult.setLoginEnum(LoginEnum.LOGIN_WRONG_USER_OR_PASSWORD);
AppUser userModel = null;
if (ConstUtils.SUPER_ADMIN_NAME.equals(userName)) {
userModel = userService.getByName(userName);
if (userModel != null && ConstUtils.SUPER_ADMIN_PASS.equals(password)) {
loginResult.setLoginEnum(LoginEnum.LOGIN_SUCCESS);
} else {
loginResult.setLoginEnum(LoginEnum.LOGIN_WRONG_USER_OR_PASSWORD);
}
} else {
if (LoginUtil.passportCheck(userName, password)) {
// 同时要验证是否有cachecloud权限
userModel = userService.getByName(userName);
if (userModel != null && userModel.getType() != AppUserTypeEnum.NO_USER.value()) {
if (isAdmin) {
if (AppUserTypeEnum.ADMIN_USER.value().equals(userModel.getType())) {
loginResult.setLoginEnum(LoginEnum.LOGIN_SUCCESS);
} else {
loginResult.setLoginEnum(LoginEnum.LOGIN_NOT_ADMIN);
}
} else {
loginResult.setLoginEnum(LoginEnum.LOGIN_SUCCESS);
}
} else {
// 用户不存在
loginResult.setLoginEnum(LoginEnum.LOGIN_USER_NOT_EXIST);
}
}
}
// 登录成功写入登录状态
if (loginResult.getLoginEnum().equals(LoginEnum.LOGIN_SUCCESS)) {
userLoginStatusService.addLoginStatus(request, response, userModel.getId().toString());
}
model.addAttribute("success", loginResult.getLoginEnum().value());
model.addAttribute("admin", loginResult.getAdminEnum().value());
return new ModelAndView();
}
/**
* 用户注销
*
* @param reqeust
* @return
*/
@RequestMapping(value = "/logout", method = RequestMethod.GET)
public ModelAndView logout(HttpServletRequest request, HttpServletResponse response) {
userLoginStatusService.removeLoginStatus(request, response);
return new ModelAndView("redirect:/manage/login");
}
}