zoukankan      html  css  js  c++  java
  • Shiro

    Shiro最重要的两个功能为:认证和授权

    Shiro是一个Java平台的开源权限框架,用于认证和访问授权。具体来说,满足对如下元素的支持:

    • 用户,角色,权限(仅仅是操作权限,数据权限必须与业务需求紧密结合),资源(url)。
    • 用户分配角色,角色定义权限。
    • 访问授权时支持角色或者权限,并且支持多级的权限定义。

    在shiro架构中,有3个最主要的组件:Subject,SecurityManager,Realm。
    Subject本质上就是当前访问用户的抽象描述。
    SecurityManager是Shiro架构中最核心的组件,通过它可以协调其他组件完成用户认证和授权。实际上,SecurityManager就是Shiro框架的控制器。
    Realm定义了访问数据的方式,用来连接不同的数据源,如:LDAP,关系数据库,配置文件等等。

    认证流程:

    授权流程:


    ==================================================================================================================

     1 最简单的认证授权的代码如下:
     2 
     3 package com.shiro;
     4 
     5 import org.apache.shiro.SecurityUtils;
     6 import org.apache.shiro.authc.UsernamePasswordToken;
     7 import org.apache.shiro.mgt.DefaultSecurityManager;
     8 import org.apache.shiro.mgt.SecurityManager;
     9 import org.apache.shiro.realm.SimpleAccountRealm;
    10 import org.apache.shiro.subject.Subject;
    11 import org.springframework.stereotype.Component;
    12 
    13 /**
    14  * description:
    15  * author: Wangys
    16  * Date: 2018-11-23
    17  */
    18 @Component
    19 public class ShiroTest {
    20 
    21     SimpleAccountRealm realm = new SimpleAccountRealm();
    22 
    23     public void setAccount() {
    24         realm.addAccount("Summer", "password", "admin");
    25     }
    26 
    27     public void testShiro() {
    28 
    29         // 构建SecurityManager环境
    30         DefaultSecurityManager manager = new DefaultSecurityManager();
    31         manager.setRealm(realm);
    32 
    33         // 主体提交认证请求
    34         SecurityUtils.setSecurityManager(manager);
    35         Subject subject = SecurityUtils.getSubject();
    36         UsernamePasswordToken token = new UsernamePasswordToken("Summer", "password");
    37 
    38         subject.login(token);
    39         // 认证
    40         subject.isAuthenticated();
    41         // 授权
    42         subject.checkRoles("admin");
    43     } 
    46 }

    下面我们看下认证与授权调用的具体实现方法

    授权:hasRoles方法点下去调用的是AuthorizingRealm中的checkRoles()方法

    认证调用的是AuthenticatingSecurityManager中的authenticate()方法 ,AuthenticatingSecurityManager继承RealmSecurityManager

    继续点击去调用的是ModularRealmAuthenticator中的认证方法

    所以认证与授权都是以Realm为主体来实现的。

    
    
    
    
    
    


      

  • 相关阅读:
    七、AOP统一处理以及日志打印
    六、spring Boot项目表单验证(最小值为例)以及spring的常用注解
    五、spring-data-Jpa 数据库操作
    四、spring Boot项目中Controller的使用
    三、SpringBoot的常用配置(.yml通过配置文件和注解进行属性注入,以及分别配置生产、开发环境)
    机器学习中的 上采样 下采样 过采样 欠采样
    Mac 安装/卸载 brew
    Keras 训练自己的人脸特征点提取模型的坑
    Keras 使用自己编写的数据生成器
    iPhone 设备管理在哪(已解决)
  • 原文地址:https://www.cnblogs.com/rain-in-summer/p/10037156.html
Copyright © 2011-2022 走看看