专栏首页Java技术分享第二章:Shiro入门——深入浅出学Shiro细粒度权限开发框架
原创

第二章:Shiro入门——深入浅出学Shiro细粒度权限开发框架

Shiro是什么

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

Shiro能做什么

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

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

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

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

  会话管理:在任何环境下使用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

n创建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);

  }

}

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 后台系统搭建记录

    背景: 最近一段时候由于需要搭建后台测试系统,因此需要在centos系统下搭建mysql、apache、fastcgi、svn,由于网上的教程比较零散并且很多...

    IMWeb前端团队
  • Apache Spark 2.2.0 中文文档 - Spark RDD(Resilient Distributed Datasets)论文 | ApacheCN

    概要 为了能解决程序员能在大规模的集群中以一种容错的方式进行内存计算这个问题, 我们提出了 RDDs 的概念. 当前的很多框架对迭代式算法场景与交互性数据挖掘...

    片刻
  • 大数据分析平台 Apache Spark详解

    Apache Spark是一款快速、灵活且对开发者友好的工具,也是大型SQL、批处理、流处理和机器学习的领先平台。自从 Apache Spark 2009 年在...

    挖掘大数据
  • Linux下启动和停止apache服务

    本文使用的Linux系统为CentOS 7,下面将介绍apache服务的启动、关闭与设置。apache在CentOS 7中一般是默认安装的,而且服务名字为htt...

    Tyan
  • 使用PouchDB来实现React离线应用

    最近听到有同学在讨论关于数据上传遇到离线的问题,因此在这里介绍一下PouchDB。 PouchDB 是一个开源的javascript数据库,他的设计借鉴于Apa...

    IMWeb前端团队
  • 一文读懂Apache Spark

    摘要:Apache Spark快速、灵活、开发友好,是大型SQL、批处理、流处理和机器学习的主要平台。 从2009年在加州大学伯克利分校(u.c Berkele...

    企鹅号小编
  • Python强化学习实战,Anaconda公司的高级数据科学家讲解

    【导读】Christine Doig是Anaconda公司的高级数据科学家。没错Anaconda就是那个著名的Python科学计算与发行管理软件。Christi...

    企鹅号小编
  • Cloudera(CDH) 简介和在线安装

    实验背景 笔者需要维护线上的hadoop集群环境,考虑在本地搭建一套类似的hadoop集群,便于维护与管理。 Cloudera 简介 经过搜索发现Clo...

    shaonbean
  • wamp修改空密码以及设置虚拟站点

    近来重装了一下wamp,索性记录一下,wamp安装完后,我的常用配置。首先,肯定要修改默认的空密码;其次,便要配置虚拟站点,因为当项目多的时候,每个项目分配成一...

    IMWeb前端团队
  • 在 Apache 上部署 Let’s Encrypt 证书与自动续期脚本

    https实战,在 Apache 上部署 Let’s Encrypt 证书与自动续期脚本 作为一只菜鸟,对别人都已经掌握而自己却没有实践过的东西总是心痒难耐,...

    练小习

扫码关注云+社区

领取腾讯云代金券