文档章节

Shiro权限入门介绍

boonya
 boonya
发布于 2014/11/20 13:24
字数 1368
阅读 206
收藏 1

nShiro是什么

  Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能 

nShiro能做什么

  认证:验证用户来核实他们的身份

  授权:对用户执行访问控制,如:

  判断用户是否被分配了一个确定的安全角色

  判断用户是否被允许做某事

  会话管理:在任何环境下使用Session API,即使没有Web 或EJB 容器。

  加密:以更简洁易用的方式使用加密的功能,保护或隐藏数据防止被偷窥

  Realms:聚集一个或多个用户安全数据的数据源,并作为一个单一的复合用户“视图”。

  启用单点登录(SSO)功能。

  为没有关联到登录的用户启用"Remember Me"服务

Shiro的四大部分——身份验证,授权,会话管理和加密

· Authentication:有时也简称为“登录”,这是证明用户是他们所说的他们是谁的行为。

· Authorization:访问控制的过程,也就是绝对“谁”去访问“什么”。

· Session Management:管理用户特定的会话,即使在非Web 或EJB 应用程序。

· Cryptography:通过使用加密算法保持数据安全同时易于使用

 

n除了以上功能,shiro还提供很多扩展

  Web Support:主要针对web应用提供一些常用功能。

  Caching:缓存可以使应用程序运行更有效率。

  Concurrency:多线程相关功能。

  Testing:帮助我们进行测试相关功能

  "Run As":一个允许用户假设为另一个用户身份(如果允许)的功能,有时候在管理脚本很有用。

  “Remember Me”:记住用户身份,提供类似购物车功能。

nSubject

  Subject 实质上是一个当前执行用户的特定的安全“视图”。Subject 可以是一个人,也可以代表第三方服务,或其他类似的任何东西——基本上是当前正与软件进行交互的任何东西。

  所有Subject 实例都被绑定到(且这是必须的)一个SecurityManager 上。当你与一个Subject 交互时,那些交互作用转化为与SecurityManager 交互的特定subject 的交互作用。

 

nSecurityManager

  SecurityManager 是Shiro 架构的心脏,用来协调内部的安全组件共同构成一个对象图,管理内部组件实例,并通过它来提供安全管理的各种服务。

  实际开发中,程序人员主要与Subject交互,但是要认识到,当你正与一个Subject 进行交互时,实质上是幕后的SecurityManager 处理所有繁重的Subject 安全操作。

nRealms

  Realms 担当Shiro 和你的应用程序的安全数据之间的“桥梁”或“连接器”。当它实际上与安全相关的数据如用来执行身份验证(登录)及授权(访问控制)的用户帐户交互时,Shiro 从一个或多个为应用程序配置的Realm 中寻找许多这样的东西。

  Realm 本质上是一个特定安全的DAO:它封装了数据源的连接详细信息,使Shiro 所需的相关的数据可用。当配置Shiro 时,你必须指定至少一个Realm 用来进行身份验证和/或授权。SecurityManager可能配置多个Realms,但至少有一个是必须的。

  Shiro 提供了立即可用的Realms 来连接一些安全数据源(即目录),如LDAP,关系数据库(JDBC),文本配置源,像INI 及属性文件,以及更多。你可以插入你自己的Realm 实现来代表自定义的数据源,如果默认地Realm 不符合你的需求。

 

nAuthenticator :是一个执行对用户的身份验证(登录)的组件。Authenticator 知道如何与一个或多个Realm 协调来存储相关的用户/帐户信息。从这些 Realm 中获得的数据被用来验证用户的身份来保证用户确实是他们所说的他们是谁。

n如果存在多个realm,则接口AuthenticationStrategy会确定什么样算是登录成功(例如,如果一个Realm成功,而其他的均失败,是否登录成功?)。

nAuthorizer :授权实质上就是访问控制 - 控制用户能够访问应用中的哪些内容,比如资源、Web页面等等。

nSessionManager :提供可在任何应用或架构层一致地使用Session API。

nSessionDAO:代表SessionManager 执行Session 持久化(CRUD)操作。

nCacheManager :对Shiro的其他组件提供缓存支持。

nCryptography:Shiro的api大幅度简化java api中繁琐的密码加密

