shiro框架---关于项目按钮权限控制的配置要点

shiro框架里按钮的权限控制

上一篇文章关于用户登录退出接口的介绍
  项目已分享到GitHub上,如果需要的可以看下,springboot+shiro项目Git下载地址
  通过前几篇的文章里,写了关于数据库建表、shiro框架在springboot中的配置步骤、以及登录时的shiro验证的接口。
  因为对于功能中系统模块菜单 的类型,都统一根据条件sql查询返回给前端,由前端控制起来,而剩下的操作 类型,也就是按钮,是通过shiro的标签来维护的,下面就写一下关于shiro标签的使用方法。

1、jsp页面中引入标签

  在需要做按钮控制的jsp 页面中加入如下标签,最上边第二行,加上就行:

<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
2、在要控制的按钮上加上如下配置
<shiro:hasPermission name="user_authorize"><button id="user_limits">用户授权</button></shiro:hasPermission>

  对于上边的name 属性中的值user_authorize 其实就是一个字符串,随便起的,该功能在页面上的展示如下:
这里写图片描述
  上图中当前用户下只有一个角色测试角色2 只要对该角色授权时,勾选上该按钮用户授权 这个按钮,就可以了。注意在添加该功能信息的时候,不要选错了资源类型 ,一定要选为操作 类型。

3、验证的逻辑

  当在jsp 中做好了上边两步以后,然后找到userRealm 类,在doGetAuthorizationInfo 方法中添加如下内容:

//表示根据用户身份获取授权信息
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        User user = (User)principals.getPrimaryPrincipal();
        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
        Map<String,Object> argsMap = new HashMap<String,Object>();
        argsMap.put("username",user.getUsername());
        argsMap.put("siteid","1");
        argsMap.put("funcType","4");
        List<SysFunc> sysFuncList = sysFuncService.selectSysFuncByUserName(argsMap); //获取所有按钮的功能记录
        if(sysFuncList != null){
            Set<String> permissonSet = new HashSet<String>();
            for(SysFunc func:sysFuncList){
                if(!StringUtils.isEmpty(func.getFunc_Url())){
                    permissonSet.add(func.getFunc_Url());
                };
            }
            info.setStringPermissions(permissonSet);
        }
        return info;
    }

  在该方法里,主要就是根据用户名username、系统标识siteid 、功能类型funcType为按钮的,查询出所有的符合条件的功能列表。并且将功能列表中的func_url 添加到 shiro中的 setStringPermissions 集合里。
  对于上边这个方法什么时候触发,我觉得有必要说一下,它的触发时机不是用户登录后触发的!!!而是当点击jsp 页面的时候,只要该页面有shiro 的上边两处标签配置,都会先走这个方法的。也就是说每点击一次带有配置的页面,就会触发上边的接口一次。
  比如我给当前用户下的测试角色2 配置了当前的用户授权 按钮权限,那在点击用户管理页面,就会先触发上边的方法,查询出属于当前用户、当前系统属于按钮的功能,并且把里边的func_url 字符串值集合赋给shiro ,回到页面后,在<shiro:hasPermission name="user_authorize"> 就会从那个集合里查是否有相应的字符串,有的话就会显示该按钮,没有则不显示。

4.异常注意点

  对于按钮的配置,比较简单,但也容易出错,我碰到过一个错误,写在了另一篇文章里,地址是shiro标签页点击报错: No SecurityManager accessible to the calling code…

下一篇文章shiro框架—关于用户多站点登录的标识字段的位置

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

茁壮成长的凌大大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值