LoginController.java

package com.fh.controller.system.login;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.fh.controller.base.BaseController;
import com.fh.entity.system.Menu;
import com.fh.entity.system.Role;
import com.fh.entity.system.User;
import com.fh.service.system.menu.MenuService;
import com.fh.service.system.role.RoleService;
import com.fh.service.system.user.UserService;
import com.fh.util.AppUtil;
import com.fh.util.Const;
import com.fh.util.DateUtil;
import com.fh.util.PageData;
import com.fh.util.RightsHelper;
import com.fh.util.Tools;
/*
 * 总入口
 */
@Controller
public class LoginController extends BaseController {

    @Resource(name="userService")
    private UserService userService;
    @Resource(name="menuService")
    private MenuService menuService;
    @Resource(name="roleService")
    private RoleService roleService;

    /**
     * 获取登录用户的IP
     * @throws Exception
     */
    public void getRemortIP(String USERNAME) throws Exception {
        PageData pd = new PageData();
        HttpServletRequest request = this.getRequest();
        String ip = "";
        if (request.getHeader("x-forwarded-for") == null) {
            ip = request.getRemoteAddr();
        }else{
            ip = request.getHeader("x-forwarded-for");
        }
        pd.put("USERNAME", USERNAME);
        pd.put("IP", ip);
        userService.saveIP(pd);
    }  

    /**
     * 访问登录页
     * @return
     */
    @RequestMapping(value="/login_toLogin")
    public ModelAndView toLogin()throws Exception{
        ModelAndView mv = this.getModelAndView();
        PageData pd = new PageData();
        pd = this.getPageData();
        pd.put("SYSNAME", Tools.readTxtFile(Const.SYSNAME)); //读取系统名称
        mv.setViewName("system/admin/login");
        mv.addObject("pd",pd);
        return mv;
    }

    /**
     * 请求登录,验证用户
     */
    @RequestMapping(value="/login_login")
    @ResponseBody
    public Object login()throws Exception{
        Map<String,String> map = new HashMap<String,String>();
        PageData pd = new PageData();
        pd = this.getPageData();
        String errInfo = "";
        String KEYDATA[] = pd.getString("KEYDATA").replaceAll("qq313596790fh", "").replaceAll("QQ978336446fh", "").split(",fh,");

        if(null != KEYDATA && KEYDATA.length == 3){
            //shiro管理的session
            Subject currentUser = SecurityUtils.getSubject();
            Session session = currentUser.getSession();
            String sessionCode = (String)session.getAttribute(Const.SESSION_SECURITY_CODE);        //获取session中的验证码

            String code = KEYDATA[2];
            if(null == code || "".equals(code)){
                errInfo = "nullcode"; //验证码为空
            }else{
                String USERNAME = KEYDATA[0];
                String PASSWORD  = KEYDATA[1];
                pd.put("USERNAME", USERNAME);
                if(Tools.notEmpty(sessionCode) && sessionCode.equalsIgnoreCase(code)){
                    String passwd = new SimpleHash("SHA-1", USERNAME, PASSWORD).toString();    //密码加密
                    pd.put("PASSWORD", passwd);
                    pd = userService.getUserByNameAndPwd(pd);
                    if(pd != null){
                        pd.put("LAST_LOGIN",DateUtil.getTime().toString());
                        userService.updateLastLogin(pd);
                        User user = new User();
                        user.setUSER_ID(pd.getString("USER_ID"));
                        user.setUSERNAME(pd.getString("USERNAME"));
                        user.setPASSWORD(pd.getString("PASSWORD"));
                        user.setNAME(pd.getString("NAME"));
                        user.setRIGHTS(pd.getString("RIGHTS"));
                        user.setROLE_ID(pd.getString("ROLE_ID"));
                        user.setLAST_LOGIN(pd.getString("LAST_LOGIN"));
                        user.setIP(pd.getString("IP"));
                        user.setSTATUS(pd.getString("STATUS"));
                        session.setAttribute(Const.SESSION_USER, user);
                        session.removeAttribute(Const.SESSION_SECURITY_CODE);

                        //shiro加入身份验证
                        Subject subject = SecurityUtils.getSubject();
                        UsernamePasswordToken token = new UsernamePasswordToken(USERNAME, PASSWORD);
                        try {
                            subject.login(token);
                        } catch (AuthenticationException e) {
                            errInfo = "身份验证失败!";
                        }

                    }else{
                        errInfo = "usererror";                 //用户名或密码有误
                    }
                }else{
                    errInfo = "codeerror";                     //验证码输入有误
                }
                if(Tools.isEmpty(errInfo)){
                    errInfo = "success";                    //验证成功
                }
            }
        }else{
            errInfo = "error";    //缺少参数
        }
        map.put("result", errInfo);
        return AppUtil.returnObject(new PageData(), map);
    }

