Apache Shiro Permissions

规则

资源标识符:操作:对象实例 ID 

即对哪个资源的哪个实例可以进行什么操作. 其默认支持通配符权限字符串,: 表 示资源/操作/实例的分割;, 表示操作的分割,* 表示任意资源/操作/实例。

多层次管理

例如:user:query、user:edit

  • 冒号是一个特殊字符,它用来分隔权限字符串的下一部件:第一部分
    是权限被操作的领域(打印机),第二部分是被执行的操作。
  • 多个值:每个部件能够保护多个值。因此,除了授予用户 user:query
    和 user:edit 权限外,也可以简单地授予他们一个:user:query, edit。
  • 还可以用 * 号代替所有的值,如:user:* , 也可以写:*:query,表示
    某个用户在所有的领域都有 query 的权限。

实例级访问控制

这种情况通常会使用三个部件:域、操作、被付诸实施的实例。如:user:edit:manager。

  • 也可以使用通配符来定义,如:user:edit:、user::、user::manager。
  • 部分省略通配符:缺少的部件意味着用户可以访问所有与之匹配的值,比如:user:edit 等价于 user:edit :、user 等价于 user:?
  • 注意:通配符只能从字符串的结尾处省略部件,也就是说 user:edit 并不等价于 user:*:edit。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个简单的Apache Shiro代码示例,包括如何创建Shiro安全管理器,如何配置Shiro的认证和授权策略,以及如何使用Shiro进行认证和授权。 1. 创建Shiro安全管理器 ```java DefaultSecurityManager securityManager = new DefaultSecurityManager(); ``` 2. 配置Shiro的认证和授权策略 ```java // 配置认证策略 HashedCredentialsMatcher credentialsMatcher = new HashedCredentialsMatcher("SHA-256"); credentialsMatcher.setHashIterations(2); MyRealm realm = new MyRealm(); realm.setCredentialsMatcher(credentialsMatcher); securityManager.setRealm(realm); // 配置授权策略 SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); authorizationInfo.addRole("admin"); authorizationInfo.addStringPermission("user:create"); authorizationInfo.addStringPermission("user:update"); authorizationInfo.addStringPermission("user:delete"); securityManager.setAuthorizationInfo(authorizationInfo); ``` 3. 实现Shiro的Realm接口 ```java public class MyRealm extends AuthorizingRealm { // 实现认证方法 @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { UsernamePasswordToken upToken = (UsernamePasswordToken) token; String username = upToken.getUsername(); String password = getPasswordByUsername(username); if (password == null) { throw new UnknownAccountException("用户名不存在!"); } SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(username, password, getName()); return authenticationInfo; } // 实现授权方法 @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { String username = (String) principals.getPrimaryPrincipal(); SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); authorizationInfo.setRoles(getRolesByUsername(username)); authorizationInfo.setStringPermissions(getPermissionsByUsername(username)); return authorizationInfo; } // 模拟数据库查询用户密码 private String getPasswordByUsername(String username) { return "123456"; } // 模拟数据库查询用户角色 private Set<String> getRolesByUsername(String username) { Set<String> roles = new HashSet<>(); roles.add("admin"); return roles; } // 模拟数据库查询用户权限 private Set<String> getPermissionsByUsername(String username) { Set<String> permissions = new HashSet<>(); permissions.add("user:create"); permissions.add("user:update"); permissions.add("user:delete"); return permissions; } } ``` 4. 使用Shiro进行认证和授权 ```java // 创建Subject对象 Subject subject = SecurityUtils.getSubject(); // 创建认证Token UsernamePasswordToken token = new UsernamePasswordToken("admin", "123456"); // 进行认证 subject.login(token); // 进行授权 boolean hasRole = subject.hasRole("admin"); boolean hasPermission = subject.isPermitted("user:create"); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wunianisme

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

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

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

打赏作者

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

抵扣说明:

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

余额充值