Package org.jeecgframework.web.system.controller.core

Source Code of org.jeecgframework.web.system.controller.core.LoginController

package org.jeecgframework.web.system.controller.core;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.jeecgframework.web.system.manager.ClientManager;
import org.jeecgframework.web.system.pojo.base.Client;
import org.jeecgframework.web.system.pojo.base.TSConfig;
import org.jeecgframework.web.system.pojo.base.TSFunction;
import org.jeecgframework.web.system.pojo.base.TSRole;
import org.jeecgframework.web.system.pojo.base.TSRoleFunction;
import org.jeecgframework.web.system.pojo.base.TSRoleUser;
import org.jeecgframework.web.system.pojo.base.TSUser;
import org.jeecgframework.web.system.service.SystemService;
import org.jeecgframework.web.system.service.UserService;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.jeecgframework.core.common.model.json.AjaxJson;
import org.jeecgframework.core.constant.Globals;
import org.jeecgframework.core.extend.datasource.DataSourceContextHolder;
import org.jeecgframework.core.extend.datasource.DataSourceType;
import org.jeecgframework.core.util.ContextHolderUtils;
import org.jeecgframework.core.util.IpUtil;
import org.jeecgframework.core.util.NumberComparator;
import org.jeecgframework.core.util.ResourceUtil;
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.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;

/**
* 登陆初始化控制器
* @author 张代浩
*
*/
@Controller
@RequestMapping("/loginController")
public class LoginController {
  private Logger log = Logger.getLogger(LoginController.class);
  private SystemService systemService;
  private UserService userService;
  private String message = null;
  private Map<Integer, List<TSFunction>> shortcutFunctionMap = null;

  @Autowired
  public void setSystemService(SystemService systemService) {
    this.systemService = systemService;
  }

  @Autowired
  public void setUserService(UserService userService) {

    this.userService = userService;
  }

  @RequestMapping(params = "goPwdInit")
  public String goPwdInit() {
    return "login/pwd_init";
  }

  /**
   * admin账户密码初始化
   *
   * @param request
   * @return
   */
  @RequestMapping(params = "pwdInit")
  public ModelAndView pwdInit(HttpServletRequest request) {
    ModelAndView modelAndView = null;
    TSUser user = new TSUser();
    user.setUserName("admin");
    String newPwd = "123456";
    userService.pwdInit(user, newPwd);
    modelAndView = new ModelAndView(new RedirectView(
        "loginController.do?login"));
    return modelAndView;
  }

  /**
   * 检查用户名称
   *
   * @param user
   * @param req
   * @return
   */
  @RequestMapping(params = "checkuser")
  @ResponseBody
  public AjaxJson checkuser(TSUser user, HttpServletRequest req) {
    HttpSession session = ContextHolderUtils.getSession();
    DataSourceContextHolder
        .setDataSourceType(DataSourceType.dataSource_jeecg);
    AjaxJson j = new AjaxJson();
    int users = userService.getList(TSUser.class).size();
    if (users == 0) {
      j.setMsg("a");
      j.setSuccess(false);
    } else {
      TSUser u = userService.checkUserExits(user);
      if (u != null) {
        // if (user.getUserKey().equals(u.getUserKey())) {
        if (true) {
          message = "用户: " + user.getUserName() + "["
              + u.getTSDepart().getDepartname() + "]" + "登录成功";
          Client client = new Client();
          client.setIp(IpUtil.getIpAddr(req));
          client.setLogindatetime(new Date());
          client.setUser(u);
          ClientManager.getInstance().addClinet(session.getId(),
              client);
          // 添加登陆日志
          systemService.addLog(message, Globals.Log_Type_LOGIN,
              Globals.Log_Leavel_INFO);

        } else {
          j.setMsg("请检查U盾是否正确");
          j.setSuccess(false);
        }
      } else {
        j.setMsg("用户名或密码错误!");
        j.setSuccess(false);
      }
    }
    return j;
  }

