登录与角色

1.重置数据库的密码并加密
1.1 准备一个工具类

package cn.itsource.utils;

import org.apache.shiro.crypto.hash.SimpleHash;

/**
 * 这个工具类用来对密码进行加密 使用静态方法传入password用对应规则对密码进行加密
 */
public class MD5Util {
    public static String getPassWord(String password){
         /*
        algorithmName:算法
        source:原密码
        salt:盐值
        hashIterations:加密次数
         */
        SimpleHash simpleHash = new SimpleHash("MD5", password, "cn.itsource", 10);
        //使用toString方法打印密码
        return simpleHash.toString();
    }
}

1.2.在测试类中将数据库所有用户密码重置加密

/**
     * 查询出全部用户的密码并对它们进行重置密码并进行加密
     */
    @Autowired
    private IEmployeeService employeeService;

    @Test
    public void testResrtPassWord() throws Exception {
        //获取所有的用户
        List<Employee> list = employeeService.findAll(new EmployeeQuery());
        //将所有的用户密码设置为用户名并进行加密
        for (Employee employee : list) {
            //设置密码 用工具类进行加密 传入的密码是用户名
            employee.setPassword(MD5Util.getPassWord(employee.getUsername()));
            //保存设置了加密密码后的用户对象
            employeeService.save(employee);
        }
    }

1.3 登录

@Controller
@RequestMapping("/s")
public class LoginController {
    /**
     * GET方式访问登录页面
     *
     * @return
     */
    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String login() {
        return "forward:/s/login.jsp";
    }

