/**
* UserController.java
* 2014-4-16
*/
package com.mtools.core.plugin.auth.web.controller;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.google.common.collect.Lists;
import com.mtools.core.plugin.annotation.AuthAccess;
import com.mtools.core.plugin.annotation.AuthLogin;
import com.mtools.core.plugin.auth.web.BaseController;
import com.mtools.core.plugin.constant.CoreConstans;
import com.mtools.core.plugin.entity.PageInfo;
import com.mtools.core.plugin.entity.Permission;
import com.mtools.core.plugin.entity.RoleVo;
import com.mtools.core.plugin.entity.UserInfo;
import com.mtools.core.plugin.entity.UserRole;
import com.mtools.core.plugin.entiy.vo.UserVo;
import com.mtools.core.plugin.helper.AIPGException;
import com.mtools.core.plugin.helper.CookieUtil;
import com.mtools.core.plugin.helper.FuncUtil;
import com.mtools.core.plugin.helper.JsonParse;
import com.mtools.core.plugin.security.Crypto;
/**
* @author zhang
*
* 2014-4-16
*/
@Controller
public class UserController extends BaseController {
@SuppressWarnings("unchecked")
@AuthAccess
@AuthLogin
@RequestMapping("/login")
public String login(ModelMap model, UserInfo user, String flag,
HttpSession session, HttpServletRequest request,
HttpServletResponse response) throws Exception {
String orgUri = null;
if ("1".equals(flag)) {
UserInfo us = this.userSv.getUserInfo(user);
if (us != null) {
List<UserInfo> onlineUser = null;
onlineUser = (List<UserInfo>) session.getServletContext()
.getAttribute(CoreConstans.ONLINEUSERS);
if (onlineUser == null) {
onlineUser = Lists.newArrayList();
}
us.setFromIp(request.getRemoteHost());
us.setLoginTime(FuncUtil.formatTime(new Date(), "yyyy-MM-dd HH:mm:ss"));
onlineUser.add(us);
session.getServletContext().setAttribute(
CoreConstans.ONLINEUSERS, onlineUser);
List<Permission> perms = authPlugin.getPermOfUser(
us.getUserid(), coreParams.serverName);
us.setPerms(perms);
session.setAttribute(CoreConstans.LOGINGUSER, us);
request.setAttribute(CoreConstans.OPTRESULT, "1");// 操作成功
request.setAttribute(CoreConstans.ORGPARAMS,
JsonParse.obj2json(user));// 操作成功
log.info("org data:" + JsonParse.obj2json(user));
orgUri = CookieUtil.getCookie(request, CoreConstans.REQESTURI);
} else {
model.put(CoreConstans.ERROR_MESSAGE, "用户名或者密码错误,请检查!");
}
}
if (this.getUser(session) == null)
return "front/login";
else if (!FuncUtil.isEmpty(orgUri)) {
String uri = orgUri.substring(1);
CookieUtil.setCookie(response, CoreConstans.REQESTURI, "");
return "redirect:" + uri;
} else
return "redirect:admin/index";
}
@SuppressWarnings("unchecked")
@AuthLogin
@AuthAccess
@RequestMapping("logout")
public String logout(ModelMap m, HttpSession session,
HttpServletRequest request) throws Exception {
UserInfo user = this.getUser(session);
List<UserInfo> onlineUser = null;
onlineUser = (List<UserInfo>) session.getServletContext().getAttribute(
CoreConstans.ONLINEUSERS);
if (onlineUser == null) {
log.debug("servletContext的List<UserInfo>为空?请系统管理员检查!");
} else {
onlineUser.remove(user);
}
session.removeAttribute(CoreConstans.LOGINGUSER);
return "front/login";
}
@RequestMapping("viewInfo")
public String viewInfo(UserInfo user, ModelMap model, HttpSession session,
HttpServletRequest request) throws Exception {
UserVo userVo = userSv.getUserVo(this.getUser(session));
model.addAttribute(CoreConstans.OP_NAME, "查看个人资料");
request.setAttribute(CoreConstans.OPTRESULT, "succ");
model.addAttribute("userVo", userVo);
// log.info(XStreamIg.toXml(this.getUser(session)));
return "admin/sys/user/loginUser/editForm";
}
@RequestMapping(value = "/updateInfo")
public String updateInfo(UserInfo user, ModelMap model, String flag,
HttpSession session, HttpServletRequest request) throws Exception {
if ("1".equals(flag)) {
userSv.upateStmUser(user, null, model);
}
UserVo userVo = userSv.getUserVo(this.getUser(session));
model.addAttribute(CoreConstans.OP_NAME, "修改个人资料");
request.setAttribute(CoreConstans.OPTRESULT, "succ");
model.addAttribute("userVo", userVo);
return "admin/sys/user/loginUser/editForm";
}
@RequestMapping(value = "/changePassword")
public String changePassword(UserInfo user, String flag,
String oldPassword, String newPassword1, String newPassword2,
HttpSession session, HttpServletRequest request, ModelMap model)
throws Exception {
model.addAttribute(CoreConstans.OP_NAME, "修改密码");
model.addAttribute("userVo", this.getUser(session));
if ("1".equals(flag)) {
if (StringUtils.isEmpty(newPassword1)
|| StringUtils.isEmpty(newPassword2)) {
model.addAttribute(CoreConstans.ERROR_MESSAGE, "必须输入新密码");
} else if (!newPassword1.equals(newPassword2)) {
model.addAttribute(CoreConstans.ERROR_MESSAGE, "两次输入的密码不一致");
} else {
String pwd = Crypto.encode(newPassword2);
user.setPassword(pwd);
userSv.upateStmUser(user, null, model);
}
}
return "admin/sys/user/loginUser/changePasswordForm";
}
/**
* 功能:查询用户列表 2014-4-29
*/
@RequestMapping(value = "usersearch", method = RequestMethod.GET)
public String usersearch(UserVo user, ModelMap model, HttpSession session,
PageInfo page, HttpServletRequest request) throws Exception {
List<UserVo> userVos = userSv.getUserVos(user, this.page);
request.setAttribute(CoreConstans.OPTRESULT, "succ");
model.addAttribute("userVos", userVos);
return "admin/sys/user/list";
}
/**
* 功能:查询用户列表 2014-4-29
*/
@RequestMapping(value = "/usersearch", headers = "table=true")
public String usersearch2(UserVo user, ModelMap model, HttpSession session,
PageInfo page, HttpServletRequest request) throws Exception {
List<UserVo> userVos = userSv.getUserVos(user, this.page);
request.setAttribute(CoreConstans.OPTRESULT, "succ");
model.addAttribute("userVos", userVos);
return "admin/sys/user/listTable";
}
/**
* 功能:新增用户 2014-4-29
* @throws Exception
*/
@RequestMapping(value = "/usersearch/create")
public String createUser(@ModelAttribute("user") UserInfo user,
UserRole urole, ModelMap model, HttpSession session,
HttpServletRequest request, String flag, String id) throws Exception {
try {
model.addAttribute(CoreConstans.OP_NAME, "新增");
if ("1".equals(flag)) {
this.userSv.addUser(user, urole, model);
}
// 部门
Map<String, String> depM = this.sysPlugin.getDepsFoMap();
model.addAttribute("depmap", depM);
// 角色
List<RoleVo> roles = this.authPlugin.getRoles(user.getUserid());
model.addAttribute("roles", roles);
} catch (AIPGException e) {
log.error("新增用户失败");
}
return "admin/sys/user/editForm";
}
/**
* 功能:查看用户详情 2014-4-29
*/
@RequestMapping(value = "/usersearch/viewuser")
public String viewuser(UserInfo user, ModelMap model, UserRole urole,
HttpSession session, HttpServletRequest request, String flag,
String id) {
try {
model.addAttribute(CoreConstans.OP_NAME, "查看");
UserVo usr = userSv.getUserVo(user);
model.addAttribute("user", usr);
// 部门
Map<String, String> depM = this.sysPlugin.getDepsFoMap();
model.addAttribute("depmap", depM);
// 角色
List<RoleVo> roles = this.authPlugin.getRoles(user.getUserid());
model.addAttribute("roles", roles);
} catch (Exception e) {
log.error("修改用户失败");
}
return "admin/sys/user/editForm";
}
/**
* 功能:更新用户 2014-4-29
*/
@RequestMapping(value = "/usersearch/update")
public String updateUser(UserInfo user, ModelMap model, UserRole urole,
HttpSession session, HttpServletRequest request, String flag,
String id) {
try {
if (!FuncUtil.isEmpty(id)) {
user.setUserid(id);
}
model.addAttribute(CoreConstans.OP_NAME, "修改");
if ("1".equals(flag)) {
userSv.upateStmUser(user, urole, model);
}
UserVo usr = userSv.getUserVo(user);
model.addAttribute("user", usr);
// 部门
Map<String, String> depM = this.sysPlugin.getDepsFoMap();
model.addAttribute("depmap", depM);
// 角色
List<RoleVo> roles = this.authPlugin.getRoles(user.getUserid());
model.addAttribute("roles", roles);
} catch (Exception e) {
log.error("修改用户失败");
}
return "admin/sys/user/editForm";
}
/**
* 功能:删除用户 2014-4-29
* @throws Exception
*/
@RequestMapping(value = "/usersearch/delete")
public String deleteUser(UserInfo user, ModelMap model,
HttpSession session, HttpServletRequest request, String flag,
String id) throws Exception {
try {
model.addAttribute(CoreConstans.OP_NAME, "删除");
// 部门
Map<String, String> depM = this.sysPlugin.getDepsFoMap();
model.addAttribute("depmap", depM);
if (!FuncUtil.isEmpty(user.getUserid())) {
user.setUserid(user.getUserid().split(",")[0]);
// 角色
List<RoleVo> roles = this.authPlugin.getRoles(user.getUserid());
model.addAttribute("roles", roles);
UserVo usr = userSv.getUserVo(user);
model.addAttribute("user", usr);
if ("1".equals(flag)) {
userSv.deletStmUser(user, model);
return "admin/sys/user/editForm";
}
} else {
if ("1".equals(flag)) {
user.setUserid(id);
userSv.deletStmUser(user, model);
return this.toView(request, model, "/usersearch");
}
}
} catch (AIPGException e) {
log.error("删除用户失败");
return "admin/sys/user/list";
}
return "admin/sys/user/editForm";
}
/**
* 功能:在线用户监控
* 2014-7-23
*/
@SuppressWarnings({"unchecked" })
@RequestMapping(value = "online/monitor ", method = RequestMethod.GET)
public String OnlMonitor(UserVo user, ModelMap model,
HttpSession session, PageInfo page, HttpServletRequest request) {
request.setAttribute(CoreConstans.OPTRESULT, "succ");
List<UserInfo> onlineUser = null;
onlineUser = (List<UserInfo>) session.getServletContext()
.getAttribute(CoreConstans.ONLINEUSERS);
int start= Integer.parseInt(this.page.getPageIndex())-1;
int size = Integer.parseInt(this.page.getPageSize());
if(onlineUser.size()<size)
size=onlineUser.size();
this.page.setItemCount(onlineUser.size());
model.addAttribute("userVos", onlineUser.subList(start*size, start*size+size));
return "admin/sys/online/list";
}
/**
* 功能:在线用户监控
* 2014-7-23
*/
@SuppressWarnings({"unchecked" })
@RequestMapping(value = "online/monitor ", headers = "table=true")
public String asyOnlMonitor(UserVo user, ModelMap model,
HttpSession session, PageInfo page, HttpServletRequest request) {
request.setAttribute(CoreConstans.OPTRESULT, "succ");
List<UserInfo> onlineUser = null;
List<UserInfo> onlineUser2 = Lists.newArrayList();
onlineUser = (List<UserInfo>) session.getServletContext()
.getAttribute(CoreConstans.ONLINEUSERS);
for(UserInfo us:onlineUser){
if(!FuncUtil.isEmpty(user.getUserid())&&!FuncUtil.isEmpty(user.getUsername())){
if(us.getUserid().equals(user.getUserid())&&us.getUsername().indexOf(user.getUsername())>=0){
onlineUser2.add(us);
}
}else if(!FuncUtil.isEmpty(user.getUserid())&&FuncUtil.isEmpty(user.getUsername())){
if(us.getUserid().equals(user.getUserid())){
onlineUser2.add(us);
}
}else if(FuncUtil.isEmpty(user.getUserid())&&!FuncUtil.isEmpty(user.getUsername())){
if(us.getUsername().equals(user.getUsername())){
onlineUser2.add(us);
}
}
}
if(onlineUser2.size()==0)
onlineUser2=onlineUser;
int start= Integer.parseInt(this.page.getPageIndex())-1;
int size = Integer.parseInt(this.page.getPageSize());
if(onlineUser2.size()<size)
size=onlineUser2.size();
this.page.setItemCount(onlineUser2.size());
model.addAttribute("userVos", onlineUser2.subList(start*size, start*size+size));
return "admin/sys/online/listTable";
}
/**
* 功能:强制下线
* 2014-7-23
*/
@SuppressWarnings({"unchecked" })
@RequestMapping(value = "online/monitor/update", method = RequestMethod.GET)
public String forceOffLine(UserVo user, ModelMap model,String id,
HttpSession session, PageInfo page, HttpServletRequest request) {
UserInfo usr=null;
List<UserInfo> onlineUser = null;
onlineUser = (List<UserInfo>) session.getServletContext()
.getAttribute(CoreConstans.ONLINEUSERS);
for(UserInfo us:onlineUser){
if(us.getUserid().equals(id)){
usr=us;
break;
}
}
((List<UserInfo>) session.getServletContext().getAttribute(CoreConstans.ONLINEUSERS)).remove(usr);
request.setAttribute(CoreConstans.ERROR_MESSAGE,"force user offline success!");
log.debug("force user offline success");
return "front/msgdialog";
}
}