  /**
   * 用户登录
   *
   * @param user
   * @param request
   * @param session
   * @return
   */
  @RequestMapping(params = "login")
  public String login(HttpServletRequest request) {
    DataSourceContextHolder
        .setDataSourceType(DataSourceType.dataSource_jeecg);
    TSUser user = ResourceUtil.getSessionUserName();
    String roles = "";
    if (user != null) {
      List<TSRoleUser> rUsers = systemService.findByProperty(
          TSRoleUser.class, "TSUser.id", user.getId());
      for (TSRoleUser ru : rUsers) {
        TSRole role = ru.getTSRole();
        roles += role.getRoleName() + ",";
      }
      if (roles.length() > 0) {
        roles = roles.substring(0, roles.length() - 1);
      }
      request.setAttribute("roleName", roles);
      request.setAttribute("userName", user.getUserName());
      request.getSession().setAttribute("CKFinder_UserRole", "admin");
      //获取一级菜单列表
      request.setAttribute("primaryMenuList", getPrimaryMenu(rUsers));
      // 默认风格
      String indexStyle = "shortcut";
      Cookie[] cookies = request.getCookies();
      for (Cookie cookie : cookies) {
        if (cookie == null || StringUtils.isEmpty(cookie.getName())) {
          continue;
        }
        if (cookie.getName().equalsIgnoreCase("JEECGINDEXSTYLE")) {
          indexStyle = cookie.getValue();
        }
      }
      // 要添加自己的风格,复制下面三行即可
      if (StringUtils.isNotEmpty(indexStyle)
          && indexStyle.equalsIgnoreCase("bootstrap")) {
        return "main/bootstrap_main";
      }
      if (StringUtils.isNotEmpty(indexStyle)
          && indexStyle.equalsIgnoreCase("shortcut")) {
        return "main/shortcut_main";
      }
     
      return "main/main";
    } else {
      return "login/login";
    }

  }

  /**
   * 退出系统
   *
   * @param user
   * @param req
   * @return
   */
  @RequestMapping(params = "logout")
  public ModelAndView logout(HttpServletRequest request) {
    HttpSession session = ContextHolderUtils.getSession();
    TSUser user = ResourceUtil.getSessionUserName();
    shortcutFunctionMap = null;
   
    systemService.addLog("用户" + user.getUserName() + "已退出",
        Globals.Log_Type_EXIT, Globals.Log_Leavel_INFO);
    ClientManager.getInstance().removeClinet(session.getId());
    ModelAndView modelAndView = new ModelAndView(new RedirectView(
        "loginController.do?login"));

    return modelAndView;
  }

  /**
   * 菜单跳转
   *
   * @return
   */
  @RequestMapping(params = "left")
  public ModelAndView left(HttpServletRequest request) {
    TSUser user = ResourceUtil.getSessionUserName();
    HttpSession session = ContextHolderUtils.getSession();
    // 登陆者的权限
    if (user.getId() == null) {
      session.removeAttribute(Globals.USER_SESSION);
      return new ModelAndView(
          new RedirectView("loginController.do?login"));
    }

    request.setAttribute("menuMap", getFunctionMap(user));
    List<TSConfig> configs = userService.loadAll(TSConfig.class);
    for (TSConfig tsConfig : configs) {
      request.setAttribute(tsConfig.getCode(), tsConfig.getContents());
    }
    return new ModelAndView("main/left");
  }

  /**
   * 获取权限的map
   *
   * @param user
   * @return
   */
  private Map<Integer, List<TSFunction>> getFunctionMap(TSUser user) {
    Map<Integer, List<TSFunction>> functionMap = new HashMap<Integer, List<TSFunction>>();
    Map<String, TSFunction> loginActionlist = getUserFunction(user);
    if (loginActionlist.size() > 0) {
      Collection<TSFunction> allFunctions = loginActionlist.values();
      for (TSFunction function : allFunctions) {
        if (!functionMap.containsKey(function.getFunctionLevel() + 0)) {
          functionMap.put(function.getFunctionLevel() + 0,
              new ArrayList<TSFunction>());
        }
        functionMap.get(function.getFunctionLevel() + 0).add(function);
      }
      // 菜单栏排序
      Collection<List<TSFunction>> c = functionMap.values();
      for (List<TSFunction> list : c) {
        Collections.sort(list, new NumberComparator());
      }
    }
    return functionMap;
  }

