shiro登录与角色

1登录--shiro身份认证

1.1 修改数据库密码-让它经过加密处理

我们不知道数据库的密码 需要修改一下

准备一个加密算法

public class MD5Util {
   // String algorithmName, Object source, Object salt, int hashIterations
    //设置盐值
    public static final String SALT = "itsource";
    //设置遍历次数
    public static final int HASHITERATIONS = 10;
    //传入一个字符串,返回一个md5编码的值
    public static String createMd5Str(String str){
        SimpleHash hash = new SimpleHash("MD5",str,SALT,HASHITERATIONS);
        return hash.toString();
    }
}

2.通过算法修改数据库密码

@Test
public void testUpdatePwd() throws Exception{
    List<Employee> list = employeeService.findAll();
    for (Employee employee : list) {
        employee.setPassword(MD5Util.createMd5Str(employee.getPassword()));
        employeeService.save(employee); //注:save是添加与修改
    }
}

3.添加员工时密码应该加密

@Override
public void save(Employee employee) {
    if(employee.getId()==null){
        //代表是添加功能(需要进入密码加密)
        employee.setPassword(MD5Util.createMd5Str(employee.getPassword()));
    }
    super.save(employee);
}

添加登录页面

(1)准备一个登陆页面 login.jsp

(2)login.jsp页面提供一个form表单

(3)提交登录表单,调用下面的方法去提交

function submitForm(){
            //提交表单到后台程序
            $("#loginForm").form('submit',{
                url:'/login',
                success:function(result){
                    //返回json字符串 {success:true,msg:'xxx'}
                    //$ jquery里面对象
                    result = $.parseJSON(result);
                    if(result.success){
                      //跳转主页
                        location.href = "/main";
                    }else{
                        $.messager.alert("温馨提示", result.msg, "info");
                    }
                }
            })

        }

注销功能

1.在main.jsp添加一个注销功能

<div data-options="region:'north',split:true" style="height:120px;">
        <h1 style="margin-bottom: 10px">源码时代智销系统</h1>
        <div style="text-align:right;margin-right: 10px">
             欢迎<font color="red"><shiro:principal property="username"/></font>进入
            <a href="/logout">注销</a>
        </div>
    </div>

2.在LoginController里面提供一个注销方法

调用logout方法进行注销

回车登录

在页面绑定一个键盘事件,如果检测到是enter(回车键) 就提交表单

$(document.documentElement).on("keyup", function(event) {
            //console.debug(event.keyCode);
            //获取按键
            var keyCode = event.keyCode;
            console.debug(keyCode);
            if(keyCode===13){
                submitForm();
            }
        });

登录过期的问题

原因导致:如果我们已经注销了系统,在其他的页面里面点击操作,会出现登录页面嵌套

解决方案: 让子窗口的页面地址 赋值给顶级的窗口的地址

if(top!=window){
            //子窗口  把当前子窗口的路径 赋值顶层窗口的路径
            top.location.href = window.location.href;
        }

2.权限--授权

为什么需要授权

安全问题

授权涉及几个对象

用户:普通人

角色:对权限进行分组

权限:对资源进行上锁

资源:具体内容

对象关系

Employee Role Permission

用户和角色-- 多对多关系

角色和权限:多对多关系

权限和资源:1对1

 

创建Domain对象 --Employee Role Permission 把该配置关系配置、

写repository层

写service层

写controller层

角色页面展示

注意:权限的字符串处理

function permissionsFormat(obj){
    if(obj!=null){
        var permissionStr = "";
        //循环数组  0 1
        for(var key in obj){
            //取出每一个权限
            var permission = obj[key];
            if(key <= obj.length-2) {
                //拼接成字符串 最终展示到页面
                permissionStr += permission.name + ",";
            }else{
                permissionStr += permission.name;
            }
        }
        return permissionStr;
    }
}

添加角色的界面

准备dialog对话框

准备form表格

准备两个表格

添加角色页面的功能

表格的双击事件

allPermissionGrid.datagrid({
        fit:true, //自适应div窗口
        fixed:true,//固定列
        fitColumns:true,//自适应列
        url:"/permission/page",//查询所有的权限
        rownumbers:"true" ,//显示行号
        pagination:"true",//分页
        //双击后添加权限
        onDblClickRow:itsource.addPermission

    });

表格添加一行数据

userPermissionGrid.datagrid('appendRow',row);

表格删除一行数据

userPermissionGrid.datagrid('deleteRow',index);

回显操作

 roleDialog.dialog('center').dialog('open');
                //回显数据
                roleForm.form('load',row);
                //回显表格数据
                var permssions = row.permissions;
          
                //用户已选择权限的表格
               // userPermissionGrid.datagrid('loadData',permssions);
                var permissions = [];//准备一个临时的数组变量
                $.extend(permissions,row.permissions);//把表格的权限数据复制到临时数组变量
                userPermissionGrid.datagrid("loadData",permissions);
            }else{
                $.messager.alert('提示信息','请选中一条数据进行修改',"info");
            }

保存的时候提交额外参数

onSubmit: function(param){
                    //param提交--表格里面的数据 --
                    //private List<Permission> permissions = new ArrayList<>();
                    //获取到表格里面的数据
                    var rows = userPermissionGrid.datagrid('getRows');
                    for(var i=0;i<rows.length;i++){
                        var rowObj = rows[i];
                        param["permissions["+i+"].id"]=rowObj.id;
                    }
                    //重复密码验证 比较两个值是否相等 如果不相等 return false
                    //表示验证通过才能提交
                    return roleForm.form("validate");
                }

解决n-to-n的问题

 role.getPermissions().clear();

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值