    /**
     * POST方式提交登录表单
     *
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public ResultJson login2(String username, String password) {
        try {
            //获取当前用户【只要访问shiro的程序,就当作一个用户,不论是否已经登录】
            Subject subject = SecurityUtils.getSubject();
            //判断当前用户是否已经登录
            System.out.println("判断当前用户是否已经登录:" + subject.isAuthenticated());
            if (!subject.isAuthenticated()) {
                UsernamePasswordToken token = new UsernamePasswordToken(username, password);
                //登录
                subject.login(token);
            }
        } catch (UnknownAccountException e) {//Unknown未知的  Account账户
            //只要用户名错误(通过此用户名去查询数据库,结果没查到数据),就一定会抛出UnknownAccountException异常
            e.printStackTrace();
            return new ResultJson(500, "用户名不存在!");
        } catch (IncorrectCredentialsException e) {//Incorrect不正确的  Credentials令牌/密码
            //只要密码错误(登录时传入的密码与数据库中查询出来的密码不匹配),就一定会抛出IncorrectCredentialsException异常
            e.printStackTrace();
            return new ResultJson(500, "密码错误!");
        } catch (AuthenticationException e) {
            e.printStackTrace();
            return new ResultJson(500, "系统繁忙!");
        }
        return new ResultJson(200, "登录成功");

    }

    @RequestMapping("/logout")
    public String logout() {
        //获取当前用户【只要访问shiro的程序,就当作一个用户,不论是否已经登录】
        Subject subject = SecurityUtils.getSubject();
        subject.logout();
        return "forward:/s/login.jsp";
    }
}

1.4 登录前台页面 自己从网上找

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Cache-Control" content="no-cache">
    <meta http-equiv="Expires" content="0">
    <title>后台管理</title>
    <link rel="icon" href="favicon.ico" type="image/x-icon"/>
    <link href="/login/login.css" rel="stylesheet" type="text/css"/>
    <script src="/easyui/jquery.min.js"></script>
    <script src="/js/common.js"></script>
    <script type="text/javascript">
        $(function () {
            //如果当前窗口不是最顶级窗口,就表示当前窗口被嵌套了
            if (window.top!=window){
                //将当前窗口位置返回到登录页面
                window.top.location.href="/s/login";
            }
            $("#btn").click(function () {
                $.post("/s/login",$("#loginFrom").toJSON(),function (data) {
                    if(data.status == 500){
                        $("#errorMsg").text(data.msg);
                    }else{
                        //JS代码跳转页面
                        location.href = "/s/index.jsp";
                    }
                },"json");
            });
            //回车登录
            $(document).keypress(function (event) {
                if(event.keyCode==13){//如果按下回车键
                    //就触发提交按钮的点击事件
                    $("#btn").click();
                }
                
            })
        })
    </script>
</head>

<body>
<div class="login_box">
    <div class="login_l_img"><img src="/login/images/login-img.png"/></div>
    <div class="login">
        <div class="login_logo"><a href="#"><img src="/login/images/login_logo.png"/></a></div>
        <div class="login_name">
            <p>后台管理系统</p>
        </div>
        <form id="loginFrom">
            <input type="text" name="username" id="username" placeholder="请输入您的用户名" onfocus="this.placeholder=''"
                   onblur="this.placeholder='请输入您的用户名'"/>
            <input type="password" name="password" id="password" placeholder="请输入您的密码" onfocus="this.placeholder=''"
                   onblur="this.placeholder='请输入您的密码'"/>
            <input value="登录" style="width:100%;" type="button" id="btn">
        </form>
        <div id="errorMsg" style="text-align: center;color: #ff5d49;height: 25px;"></div>
    </div>
</div>
</body>
</html>

1.5 首页页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags"%>
<link rel="icon" href="favicon.ico" type="image/x-icon" />
<html>
    <head>
        <title>伊利后台管理系统</title>
        <%@include file="/WEB-INF/views/common.jsp"%>
        <style type="text/css">
            #north>div{width: 50%;height: 90px;float: left;overflow:hidden}
            #north img{margin-left: 120px;}
            #north b{font-size: 24px;}
        </style>
        <script type="text/javascript">
            $(function(){
                $("#treemenu").tree({
                    method:"get",
                    url:"/tree.json",
                    onClick: function(node){
                        if(node.url){// 在用户点击的时候提示
                            //判断点击的名称对应的选项卡是否已存在【如果存在就选中它并且刷新它,如果不存就添加它】
                            var exists = $("#tabs").tabs("exists", node.text);
                            if(exists){
                                //选中它
                                $('#tabs').tabs("select", node.text);
                                //刷新它
                                var tab = $('#tabs').tabs('getTab', node.text);  // 获取选择的面板
                                //var tab = $('#tabs').tabs('getSelected');  // 获取选择的面板
                                $('#tabs').tabs('update', {
                                    tab: tab,
                                    options:{
                                        content: '<iframe src="'+node.url+'" frameborder="0" scrolling="auto" height="625px" width="100%"></iframe>'
                                    }
                                });
                            }else{
                                //添加选项卡
                                $('#tabs').tabs('add',{
                                    title: node.text,
                                    selected: true,
                                    closable: true,
                                    content: '<iframe src="'+node.url+'" frameborder="0" scrolling="auto" height="625px" width="100%"></iframe>'
                                });
                            }
                        }
                    }
                });
            });
        </script>
    </head>
    <!--
        region  区域写到class="easyui-layout"的容器内部的div上,表示当前div显示到东南西北中的哪一块?
        split:true 分割线,可以改变当前区域的大小
        layout 布局
    -->
    <body class="easyui-layout">
    <div data-options="region:'north'" id="north" style="height:100px;line-height: 80px;margin-top: 5px">
        <div style="background-color: #00bbee">
            <p style="text-align: center">
                <img src="yili.jpg" style="height: 20px">
                <b>欢迎使用伊利集团智能商贸系统</b></p></div>
        <div style="background-color: #3c8b3c">
            <div style="text-align:right">欢迎您,<b style="color: #b52b27"><shiro:principal property="username"/></b>
                <a href="/s/logout" onclick="return confirm('确定要退出吗?')" class="easyui-linkbutton" data-options="iconCls:'icon-undo'">退出</a>
            </div>
        </div>
    </div>
    <div data-options="region:'west',title:'系统菜单',iconCls:'icon-list2'" style="width:200px;">
        <ul id="treemenu"></ul>
    </div>
    <div data-options="region:'center'" style="padding-left:5px;background:#eee;">
        <div id="tabs" class="easyui-tabs" data-options="fit:true">
            <div title="欢迎你" style="padding:10px;">
            </div>
        </div>
    </div>
    </body>
</html>

1.6 一些知识点和注意点与项目中的错误
注意在shiro配置文件中对需要用到的文件进行放行 不然会访问不到

  <property name="filterChainDefinitions">
            <value>
                # 所有图片、css、js文件放行
                /favicon.ico = anon
                /**/*.png = anon
                /**/*.jpg = anon
                /**/*.gif = anon
                /**/*.css = anon
                /**/*.js = anon
                # 登录页面、提交登录表单、注册页面、提交注册表单、退出系统必须设置成不需要登录即可访问
                /s/login = anon
                /s/logout = anon
                /s/register = anon
                # 哪些资源是必须要授权才能访问的?
                /s/zy01 = perms[employee:index]
                /s/zy02 = perms[department:index]
                /s/zy03 = perms[employee:page]
                # 除了上面以外的其他所有的资源都必须是登录后才能访问:
                /** = authc
            </value>
        </property>

如何使得combobox下拉框显示滚动条
方法:把属性panelHeight:"auto"注释掉即可。
设置java的web项目ico图标
为每个页面的head头部添加

在这里插入图片描述
回车登录

$(document.documentElement).on("keyup", function(event) {
    //console.debug(event.keyCode);
    var keyCode = event.keyCode;
    console.debug(keyCode);
    if (keyCode === 13) { // 捕获回车
        submitForm(); // 提交表单
    }
});

登录过期问题

// 检查自己是否是顶级页面
if (top != window) {// 如果不是顶级
    //把子页面的地址,赋值给顶级页面显示
    window.top.location.href = window.location.href;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值