    /**
     * 访问系统首页
     */
    @RequestMapping(value="/main/{changeMenu}")
    public ModelAndView login_index(@PathVariable("changeMenu") String changeMenu){
        ModelAndView mv = this.getModelAndView();
        PageData pd = new PageData();
        pd = this.getPageData();
        try{
            //shiro管理的session
            Subject currentUser = SecurityUtils.getSubject();
            Session session = currentUser.getSession();

            User user = (User)session.getAttribute(Const.SESSION_USER);
            if (user != null) {

                User userr = (User)session.getAttribute(Const.SESSION_USERROL);
                if(null == userr){
                    user = userService.getUserAndRoleById(user.getUSER_ID());
                    session.setAttribute(Const.SESSION_USERROL, user);
                }else{
                    user = userr;
                }
                Role role = user.getRole();
                String roleRights = role!=null ? role.getRIGHTS() : "";
                //避免每次拦截用户操作时查询数据库,以下将用户所属角色权限、用户权限限都存入session
                session.setAttribute(Const.SESSION_ROLE_RIGHTS, roleRights);         //将角色权限存入session
                session.setAttribute(Const.SESSION_USERNAME, user.getUSERNAME());    //放入用户名

                List<Menu> allmenuList = new ArrayList<Menu>();

                if(null == session.getAttribute(Const.SESSION_allmenuList)){
                    allmenuList = menuService.listAllMenu();

                    if(Tools.notEmpty(roleRights)){
                        for(Menu menu : allmenuList){
                            menu.setHasMenu(RightsHelper.testRights(roleRights, menu.getMENU_ID()));
                            if(menu.isHasMenu()){
                                List<Menu> subMenuList = menu.getSubMenu();
                                for(Menu sub : subMenuList){
                                    sub.setHasMenu(RightsHelper.testRights(roleRights, sub.getMENU_ID()));
                                }
                            }
                        }
                    }
                    session.setAttribute(Const.SESSION_allmenuList, allmenuList);            //菜单权限放入session中
                }else{
                    allmenuList = (List<Menu>)session.getAttribute(Const.SESSION_allmenuList);
                }

                //切换菜单=====
                List<Menu> menuList = new ArrayList<Menu>();
                //if(null == session.getAttribute(Const.SESSION_menuList) || ("yes".equals(pd.getString("changeMenu")))){
                if(null == session.getAttribute(Const.SESSION_menuList) || ("yes".equals(changeMenu))){
                    List<Menu> menuList1 = new ArrayList<Menu>();  //菜单一
                    List<Menu> menuList2 = new ArrayList<Menu>();  //菜单二(指的是两种菜单)

                    //拆分菜单
                    for(int i=0;i<allmenuList.size();i++){
                        Menu menu = allmenuList.get(i);
                        if("2".equals(menu.getMENU_TYPE())){//第一种菜单
                            menuList1.add(menu);
                        }else{
                            menuList2.add(menu);
                        }
                    }

                session.removeAttribute(Const.SESSION_menuList);
                session.setAttribute(Const.SESSION_menuList, menuList1);
                session.setAttribute("changeMenu", "1");
                menuList = menuList1;
                    /*if("2".equals(session.getAttribute("changeMenu"))){
                        session.setAttribute(Const.SESSION_menuList, menuList1);
                        session.removeAttribute("changeMenu");
                        session.setAttribute("changeMenu", "1");
                        menuList = menuList1;
                    }else{
                        session.setAttribute(Const.SESSION_menuList, menuList2);
                        session.removeAttribute("changeMenu");
                        session.setAttribute("changeMenu", "2");
                        menuList = menuList2;
                    }*/
                }else{
                    menuList = (List<Menu>)session.getAttribute(Const.SESSION_menuList);
                }
                //切换菜单=====

                if(null == session.getAttribute(Const.SESSION_QX)){
                    session.setAttribute(Const.SESSION_QX, this.getUQX(session));    //按钮权限放到session中
                }

                //FusionCharts 报表
                 String strXML = "<graph caption=‘前12个月订单销量柱状图‘ xAxisName=‘月份‘ yAxisName=‘值‘ decimalPrecision=‘0‘ formatNumberScale=‘0‘><set name=‘2013-05‘ value=‘4‘ color=‘AFD8F8‘/><set name=‘2013-04‘ value=‘0‘ color=‘AFD8F8‘/><set name=‘2013-03‘ value=‘0‘ color=‘AFD8F8‘/><set name=‘2013-02‘ value=‘0‘ color=‘AFD8F8‘/><set name=‘2013-01‘ value=‘0‘ color=‘AFD8F8‘/><set name=‘2012-01‘ value=‘0‘ color=‘AFD8F8‘/><set name=‘2012-11‘ value=‘0‘ color=‘AFD8F8‘/><set name=‘2012-10‘ value=‘0‘ color=‘AFD8F8‘/><set name=‘2012-09‘ value=‘0‘ color=‘AFD8F8‘/><set name=‘2012-08‘ value=‘0‘ color=‘AFD8F8‘/><set name=‘2012-07‘ value=‘0‘ color=‘AFD8F8‘/><set name=‘2012-06‘ value=‘0‘ color=‘AFD8F8‘/></graph>" ;
                 mv.addObject("strXML", strXML);
                 //FusionCharts 报表

                mv.setViewName("system/admin/index");
                mv.addObject("user", user);
                mv.addObject("menuList", menuList);
            }else {
                mv.setViewName("system/admin/login");//session失效后跳转登录页面
            }
        } catch(Exception e){
            mv.setViewName("system/admin/login");
            logger.error(e.getMessage(), e);
        }
        pd.put("SYSNAME", Tools.readTxtFile(Const.SYSNAME)); //读取系统名称
        mv.addObject("pd",pd);
        return mv;
    }