nRealms:Realms 在Shiro 和你的应用程序的安全数据之间担当“桥梁”或“连接器”。简单的说,shiro通过Realms来获取相应的安全数据

Shiro 的 HelloWorld

n构建开发和运行环境:

1:在eclipse里面创建一个基本的java工程

2:加入所需要的jar包

n在src下创建TestShiro.ini文件,内容如下:

[users]
javass = cc,role1
 
[roles]
role1 = p1,p2

3:创建cn.javass.hello包,并创建HelloWorld类

public class HelloWorld {
  public static void main(String[] args) {
  Factory<org.apache.shiro.mgt.SecurityManager> f = new IniSecurityManagerFactory("classpath:TestShiro.ini");
  org.apache.shiro.mgt.SecurityManager s = f.getInstance();
  SecurityUtils.setSecurityManager(s);
 
  UsernamePasswordToken token = new UsernamePasswordToken("javass","cc");
  token.setRememberMe(true);

  Subject currentUser = SecurityUtils.getSubject();
  currentUser.login(token);

  boolean flag = currentUser.isPermitted("p1");
  System.out.println("flag==" + flag);
  }
}

私塾在线原创,转载请注明http://sishuok.com/forum/blogPost/list/0/7451.html


本文转载自:http://sishuok.com/forum/blogPost/list/7451.html;jsessionid=C80F0E848FB96291C0926420CB38C104

共有 人打赏支持
boonya
粉丝 73
博文 214
码字总数 43922
作品 0
成都
高级程序员
私信 提问
Shiro权限控制框架入门1:Shiro的认证流程以及基本概念介绍

前言:我在最开始学习Shiro这个框架时,在网上搜索到的一个介绍比较全面的教程是:《跟我学Shiro》系列教程。但是在我看了他写的前几篇文章后,我发现虽然他在这个系列教程中把shiro的一些特...

pangfc
2017/01/06
0
0
shiro简单入门

shiro简介绍; Apache Shiro是Java的一个安全框架。 Shiro可以帮助我们完成:认证、授权、加密、会话管理、与Web集成、缓存等 Authentication:身份认证/登录,验证用户是不是拥有相应的身份;...

xpttxsok
2016/04/24
58
0
【Shiro】Shiro从小白到大神(一)-Shiro入门

本系列是我在学习Shiro的路上的笔记,第一篇是属于非常入门级别的。 首先是介绍了下shiro,然后进行了一个小例子进行实际的操作 本节操作不涉及数据库,只是文本字符操作认证 Shiro简介: 百度...

qq_26525215
2017/09/22
0
0
zhaoml529/SpringMVC-Activiti5.16-Shiro

SpringOA简介 基于SpringMVC+Shiro+Activiti 5.16 的简单OA,可以快速入门Activiti学习用。 此版本前台使用的是EasyUI 框架简介 框架以Spring Framework为核心、Spring MVC作为模型视图控制器...

zhaoml529
2017/05/19
0
0
Shiro之身份认证、与spring集成(入门级)

目录1.Shro的概念2.Shiro的简单身份认证实现3.Shiro与spring对身份认证的实现   前言:   Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境...

左羽
05/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

20181213 上课截图

小丑鱼00
16分钟前
0
0
nginx+php-fpm配置后页面显示空白的解决方法以及用nginx和php-fpm解决“502 Bad Gateway”问题

https://stackoverflow.com/questions/15423500/nginx-showing-blank-php-pages For reference, I am attaching my location block for catching files with the .php extension: location ~......

Yao--靠自己
23分钟前
1
0
mac 没声音

somehow不时就会出现这种情况。之前都得重启。 其实可以直接在terminal里打以下命令: sudo kextunload /System/Library/Extensions/AppleHDA.kext sudo kextload /System/Library/Extension...

dubox
39分钟前
1
0
看完让你彻底搞懂Websocket原理

作者:Ovear 链接:https://www.zhihu.com/question/20215561/answer/40316953 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 额。。最高票答案没答到点...

时刻在奔跑
53分钟前
2
0
Spring Cloud Stream消费失败后的处理策略(一):自动重试

之前写了几篇关于Spring Cloud Stream使用中的常见问题,比如: 如何处理消息重复消费 如何消费自己生产的消息 下面几天就集中来详细聊聊,当消息消费失败之后该如何处理的几种方式。不过不论...

程序猿DD
55分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部