码迷,mamicode.com
首页 > 其他好文 > 详细

Shiro

时间:2018-11-29 12:35:37      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:环境   构建   account   username   配置文件   package   代码   操作   方法   

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

 

 


 

 

 

 


  

Shiro

标签:环境   构建   account   username   配置文件   package   代码   操作   方法   

原文地址:https://www.cnblogs.com/rain-in-summer/p/10037156.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!