    /**
     * 进入tab标签
     * @return
     */
    @RequestMapping(value="/tab")
    public String tab(){
        return "system/admin/tab";
    }

    /**
     * 进入首页后的默认页面
     * @return
     */
    @RequestMapping(value="/login_default")
    public String defaultPage(){
        return "system/admin/default";
    }

    /**
     * 用户注销
     * @param session
     * @return
     */
    @RequestMapping(value="/logout")
    public ModelAndView logout(){
        ModelAndView mv = this.getModelAndView();
        PageData pd = new PageData();

        //shiro管理的session
        Subject currentUser = SecurityUtils.getSubject();
        Session session = currentUser.getSession();

        session.removeAttribute(Const.SESSION_USER);
        session.removeAttribute(Const.SESSION_ROLE_RIGHTS);
        session.removeAttribute(Const.SESSION_allmenuList);
        session.removeAttribute(Const.SESSION_menuList);
        session.removeAttribute(Const.SESSION_QX);
        session.removeAttribute(Const.SESSION_userpds);
        session.removeAttribute(Const.SESSION_USERNAME);
        session.removeAttribute(Const.SESSION_USERROL);
        session.removeAttribute("changeMenu");

        //shiro销毁登录
        Subject subject = SecurityUtils.getSubject();
        subject.logout();

        pd = this.getPageData();
        String  msg = pd.getString("msg");
        pd.put("msg", msg);

        pd.put("SYSNAME", Tools.readTxtFile(Const.SYSNAME)); //读取系统名称
        mv.setViewName("system/admin/login");
        mv.addObject("pd",pd);
        return mv;
    }

    /**
     * 获取用户权限
     */
    public Map<String, String> getUQX(Session session){
        PageData pd = new PageData();
        Map<String, String> map = new HashMap<String, String>();
        try {
            String USERNAME = session.getAttribute(Const.SESSION_USERNAME).toString();
            pd.put(Const.SESSION_USERNAME, USERNAME);
            String ROLE_ID = userService.findByUId(pd).get("ROLE_ID").toString();

            pd.put("ROLE_ID", ROLE_ID);

            PageData pd2 = new PageData();
            pd2.put(Const.SESSION_USERNAME, USERNAME);
            pd2.put("ROLE_ID", ROLE_ID);

            pd = roleService.findObjectById(pd);                                                                

            pd2 = roleService.findGLbyrid(pd2);
            if(null != pd2){
                map.put("FX_QX", pd2.get("FX_QX").toString());
                map.put("FW_QX", pd2.get("FW_QX").toString());
                map.put("QX1", pd2.get("QX1").toString());
                map.put("QX2", pd2.get("QX2").toString());
                map.put("QX3", pd2.get("QX3").toString());
                map.put("QX4", pd2.get("QX4").toString());

                pd2.put("ROLE_ID", ROLE_ID);
                pd2 = roleService.findYHbyrid(pd2);
                map.put("C1", pd2.get("C1").toString());
                map.put("C2", pd2.get("C2").toString());
                map.put("C3", pd2.get("C3").toString());
                map.put("C4", pd2.get("C4").toString());
                map.put("Q1", pd2.get("Q1").toString());
                map.put("Q2", pd2.get("Q2").toString());
                map.put("Q3", pd2.get("Q3").toString());
                map.put("Q4", pd2.get("Q4").toString());
            }

            map.put("adds", pd.getString("ADD_QX"));
            map.put("dels", pd.getString("DEL_QX"));
            map.put("edits", pd.getString("EDIT_QX"));
            map.put("chas", pd.getString("CHA_QX"));

            //System.out.println(map);

            this.getRemortIP(USERNAME);
        } catch (Exception e) {
            logger.error(e.toString(), e);
        }
        return map;
    }

}
时间: 2024-10-23 00:24:38

