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

 

 


 

 

 

 


  

posted @ 2018-11-29 11:20  Ysoo  Views(329)  Comments(0Edit  收藏  举报