当前位置: 首页 > news >正文

Shiro授权

Shiro是一个开源的安全框架,提供了身份认证、授权、加密和会话管理等功能,特别适用于Java应用程序的安全控制。以下是关于Shiro授权的详细介绍:

一、授权的概念

授权,也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面、编辑数据、页面操作等)。在Shiro中,授权是判断一个已认证的用户是否拥有执行某个操作或访问某个资源的权限的过程。

二、Shiro授权的核心组件

  1. Subject:代表当前用户,是Shiro进行认证和授权操作的核心对象。
  2. SecurityManager:Shiro的安全管理核心,负责协调内部安全组件,如Realm,来进行认证和授权操作。
  3. Realm:Shiro从Realm获取安全数据(如用户、角色、权限)。Realm可以看作是一个安全数据源,SecurityManager通过Realm来获取用户的身份信息和权限信息。

三、Shiro授权的方式

Shiro支持多种授权方式,以满足不同的安全需求:

  1. 基于角色的授权(Role-Based Authorization):通过给用户分配不同的角色,来控制用户对资源的访问权限。例如,定义一个“admin”角色,只有拥有该角色的用户才能执行某些操作。
  2. 基于权限的授权(Permission-Based Authorization):通过给用户分配具体的权限,来控制用户对资源的访问权限。例如,定义一个“write”权限,只有拥有该权限的用户才能进行写操作。
  3. 自定义授权(Custom Authorization):Shiro框架允许用户通过自定义的方式进行授权,可以实现自己的授权逻辑,判断用户是否有权限执行某个操作。
  4. 通配符授权(Wildcard Authorization):Shiro框架支持使用通配符进行授权,可以使用通配符匹配多个角色或权限。例如,使用“role:*”表示拥有任何角色的用户都有权限。
  5. 基于资源的授权(Resource-Based Authorization):Shiro框架支持基于资源的授权,也称为ACL(Access Control List)授权。通过给每个资源分配访问权限,可以精细地控制用户对不同资源的访问。

四、Shiro授权的实现

  1. 配置Realm:实现自定义的Realm类,重写doGetAuthorizationInfo方法,该方法会返回用户的授权信息(如角色和权限)。
  2. 配置SecurityManager:将自定义的Realm注入到SecurityManager中,以便SecurityManager能够获取用户的身份信息和权限信息进行认证和授权操作。
  3. 配置访问控制:使用Shiro提供的访问控制过滤器(如rolesperms等)来配置不同资源或操作的访问权限。

五、Shiro授权的示例

以下是一个简单的Shiro授权示例:

  1. 创建自定义Realm
    public class MyRealm extends AuthorizingRealm {  // 模拟用户和角色信息  private static Map<String, String> userMap = new HashMap<>();  private static Map<String, Set<String>> roleMap = new HashMap<>();  static {  userMap.put("admin", "123456");  roleMap.put("admin", new HashSet<>(Arrays.asList("admin")));  userMap.put("user", "123456");  roleMap.put("user", new HashSet<>(Arrays.asList("user")));  }  @Override  protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {  String username = (String) principals.getPrimaryPrincipal();  SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();  authorizationInfo.setRoles(roleMap.get(username));  return authorizationInfo;  }  @Override  protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {  String username = (String) token.getPrincipal();  String password1 = userMap.get(username);  if (password1 == null) {  throw new UnknownAccountException();  }  SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(username, password1, getName());  return authenticationInfo;  }  
    }
  2. 配置Shiro
    [main]  
    myRealm=com.example.shiro.MyRealm  
    securityManager=org.apache.shiro.web.mgt.DefaultWebSecurityManager  
    securityManager.realms=$myRealm  [urls]  
    /admin/** = roles[admin]  
    /user/** = roles[user]  
    /login = anon  
    /** = authc

    在上面的配置中,/admin/**路径下的资源需要拥有“admin”角色的用户才能访问,/user/**路径下的资源需要拥有“user”角色的用户才能访问,/login路径下的资源允许匿名访问,其他路径下的资源需要认证后才能访问。

    综上所述,Shiro授权是一个强大且灵活的安全机制,通过合理配置和使用Shiro的授权功能,可以有效地保护应用程序的安全性。


http://www.mrgr.cn/news/56991.html

相关文章:

  • rockscache源码分析:如何解决缓存db的最终一致性
  • 听泉鉴宝在三个月前已布局商标注册!
  • javaweb-mybatis之动态sql
  • 2.2机器学习--逻辑回归(分类)
  • 7-5 位数和(C++;cin;cout)
  • 更加小众的极氪MIX,瞄准全场景家庭用户,价格会是多少?
  • OpenHarmony4.0配置应用开机自启
  • 高效休息法
  • CSS背景
  • 【Java SE 】抽象类 和 接口 详解
  • 高标准农田信息化推动农业产业链升级
  • Scala的内部类
  • uniapp学习(007-3 壁纸项目:系统高度等信息的操作)
  • 线程池常见面试题
  • hadoop
  • linux 编译安装的php7.4 开启pgsql,pdo_pgsql的扩展
  • 软件设计师考试大纲整理
  • JavaEE进阶----18.<Mybatis补充($和#的区别+数据库连接池)>
  • 如何设置Page Cache的大小为默认值
  • 32 类和对象 · 中
  • 卡牌抽卡机小程序,带来新鲜有趣的拆卡体验
  • 2025秋招八股文--mysql篇
  • 日志分析工具-应急响应实战笔记
  • 网络不稳定?试试这款Figma的中文替代设计工具
  • LLaMA Factory环境配置
  • ERP、SCM与CRM:三大系统的区别与整合策略