4-Shiro框架-权限管理

本文详细介绍了使用Shiro框架进行权限管理的方法,包括注解式开发、JSP隐藏标签、配置拦截器、实现授权Realm及使用JSTL标签等。探讨了如何通过roles和perms拦截器实现角色和权限控制,并介绍了Shiro的权限注解及其应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

授权管理

当然选择注解式开发啦,而且还可以用jsp隐藏没有权限的标签,非常方便。

在spring中配置的拦截器里面添加
  • roles,角色授权拦截器
    /xx = roles[admin1]
    /xx = roles[admin2]
    主要属性:登录页面地址、未授权地址
  • perms,权限授权拦截器
    /xx = perms[“user:create”]
    主要属性:登录页面地址、未授权地址
  • port,端口拦截器,可以通过的端口,如果端口不符,自动跳转到设置的端口
    /xx = port[80]
  • rest,rest风格拦截器,自动根据请求方法构建权限字符串(这个我也没太懂,要用的话再查查别的……)
  • ssl,SSL拦截器,只有请求是https才能通过,否则自动跳转到https端口(443)
实现授权Realm

授权Realm需要继承AuthorizingRealm类,实现其doGetAuthorizationInfo方法,注意要继承的这个类它自己继承了之前认证的时候需要继承的那个类,但是没有实现那个类需要的方法,所以要做授权可以只继承AuthorizingRealm类,再同时实现doGetAuthorizationInfo(授权方法)和doGetAuthenticationInfo(认证方法)方法即可。

授权Realm会获得一个PrincipalCollection类型的参数,从中可以得到登录用户的信息
//获取到的用户信息和多Realm认证的顺序有关,第一次获取到的就是认证成功返回的第一个信息
Object principal = principals.getPrimaryPrincipal();
//然后利用得到的用户信息来给该用户相应的权限
//下面这几句的意思按照我的理解,应该是roles里面存的值对应的就是各种权限
//admin1是一定会被添加的,所以所有用户都有该权限,但是满足xxx条件的时候,会给当前用户加上admin2的角色
//角色就意味着权限。
Set<String> roles = new HashSet<>();
roles.add("admin1");
if(xxx)
    roles.add("admin2");
//最后返回
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(roles);
return info;
注意:要是写完Realm发现不好用,注意看看配置对不对(我是用的默认策略,就是直接在securityManager的realms中配置的),还不行可以重启一下服务器,重新发布一下什么的操作搞一搞说不定就好了……
几个Shiro的JSTL标签,还有些这里就不写了
  • <shiro:guest>标签,用户没有身份验证时。
  • <shiro:user>标签,用户已经经过认证/记住我登录之后显示的信息
  • <shiro:authenticated>标签,用户已经身份验证通过(不是记住我)
  • <shiro:notAuthenticated>标签,用户未进行身份验证(包括记住我)
权限注解
  • @RequiresAuthentication,已经过身份验证
  • @RequiresUser,已经身份验证或记住我
  • @RequiresGuest,游客身份
  • @RequiresRoles(value={“admin1”,”admin2”},logical=Logical.AND):表示当前Subject需要角色admin1和admin2
  • @RequiresPermissions(value={“user:a”,”user:b”},logical=Logical.OR):表示当前Subject需要权限user.a或user.b
如果已经有了事务注解,那么不能注解在service上,需要注解在controller上
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值