package cn.com.lzt.common.controller; import com.xcgl.weixin.base.ApiException; import org.apache.log4j.Logger; import org.jeecgframework.core.common.controller.BaseController; import org.jeecgframework.core.constant.Globals; import org.jeecgframework.core.util.ContextHolderUtils; import org.jeecgframework.core.util.IpUtil; import org.jeecgframework.core.util.ResourceUtil; import org.jeecgframework.core.util.oConvertUtils; import org.jeecgframework.web.system.manager.ClientManager; import org.jeecgframework.web.system.pojo.base.Client; import org.jeecgframework.web.system.pojo.base.TSDepart; import org.jeecgframework.web.system.pojo.base.TSUser; import org.jeecgframework.web.system.service.MutiLangServiceI; import org.jeecgframework.web.system.service.SystemService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.Date; import java.util.List; import java.util.Map; public class BaseLztController extends BaseController { private Logger logger = Logger.getLogger(this.getClass()); @Autowired protected SystemService systemService; @Autowired private MutiLangServiceI mutiLangService; /** * 校验用户授权,后续可以优化 * * @param forceLogin 是否强制用户登录 * @return */ protected TSUser verifyMobileUser(boolean forceLogin) { try { TSUser user = ResourceUtil.getSessionUser(); if(user != null) { return user; } HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder .getRequestAttributes()) .getRequest(); String openid = oConvertUtils.getString(request.getParameter("openid")); if (org.apache.commons.lang.xwork.StringUtils.isBlank(openid)) { throw new ApiException(300, "openid required"); } List userList = systemService.findByProperty(TSUser.class, "openid", openid); if (userList.size() == 0) { throw new ApiException(301, "用户未找到"); } user = userList.get(0); Long orgNum = systemService.getCountForJdbc("select count(1) from t_s_user_org where user_id = '" + user.getId() + "'" + " and status = '" + Globals.BELONG_STATUS_NORMAL + "'" + " and ifpluralism = '" + Globals.PLURALISM_NO + "'"); if (orgNum == 1) { Map userOrgMap = systemService.findOneForJdbc( "select org_id as orgId from t_s_user_org where user_id=? and status=? and ifpluralism=? ", user.getId(), Globals.BELONG_STATUS_NORMAL.toString(), Globals.PLURALISM_NO.toString()); saveLoginSuccessInfo(request, user, (String) userOrgMap.get("orgId")); } return user; } catch (ApiException e) { if (forceLogin) throw e; } return null; } /** * 保存用户登录的信息,并将当前登录用户的组织机构赋值到用户实体中; * @param req request * @param user 当前登录用户 * @param orgId 组织主键 */ private void saveLoginSuccessInfo(HttpServletRequest req, TSUser user, String orgId) { String message = null; TSDepart currentDepart = systemService.get(TSDepart.class, orgId); user.setCurrentDepart(currentDepart); HttpSession session = ContextHolderUtils.getSession(); //update-begin--update---author:scott-----------date:20151218-------for:解决分布式登录问题---------- //update-begin--update---author:dangzhenghui-----------date:20170429-------for:修正添加用户部门---------- user.setDepartid(orgId); //update-begin--update---author:dangzhenghui-----------date:20170429-------for:修正添加用户部门---------- session.setAttribute(ResourceUtil.LOCAL_CLINET_USER, user); //update-end--author:scott-----------date:20151218-------for:解决分布式登录问题--------------------- message = mutiLangService.getLang("common.user") + ": " + user.getUserName() + "["+ currentDepart.getDepartname() + "]" + mutiLangService.getLang("common.login.success"); Client clientOld = ClientManager.getInstance().getClient(session.getId()); if(clientOld == null || clientOld.getUser() ==null ||user.getUserName().equals(clientOld.getUser().getUserName())){ Client client = new Client(); client.setIp(IpUtil.getIpAddr(req)); client.setLogindatetime(new Date()); client.setUser(user); ClientManager.getInstance().addClinet(session.getId(), client); } else {//如果不一致,则注销session并通过session=req.getSession(true)初始化session ClientManager.getInstance().removeClinet(session.getId()); session.invalidate(); session = req.getSession(true);//session初始化 session.setAttribute(ResourceUtil.LOCAL_CLINET_USER, user); // session.setAttribute("randCode",req.getParameter("randCode"));//保存验证码 // checkuser(user,req); } systemService.addLog(message, Globals.Log_Type_LOGIN, Globals.Log_Leavel_INFO); } }