LoginController.java的相关文章

验证码及密码加密在java中使用

package com.huawei.filter; import java.io.IOException; import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.Servl

Hadoop中RPC协议小例子报错java.lang.reflect.UndeclaredThrowableException解决方法

最近在学习传智播客吴超老师的Hadoop视频,里面他在讲解RPC通信原理的过程中给了一个RPC的小例子,但是自己编写的过程中遇到一个小错误,整理如下: log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).log4j:WARN Please initialize the log4j system properly.log4j:WARN See

Error querying database. Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for &hellip;

编译通过并且运行web成功后,访问的页面不需要连接数据库,不牵扯到反射调用实体类就不会报错, 报错内容如下: [WARNING] org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exce

java:sso(单点登录(single sign on),jsp文件动静态导入方式,session跨域)

1.jsp文件导入: 2.session跨域: 3.sso(单点登录(single sign on): sso Maven Webapp: LoginController.java: package com.sso.demo.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans

Java单体应用 - 架构模式 - 04.实践练习

原文地址:http://www.work100.net/training/monolithic-architecture-test.html 更多教程:光束云 - 免费课程 实践练习 序号 文内章节 视频 1 构建项目结构 2 代码实现 3 网站实现 4 测试运行 5 总结 请参照如上章节导航进行阅读 1.构建项目结构 我们以用户登录功能进行演示 三层架构 + MVC架构 如何实现. 1.1.创建项目 打开 IDEA ,在前述章节 stage2 文件夹下创建文件夹 login-demo,如下图:

Java单体应用 - 常用框架 - 05.综合实例(iot-admin)

原文地址:http://www.work100.net/training/monolithic-frameworks-example.html更多教程:光束云 - 免费课程 综合实例 序号 文内章节 视频 1 概述 - 2 创建项目 - 3 使用AdminLTE模板 - 4 创建登录页 - 5 登录功能实现 - 6 提升用户体验 - 7 实例源码 - 请参照如上章节导航进行阅读 1.概述 本节将把「Java单体应用」课程做一个阶段性的总结,通过一个综合的案例将所学知识完整实践一下. 我们后续阶段

Spring Security入门Demo

一.spring Security简介 SpringSecurity,这是一种基于Spring AOP和Servlet过滤器的安全框架.它提供全面的安全性解决方案,同时在Web请求级和方法调用级处理身份确认和授权.在Spring Framework基础上,Spring Security充分利用了依赖注入(DI,Dependency Injection)和面向切面技术. 二.建立工程 参考http://blog.csdn.net/haishu_zheng/article/details/51490

springmvc 中前后台传值

1.前台往后台传值: login.jsp输入框设置,主要是name属性 <h1>登录页面</h1> <form method="post" action=""> 用户名:<input type="text" name="userName"><br> 密 码:<input type="text" name="password"

Mybatis3+Spring4+SpringMVC4 整合【转】

首先在整合这个框架的时候,想想其一般的步骤是怎样的,先有个步骤之后,不至于在后面的搞混了,这样在整合的时候也比较清晰些. 然后我们就细细的一步一步来整合. 1  创建一个Web项目. 2  导入Mybatis3.Spring4.SpringMVC4.连接数据库(我使用的数据库是mysql)的jar包. 我所用的包:  spring-websocket-4.2.0.RELEASE.jar 3  创建Mybatis3.Spring4.SpringMVC4.连接数据库的配置文件. 4  配置web.x