  /**
   * 获取用户菜单列表
   *
   * @param user
   * @return
   */
  private Map<String, TSFunction> getUserFunction(TSUser user) {
    HttpSession session = ContextHolderUtils.getSession();
    Client client = ClientManager.getInstance().getClient(session.getId());
    if (client.getFunctions() == null) {
      Map<String, TSFunction> loginActionlist = new HashMap<String, TSFunction>();
      List<TSRoleUser> rUsers = systemService.findByProperty(
          TSRoleUser.class, "TSUser.id", user.getId());
      for (TSRoleUser ru : rUsers) {
        TSRole role = ru.getTSRole();
        List<TSRoleFunction> roleFunctionList = systemService
            .findByProperty(TSRoleFunction.class, "TSRole.id",
                role.getId());
        for (TSRoleFunction roleFunction : roleFunctionList) {
          TSFunction function = roleFunction.getTSFunction();
          loginActionlist.put(function.getId(), function);
        }
      }
      client.setFunctions(loginActionlist);
    }
    return client.getFunctions();
  }

  /**
   * 首页跳转
   *
   * @return
   */
  @RequestMapping(params = "home")
  public ModelAndView home(HttpServletRequest request) {
    return new ModelAndView("main/home");
  }
  /**
   * 无权限页面提示跳转
   *
   * @return
   */
  @RequestMapping(params = "noAuth")
  public ModelAndView noAuth(HttpServletRequest request) {
    return new ModelAndView("common/noAuth");
  }
  /**
   * @Title: top
   * @Description: bootstrap头部菜单请求
   * @param request
   * @return ModelAndView
   * @throws
   */
  @RequestMapping(params = "top")
  public ModelAndView top(HttpServletRequest request) {
    TSUser user = ResourceUtil.getSessionUserName();
    HttpSession session = ContextHolderUtils.getSession();
    // 登陆者的权限
    if (user.getId() == null) {
      session.removeAttribute(Globals.USER_SESSION);
      return new ModelAndView(
          new RedirectView("loginController.do?login"));
    }
    request.setAttribute("menuMap", getFunctionMap(user));
    List<TSConfig> configs = userService.loadAll(TSConfig.class);
    for (TSConfig tsConfig : configs) {
      request.setAttribute(tsConfig.getCode(), tsConfig.getContents());
    }
    return new ModelAndView("main/bootstrap_top");
  }
  /**
   * @Title: top
   * @author gaofeng
   * @Description: shortcut头部菜单请求
   * @param request
   * @return ModelAndView
   * @throws
   */
  @RequestMapping(params = "shortcut_top")
  public ModelAndView shortcut_top(HttpServletRequest request) {
    TSUser user = ResourceUtil.getSessionUserName();
    HttpSession session = ContextHolderUtils.getSession();
    // 登陆者的权限
    if (user.getId() == null) {
      session.removeAttribute(Globals.USER_SESSION);
      return new ModelAndView(
          new RedirectView("loginController.do?login"));
    }
    request.setAttribute("menuMap", getFunctionMap(user));
    List<TSConfig> configs = userService.loadAll(TSConfig.class);
    for (TSConfig tsConfig : configs) {
      request.setAttribute(tsConfig.getCode(), tsConfig.getContents());
    }
    return new ModelAndView("main/shortcut_top");
  }
 
