Java——SSM+Shiro实现JSP页面授权功能(面向小白)

在之前的博客中已经实现了Shiro的登陆认证功能——《SSM+Shiro实现登陆认证》

今天利用Shiro实现一个页面细粒化权限的控制功能。

为什么说是细粒化呢?因为它可以精准到页面上的每一个按钮,把控每一个按钮的访问权限,可以说是非常强大了,而且简单~

想实现页面的授权功能首先要在页面导入一个shiro的标签:

<%@ taglib uri="http://shiro.apache.org/tags" prefix="shiro"%>

然后用以下标签包裹

实现权限的控制!

我现在要对后台的一个菜单中的 “发布商品” 进行权限控制

Java——SSM+Shiro实现JSP页面授权功能(面向小白)_第1张图片

在页面的代码中加上Shiro的标签(这两个标签对应着页面上的云市场与发布商品)

                
  • 云市场
  • 发布商品
  • 在发布商品的标签上包裹了一层shiro的标签,那么登陆的用户必须要有shiro标签中 “name” 对应的权限!

    可以看到,加上这个标签以后再次访问页面,“发布商品” 菜单不见了

    Java——SSM+Shiro实现JSP页面授权功能(面向小白)_第2张图片

    那么这个时候如果我们想看到它,就只需要在realm的授权方法中给他对应的权限即可!

    /**
         * 授权的时候回调
         * @param principalCollection
         * @return
         */
        @Override
        protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
    
            SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
            info.addStringPermission("push");//这里添加进去的“push” 对应着前端页面的name值  
             //"*"代表所有权限
            return info;
        }

    这样以后页面的 发布商品 又回来了!

    其实Shiro权限控制原理大致就是如此,当然啦,这里只是一个简单的小例子,如果要做到根据角色分配权限,只是在数据库里多建几张表关联起来而已,根据对应的角色查询它所拥有的权限,然后循环遍历add到info里即可!

    这里举个简单例子,实现通过遍历数据库来获得权限(这里只是简单的例子,就不用中间表啦)

    为了更好的演示,在前端页面给 “云市场” 也加上Shiro的标签,name设置为"shop"

                    
                    
  • 云市场
  • 发布商品
  •  

    首先是用户表

    Java——SSM+Shiro实现JSP页面授权功能(面向小白)_第3张图片

    权限表:

    Java——SSM+Shiro实现JSP页面授权功能(面向小白)_第4张图片

    pid:权限对应的一个编号,在用户表上给对应的用户添加pid来获得对应的权限~

    这里给用户“萌”的pid(权限编码)为2,2在权限表对应的是push与shop权限,也就是说用户 “萌”有访问“云市场”与“发布商品” 的权限!!!

     

    授权的回调方法如下:

        /**
         * 授权的时候回调
         * @param principalCollection
         * @return
         */
        @Override
        protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
    
            SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
            User user = (User) principalCollection.getPrimaryPrincipal();//获取到登陆的对象
            if(user.getPid()==1){//如果权限编码为1就是超级管理员
                info.addStringPermission("*");//赋予管理员所有权限
            }else {
                List list = loginService.QueryAllPermission(user.getPid());//如果是普通用户就根据权限编号pid去数据库查询
                    for (Permission permission:
                        list) {
                        info.addStringPermission(permission.getPermission());//遍历添加权限
                    }
            }
            return info;
        }
    

    然后用用户“萌” 的账号密码登陆~

    Java——SSM+Shiro实现JSP页面授权功能(面向小白)_第5张图片

    可以看到她已经拥有了访问这两个菜单的权限~

     

    The end!!!

     

     

     

    你可能感兴趣的:(Shiro安全框架)