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为主体来实现的。

    
    
    
    
    
    


      

  • 相关阅读:
    HDU 2544 最短路
    Codeforces Round #358 (Div. 2) Alyona and Strings
    Codeforces Round #358 (Div. 2) Alyona and the Tree
    Codeforces Round #357 (Div. 2) Runaway to a Shadow
    pycharm快捷键和一些常用的设置
    Python不同功能的函数
    面向对象技术简介
    数据结构
    python学习笔记
    ORACLE基本语法
  • 原文地址:https://www.cnblogs.com/rain-in-summer/p/10037156.html
Copyright © 2011-2022 走看看