  /**
   * @Title: top
   * @author:gaofeng
   * @Description: shortcut头部菜单一级菜单列表,并将其用ajax传到页面,实现动态控制一级菜单列表
   * @param request
   * @return AjaxJson
   * @throws
   */
  public String getPrimaryMenu(List<TSRoleUser> rUsers) {
   
    //获取一级菜单列表
    Map<Integer, List<TSFunction>> functionMap = new HashMap<Integer, List<TSFunction>>();
    if(shortcutFunctionMap != null){

      //将更新前的菜单数据传过来
      functionMap = shortcutFunctionMap;
    }else{
      functionMap = getPrimaryMenuBase(rUsers);
    }
   
    String floor = "";
    List<TSFunction> primaryMenu = null;
    Iterator<Entry<Integer, List<TSFunction>>> it = functionMap.entrySet().iterator();
    while (it.hasNext()) {
      Map.Entry pairs = (Map.Entry) it.next();
      primaryMenu = (List<TSFunction>) pairs.getValue();

      for (TSFunction function : primaryMenu) {
//        org.jeecgframework.core.util.LogUtil.info(function.getFunctionName());
//        org.jeecgframework.core.util.LogUtil.info(function.getFunctionLevel());
        if(function.getFunctionLevel() == 0){

          if("Online 开发".equals(function.getFunctionName())){

            floor += " <li><img class='imag1' src='plug-in/login/images/online.png' /> "
                + " <img class='imag2' src='plug-in/login/images/online_up.png' style='display: none;' />" + " </li> ";
          }else if("统计查询".equals(function.getFunctionName())){

            floor += " <li><img class='imag1' src='plug-in/login/images/guanli.png' /> "
                + " <img class='imag2' src='plug-in/login/images/guanli_up.png' style='display: none;' />" + " </li> ";
          }else if("系统管理".equals(function.getFunctionName())){

            floor += " <li><img class='imag1' src='plug-in/login/images/xtgl.png' /> "
                + " <img class='imag2' src='plug-in/login/images/xtgl_up.png' style='display: none;' />" + " </li> ";
          }else if("常用示例".equals(function.getFunctionName())){

            floor += " <li><img class='imag1' src='plug-in/login/images/cysl.png' /> "
                + " <img class='imag2' src='plug-in/login/images/cysl_up.png' style='display: none;' />" + " </li> ";
          }else if("系统监控".equals(function.getFunctionName())){

            floor += " <li><img class='imag1' src='plug-in/login/images/xtjk.png' /> "
                + " <img class='imag2' src='plug-in/login/images/xtjk_up.png' style='display: none;' />" + " </li> ";
          }else{
            //其他的为默认通用的图片模式
            String s = "";
            if(function.getFunctionName().length()>=5 && function.getFunctionName().length()<7){
              s = "<div style='width:67px;position: absolute;top:40px;text-align:center;color:#909090;font-size:12px;'><span style='letter-spacing:-1px;'>"+ function.getFunctionName() +"</span></div>";
            }else if(function.getFunctionName().length()<5){
              s = "<div style='width:67px;position: absolute;top:40px;text-align:center;color:#909090;font-size:12px;'>"+ function.getFunctionName() +"</div>";
            }else if(function.getFunctionName().length()>=7){
              s = "<div style='width:67px;position: absolute;top:40px;text-align:center;color:#909090;font-size:12px;'><span style='letter-spacing:-1px;'>"+ function.getFunctionName().substring(0, 6) +"</span></div>";
            }
            floor += " <li style='position: relative;'><img class='imag1' src='plug-in/login/images/default.png' /> "
                + " <img class='imag2' src='plug-in/login/images/default_up.png' style='display: none;' />"
                + s +"</li> ";
          }
        }
      }
    }
   
    return floor;
  }
  /**
   * @Title: top
   * @author:gaofeng
   * @Description: shortcut头部菜单一级菜单列表,实现动态控制一级菜单列表的基础方法
   * @param request
   * @return AjaxJson
   * @throws
   */
  public Map<Integer, List<TSFunction>> getPrimaryMenuBase(List<TSRoleUser> rUsers) {
   
    //获取一级菜单列表
    Map<Integer, List<TSFunction>> functionMap = new HashMap<Integer, List<TSFunction>>();
    Map<String, TSFunction> loginActionlist = new HashMap<String, TSFunction>();
    for (TSRoleUser ru : rUsers) {
      TSRole role = ru.getTSRole();
      List<TSRoleFunction> roleFunctionList = systemService
          .findByProperty(TSRoleFunction.class, "TSRole.id",
              role.getId());
      for (TSRoleFunction roleFunction : roleFunctionList) {
        TSFunction function = roleFunction.getTSFunction();
        loginActionlist.put(function.getId(), function);
      }
    }
   
    if (loginActionlist.size() > 0) {
      Collection<TSFunction> allFunctions = loginActionlist.values();
      for (TSFunction function : allFunctions) {
        if (!functionMap.containsKey(function.getFunctionLevel() + 0)) {
          functionMap.put(function.getFunctionLevel() + 0,
              new ArrayList<TSFunction>());
        }
        functionMap.get(function.getFunctionLevel() + 0).add(function);
      }
      // 菜单栏排序
      Collection<List<TSFunction>> c = functionMap.values();
      for (List<TSFunction> list : c) {
        Collections.sort(list, new NumberComparator());
      }
    }
    //将更新前的菜单数据赋值过去
    shortcutFunctionMap = functionMap;
    return functionMap;
  }
}
TOP

Related Classes of org.jeecgframework.web.system.controller.core.LoginController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.