Shiro
月轩居士
Archimedes said: give me a fulcrum,I will move the earth.Program ape said: give me a keyboard,I can change the world.
展开
-
第一章 Shiro简介
1.1 简介Apache Shiro是Java的一个安全框架。目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Security做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的Shiro就足够了。对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了。本教程只介绍基本的Shiro使转载 2015-12-23 14:54:47 · 431 阅读 · 0 评论 -
第二十章 无状态Web应用集成
在一些环境中,可能需要把Web应用做成无状态的,即服务器端无状态,就是说服务器端不会存储像会话这种东西,而是每次请求时带上相应的用户名进行登录。如一些REST风格的API,如果不使用OAuth2协议,就可以使用如REST+HMAC认证进行访问。HMAC(Hash-based Message Authentication Code):基于散列的消息认证码,使用一个密钥和一个消息作为输入,生成它们的消转载 2015-12-23 15:21:01 · 914 阅读 · 0 评论 -
第二十四章 在线会话管理
有时候需要显示当前在线人数、当前在线用户,有时候可能需要强制某个用户下线等;此时就需要获取相应的在线用户并进行一些操作。 本章基于《第十六章 综合实例》代码构建。 会话控制器Java代码 @RequiresPermissions("session:*") @Controller @RequestMapping("/sessions") public转载 2015-12-24 09:52:31 · 1282 阅读 · 0 评论 -
第二十三章 多项目集中权限管理及分布式会话
在做一些企业内部项目时或一些互联网后台时;可能会涉及到集中权限管理,统一进行多项目的权限管理;另外也需要统一的会话管理,即实现单点身份认证和授权控制。 学习本章之前,请务必先学习《第十章 会话管理》和《第十六章 综合实例》,本章代码都是基于这两章的代码基础上完成的。 本章示例是同域名的场景下完成的,如果跨域请参考《第十五章 单点登录》和《第十七章 OAuth2集成》了解使用CAS或转载 2015-12-24 09:53:02 · 714 阅读 · 0 评论 -
第二十二章 集成验证码
在做用户登录功能时,很多时候都需要验证码支持,验证码的目的是为了防止机器人模拟真实用户登录而恶意访问,如暴力破解用户密码/恶意评论等。目前也有一些验证码比较简单,通过一些OCR工具就可以解析出来;另外还有一些验证码比较复杂(一般通过如扭曲、加线条/噪点等干扰)防止OCR工具识别;但是在中国就是人多,机器干不了的可以交给人来完成,所以在中国就有很多打码平台,人工识别验证码;因此即使比较复杂的如填字、转载 2015-12-24 09:53:30 · 665 阅读 · 0 评论 -
第二十一章 授予身份及切换身份
在一些场景中,比如某个领导因为一些原因不能进行登录网站进行一些操作,他想把他网站上的工作委托给他的秘书,但是他不想把帐号/密码告诉他秘书,只是想把工作委托给他;此时和我们可以使用Shiro的RunAs功能,即允许一个用户假装为另一个用户(如果他们允许)的身份进行访问。 本章代码基于《第十六章 综合实例》,请先了解相关数据模型及基本流程后再学习本章。 表及数据SQL请运行shir转载 2015-12-24 09:53:54 · 457 阅读 · 0 评论 -
【Shiro + Spring MVC整合】教程
1、准备Shiro的架包和spring 的架包2、项目的架构3、配置web.xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://j原创 2016-04-09 14:22:52 · 1230 阅读 · 0 评论 -
第一章:权限管理基础
为了让大家更好的理解后面讲述的知识,先介绍一点权限系统的基础知识: 几乎所有的权限系统都分成两个部分,一个是分配权限部分,一个是验证权限部分,为了理解它们,首先解释两个基本的名词:安全实体和权限。 安全实体:就是被权限系统保护的对象,比如工资数据。 权限:就是需要被校验的权限对象,比如查看、修改等。 安全实体和权限通常要一起描述才有意义:原创 2016-04-09 15:33:44 · 618 阅读 · 0 评论 -
第二章:Shiro入门
Shiro是什么 Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能 Shiro能做什么 认证:验证用户来核实他们的身份 授权:对用户执行访问控制,如: 判断用户是否被分配了一个确定的安全角色 判断用户是否被允许做某事 会话管理:在任何环境下使用Session API,即使没有Web原创 2016-04-09 15:42:45 · 847 阅读 · 0 评论 -
第三章:Shiro的配置
Shiro配置基础知识Shiro 被设计成能够在任何环境下工作,从最简单的命令行应用程序到最大的的企业群集应用。由于环境的多样性,使得许多配置机制适用于它的配置。兼容JavaBean格式的 Shiro的SecurityManager 实现及所支持的组件都是兼容JavaBean 的。这使得Shiro几乎能使用任何配置格式,如regular Java,XML(Spring,原创 2016-04-09 15:46:59 · 3888 阅读 · 0 评论 -
第四章:Shiro的身份认证(Authentication)
Authentication概述概述 Authentication 是指身份验证的过程——即证明一个用户实际上是不是他们所说的他们是谁。也就是说通过提交用户的身份和凭证给Shiro,以判断它们是否和应用程序预期的相匹配。基本概念1:Principals(身份):是Subject 的‘identifying attributes(标识属性)’。比如我们登录提交的用户名。原创 2016-04-09 15:50:30 · 8351 阅读 · 0 评论 -
第五章:Shiro的授权(Authorization)
Authorization概述概述 授权,又称作为访问控制,是对资源的访问管理的过程。换句话说,控制谁有权限在应用程序中做什么。 授权检查的例子是:该用户是否被允许访问这个网页,编辑此数据,查看此按钮,或打印到这台打印机?这些都是决定哪些是用户能够访问的。授权的三要素 授权有着三个核心元素:权限、角色和用户 。 我们需要在应用程序中对用户和权原创 2016-04-09 16:20:04 · 710 阅读 · 0 评论 -
第六章:Shiro的Realms
Realms概述n概述 Realm 是一个能够访问应用程序特定的安全数据(如用户、角色及权限)的组件。 Realm 通常和数据源是一对一的对应关系,如关系数据库,LDAP 目录,文件系统,或其他类似资源。Realm 实质上就是一个特定安全的DAO。 因为这些数据源大多通常存储身份验证数据(如密码的凭证)以及授权数据(如角色或权限),每个Realm能够执行身份验原创 2016-04-09 16:37:37 · 1804 阅读 · 0 评论 -
第六章:Shiro的Session管理
概述和配置使用n概述 Shiro提供安全框架界独一无二的东西:一个完整的企业级Session 解决方案,可以为任意的应用提供session支持,包括web和非web应用,并且无需部署你的应用程序到Web 容器或使用EJB容器。n基本使用 可以通过与当前执行的Subject 交互来获取Session: Subject currentUser = Secu原创 2016-04-09 16:41:12 · 2991 阅读 · 0 评论 -
第八章:Shiro和Spring的集成
Standalone ApplicationsShiro 应用程序需要一个具有单例SecurityManager 实例的应用程序。请注意,这不会是一个静态的单例,但应该只有一个应用程序能够使用的实例,无论它是否是静态单例的。n在Spring 应用程序中启用应用程序单例SecurityManager的最简单配置:原创 2016-04-09 16:45:09 · 681 阅读 · 0 评论 -
第九章:Shiro的WEB
Shiro可以和普通web集成的,但考虑到现在的应用基本都会使用spring,所以就不去讲最基本的web集成了。跟Spring集成的方式前面已经讲过了。在Web应用中,可以配置[urls]: [urls]项允许你做一些在我们已经见过的任何Web 框架都不存在的东西:在你的应用程序中定义自适应过滤器链来匹配URL 路径![urls]的格式 URL_Ant_Path原创 2016-04-09 16:48:17 · 480 阅读 · 0 评论 -
第十九章 动态URL权限控制
用过Spring Security的朋友应该比较熟悉对URL进行全局的权限控制,即访问URL时进行权限匹配;如果没有权限直接跳到相应的错误页面。Shiro也支持类似的机制,不过需要稍微改造下来满足实际需求。不过在Shiro中,更多的是通过AOP进行分散的权限控制,即方法级别的;而通过URL进行权限控制是一种集中的权限控制。本章将介绍如何在Shiro中完成动态URL权限控制。 本章代码基于《转载 2015-12-23 15:19:47 · 607 阅读 · 0 评论 -
第十八章 并发登录人数控制
在某些项目中可能会遇到如每个账户同时只能有一个人登录或几个人同时登录,如果同时有多人登录:要么不让后者登录;要么踢出前者登录(强制退出)。比如spring security就直接提供了相应的功能;Shiro的话没有提供默认实现,不过可以很容易的在Shiro中加入这个功能。 示例代码基于《第十六章 综合实例》完成,通过Shiro Filter机制扩展KickoutSessionControl转载 2015-12-23 15:18:48 · 1375 阅读 · 0 评论 -
第十七章 OAuth2集成
目前很多开放平台如新浪微博开放平台都在使用提供开放API接口供开发者使用,随之带来了第三方应用要到开放平台进行授权的问题,OAuth就是干这个的,OAuth2是OAuth协议的下一个版本,相比OAuth1,OAuth2整个授权流程更简单安全了,但不兼容OAuth1,具体可以到OAuth2官网http://oauth.net/2/查看,OAuth2协议规范可以参考http://tools.ietf.转载 2015-12-23 15:17:44 · 654 阅读 · 0 评论 -
第二章 身份验证
身份验证,即在应用中谁能证明他就是他本人。一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明。在shiro中,用户需要提供principals (身份)和credentials(证明)给shiro,从而应用能验证用户身份:principals:身份,即主体的标识属性,可以是任何东西,如用户名、邮箱等,唯一即可。一个主体可以有多个principals,但转载 2015-12-23 14:57:08 · 645 阅读 · 0 评论 -
第三章
授权,也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作等)。在授权中需了解的几个关键对象:主体(Subject)、资源(Resource)、权限(Permission)、角色(Role)。主体主体,即访问应用的用户,在Shiro中使用Subject代表该用户。用户只有授权后才允许访问相应的资源。资源在应用中用户可以访问的任何东西,比如访问JSP页面、查看转载 2015-12-23 14:59:39 · 374 阅读 · 0 评论 -
第四章--INI配置
之前章节我们已经接触过一些INI配置规则了,如果大家使用过如Spring之类的IoC/DI容器的话,Shiro提供的INI配置也是非常类似的,即可以理解为是一个IoC/DI容器,但是区别在于它从一个根对象securityManager开始。 4.1 根对象SecurityManager从之前的Shiro架构图可以看出,Shiro是从根对象SecurityManager进行身份验证和授权转载 2015-12-23 15:00:52 · 375 阅读 · 0 评论 -
第五章----编码/加密
在涉及到密码存储问题上,应该加密/生成密码摘要存储,而不是存储明文密码。比如之前的600w csdn账号泄露对用户可能造成很大损失,因此应加密/生成不可逆的摘要方式存储。 5.1 编码/解码 Shiro提供了base64和16进制字符串编码/解码的API支持,方便一些编码解码操作。Shiro内部的一些数据的存储/表示都使用了base64和16进制字符串。Java代码转载 2015-12-23 15:02:13 · 407 阅读 · 0 评论 -
第六章----- Realm及相关对象
6.1 Realm【2.5 Realm】及【3.5 Authorizer】部分都已经详细介绍过Realm了,接下来再来看一下一般真实环境下的Realm如何实现。 1、定义实体及关系即用户-角色之间是多对多关系,角色-权限之间是多对多关系;且用户和权限之间通过角色建立关系;在系统中验证时通过权限验证,角色只是权限集合,即所谓的显示角色;其实权限应该对应到资源(如菜单、URL转载 2015-12-23 15:03:40 · 1388 阅读 · 0 评论 -
第七章 -----与WEB集成
Shiro提供了与Web集成的支持,其通过一个ShiroFilter入口来拦截需要安全控制的URL,然后进行相应的控制,ShiroFilter类似于如Strut2/SpringMVC这种web框架的前端控制器,其是安全控制的入口点,其负责读取配置(如ini配置文件),然后判断URL是否需要登录/权限等工作。 7.1 准备环境1、创建webapp应用 此处我们使用了jetty-mav转载 2015-12-23 15:05:15 · 295 阅读 · 0 评论 -
第八章------拦截器机制
8.1 拦截器介绍Shiro使用了与Servlet一样的Filter接口进行扩展;所以如果对Filter不熟悉可以参考《Servlet3.1规范》http://www.iteye.com/blogs/subjects/Servlet-3-1了解Filter的工作原理。首先下图是Shiro拦截器的基础类图:1、NameableFilterNameableFilter给Filter起个转载 2015-12-23 15:07:23 · 8324 阅读 · 0 评论 -
第九章-----jsp标签
Shiro提供了JSTL标签用于在JSP/GSP页面进行权限控制,如根据登录用户显示相应的页面按钮。 导入标签库Java代码 @taglib prefix="shiro" uri="http://shiro.apache.org/tags" %> 标签库定义在shiro-web.jar包下的META-INF/shiro.tld中定义。 gu转载 2015-12-23 15:08:28 · 389 阅读 · 0 评论 -
第十章 会话管理
Shiro提供了完整的企业级会话管理功能,不依赖于底层容器(如web容器tomcat),不管JavaSE还是JavaEE环境都可以使用,提供了会话管理、会话事件监听、会话存储/持久化、容器无关的集群、失效/过期支持、对Web的透明支持、SSO单点登录的支持等特性。即直接使用Shiro的会话管理可以直接替换如Web容器的会话管理。 会话所谓会话,即用户访问应用时保持的连接关系,在多次交互转载 2015-12-23 15:09:39 · 440 阅读 · 0 评论 -
第十一章------缓存机制
Shiro提供了类似于Spring的Cache抽象,即Shiro本身不实现Cache,但是对Cache进行了又抽象,方便更换不同的底层Cache实现。对于Cache的一些概念可以参考我的《Spring Cache抽象详解》:http://jinnianshilongnian.iteye.com/blog/2001040。 Shiro提供的Cache接口: Java代码转载 2015-12-23 15:10:39 · 471 阅读 · 0 评论 -
第十二章与Spring集成
Shiro的组件都是JavaBean/POJO式的组件,所以非常容易使用Spring进行组件管理,可以非常方便的从ini配置迁移到Spring进行管理,且支持JavaSE应用及Web应用的集成。 在示例之前,需要导入shiro-spring及spring-context依赖,具体请参考pom.xml。spring-beans.xml配置文件提供了基础组件如DataSource、DAO、转载 2015-12-23 15:11:50 · 387 阅读 · 0 评论 -
第十三章 ------ RememberMe
Shiro提供了记住我(RememberMe)的功能,比如访问如淘宝等一些网站时,关闭了浏览器下次再打开时还是能记住你是谁,下次访问时无需再登录即可访问,基本流程如下:1、首先在登录页面选中RememberMe然后登录成功;如果是浏览器登录,一般会把RememberMe的Cookie写到客户端并保存下来;2、关闭浏览器再重新打开;会发现浏览器还是记住你的;3、访问一般的网页服务器端还是转载 2015-12-23 15:12:50 · 427 阅读 · 0 评论 -
第十四章 -------SSL
对于SSL的支持,Shiro只是判断当前url是否需要SSL登录,如果需要自动重定向到https进行访问。 首先生成数字证书,生成证书到D:\localhost.keystore使用JDK的keytool命令,生成证书(包含证书/公钥/私钥)到D:\localhost.keystore:keytool -genkey -keystore "D:\localhost.keystore转载 2015-12-23 15:14:32 · 348 阅读 · 0 评论 -
第十五章 -------单点登录
Shiro 1.2开始提供了Jasig CAS单点登录的支持,单点登录主要用于多系统集成,即在多个系统中,用户只需要到一个中央服务器登录一次即可访问这些系统中的任何一个,无须多次登录。此处我们使用Jasig CAS v4.0.0-RC3版本:https://github.com/Jasig/cas/tree/v4.0.0-RC3 Jasig CAS单点登录系统分为服务器端和客户端,服务转载 2015-12-23 15:15:49 · 472 阅读 · 0 评论 -
第十六章 综合实例
简单的实体关系图 简单数据字典用户(sys_user)名称类型长度描述idbigint 编号 主键usernamevarchar100用户名passwordvarchar1转载 2015-12-23 15:16:38 · 496 阅读 · 0 评论 -
第十章:Shiro的Cache
概述Shiro开发团队明白在许多应用程序中性能是至关重要的。Caching 是Shiro 中的一个重要功能,以确保安全操作保持尽可能的快。但是,Shiro并不实现缓存的功能,Shiro 的缓存支持基本上是一个抽象的(包装)API,它将“坐”在一个基本的缓存机制产品(例如,Ehcache,OSCache,Terracotta,Coherence,GigaSpaces,JBossCac原创 2016-04-09 16:51:50 · 1502 阅读 · 0 评论