基于SSM的shiro标签权限管理

shiro标签权限管理

功能:只有管理员能看到智能归档的菜单,普通用户看不到。由于有单点登录系统先判断用户账号和密码,所以此处不需要role角色表,仅需要判断用户及其权限。
在这里插入图片描述
如下图可见,该菜单是一个a标签,我们需要借助shiro的标签权限进行管理
在这里插入图片描述

构建步骤:

1、本项目前端采用freemarker,所以添加shiro-freemarker的依赖

<!-- freemarker + shiro(标签) begin -->
<dependency>
    <groupId>net.mingsoft</groupId>
    <artifactId>shiro-freemarker-tags</artifactId>
    <version>0.1</version>
</dependency>
<!-- freemarker + shiro(标签) end --> 

2、FreeMarkerConfigExtend类添加freemarker的shiro标签,这样freemarker才能添加shiro标签

public class FreeMarkerConfigExtend extends FreeMarkerConfigurer {
    @Override
    public void afterPropertiesSet() throws IOException, TemplateException {
        super.afterPropertiesSet();
        Configuration cfg = this.getConfiguration();
        // 添加shiro标签
        cfg.setSharedVariable("shiro", new ShiroTags());
    }
}

3、SpringMvc 需要更改下freemarker是视图解析器,将bean的id为freemarkerConfig的class改为我上面创建的FreeMarkerConfigExtend类
在这里插入图片描述
4、在页面上加shiro标签

<@shiro.hasPermission name="init">
<li class="treeview">
    <a href="#">
        <i class="fa fa-dashboard"></i> <span>智能归档</span>
        <span class="pull-right-container">
            <i class="fa fa-angle-left pull-right"></i>
        </span>
    </a>
</li>
</@shiro.hasPermission>

5、数据库permission权限表的菜单名根据页面的name配置,user表与之建立关系。
在这里插入图片描述

流程总结:

当刷新页面的时候,页面检测到标签,会被realm的doGetAuthorizationInfo方法拦截。由userName获取该用户的数据库中设置的权限,与标签的权限进行对比,例如此处标签是需要这个init权限才能看到内容,那么如果用户数据库中没有这个权限,就会不显示。

protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
   //能进入到这里,表示账号已经通过验证了
   String userName =(String) principalCollection.getPrimaryPrincipal();
   //通过service获取角色和权限
   Set<String> permissions = permissionService.listPermissions(userName);
   
   //授权对象
   SimpleAuthorizationInfo s = new SimpleAuthorizationInfo();
   //把通过service获取到的角色和权限放进去
   s.setStringPermissions(permissions);
   return s;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值