转载: http://jinnianshilongnian.iteye.com/blog/2018398, 感谢原做者
博客分类:
历经三个月左右时间,《跟我学Shiro》系列教程已经完结,暂时没有须要补充的内容,所以生成PDF版供你们下载。最近项目比较紧,没有时间解答一些疑问,暂时没法回复一些问题,很抱歉,不过能够加群(334194438/348194195)一块儿讨论问题。 点击下载《跟我学Shiro》教程PDF版。学习交流使用,请勿用于其余任何商业用途。 Shiro目录 第一章 Shiro简介 第二章 身份验证 第三章 受权 第四章 INI配置 第五章 编码/加密 第六章 Realm及相关对象 第七章 与Web集成
目录贴: 跟我学Shiro目录贴 有时候须要显示当前在线人数、当前在线用户,有时候可能须要强制某个用户下线等;此时就须要获取相应的在线用户并进行一些操做。 本章基于《第十六章 综合实例》代码构建。 会话控制器 @RequiresPermissions("session:*") @Controller @RequestMapping("/sessions") public class SessionController { @Autowired private SessionDAO sessio ...
目录贴: 跟我学Shiro目录贴 在作一些企业内部项目时或一些互联网后台时;可能会涉及到集中权限管理,统一进行多项目的权限管理;另外也须要统一的会话管理,即实现单点身份认证和受权控制。 学习本章以前,请务必先学习《第十章 会话管理》和《第十六章 综合实例》,本章代码都是基于这两章的代码基础上完成的。 本章示例是同域名的场景下完成的,若是跨域请参考《第十五章 单点登陆》和《第十七章 OAuth2集成》了解使用CAS或OAuth2实现跨域的身份验证和受权。另外好比客户端/服务器端的安全校验可参考《第二十章 无状态Web应用集成》。 部署架构 1 ...
目录贴: 跟我学Shiro目录贴 在作用户登陆功能时,不少时候都须要验证码支持,验证码的目的是为了防止机器人模拟真实用户登陆而恶意访问,如暴力破解用户密码/恶意评论等。目前也有一 些验证码比较简单,经过一些OCR工具就能够解析出来;另外还有一些验证码比较复杂(通常经过如扭曲、加线条/噪点等干扰)防止OCR工具识别;可是在中 国就是人多,机器干不了的能够交给人来完成,因此在中国就有不少打码平台,人工识别验证码;所以即便比较复杂的如填字、算数等类型的验证码仍是能识别的。 因此验证码也不是绝对可靠的,目前比较可靠仍是手机验证码,可是对于用户来讲相对于验证码仍是比较麻烦的。 对于验证 ...
目录贴: 跟我学Shiro目录贴 在一些场景中,好比某个领导由于一些缘由不能进行登陆网站进行一些操做,他想把他网站上的工做委托给他的秘书,可是他不想把账号/密码告诉他秘书,只是想 把工做委托给他;此时和咱们可使用Shiro的RunAs功能,即容许一个用户伪装为另外一个用户(若是他们容许)的身份进行访问。 本章代码基于《第十六章 综合实例》,请先了解相关数据模型及基本流程后再学习本章。 表及数据SQL 请运行shiro-example-chapter21/sql/ shiro-schema.sql 表结构 请运行shiro-example-chapter21/sq ...
目录贴: 跟我学Shiro目录贴 在一些环境中,可能须要把Web应用作成无状态的,即服务器端无状态,就是说服务器端不会存储像会话这种东西,而是每次请求时带上相应的用户名进行登陆。 如一些REST风格的API,若是不使用OAuth2协议,就可使用如REST+HMAC认证进行访问。HMAC(Hash-based Message Authentication Code):基于散列的消息认证码,使用一个密钥和一个消息做为输入,生成它们的消息摘要。注意该密钥只有客户端和服务端知道,其余第三方是不知道的。访 问时使用该消息摘要进行传播,服务端而后对该消息摘要进行验证。若是只传递用户名+密码的消 ...
目录贴: 跟我学Shiro目录贴 用过Spring Security的朋友应该比较熟悉对URL进行全局的权限控制,即访问URL时进行权限匹配;若是没有权限直接跳到相应的错误页面。Shiro也支持相似的机制,不过须要稍微改造下来知足实际需� ...
目录贴: 跟我学Shiro目录贴 在某些项目中可能会遇到如每一个帐户同时只能有一我的登陆或几我的同时登陆,若是同时有多人登陆:要么不让后者登陆;要么踢出前者登陆(强制退出)。好比 spring security就直接提供了相应的功能;Shiro的话没有提供默认实现,不过能够很容易的在Shiro中加入这个功能。 示例代码基于《第十六章 综合实例》完成,经过Shiro Filter机制扩展KickoutSessionControlFilter完成。 首先来看看如何配置使用(spring-config-shiro.xml) kickoutSessionContro ...
目录贴: 跟我学Shiro目录贴 目前不少开放平台如新浪微博开放平台都在使用提供开放API接口供开发者使用,随之带来了第三方应用要到开放平台进行受权的问题,OAuth就是干这个 的,OAuth2是OAuth协议的下一个版本,相比OAuth1,OAuth2整个受权流程更简单安全了,但不兼容OAuth1,具体能够到 OAuth2官网http://oauth.net/2/查看,OAuth2协议规范能够参考http://tools.ietf.org/html /rfc6749。目前有好多参考实现供选择,能够到其官网查看下载。 本文使用Apache Oltu
目录贴: 跟我学Shiro目录贴 简单的实体关系图 简单数据字典 用户(sys_user) 名称 类型 长度 描述 id
目录贴: 跟我学Shiro目录贴 Shiro 1.2开始提供了Jasig CAS单点登陆的支持,单点登陆主要用于多系统集成,即在多个系统中,用户只须要到一个中央服务器登陆一次便可访问这些系统中的任何一个,无须屡次登陆。此处咱们使用Jasig CAS v4.0.0-RC3版本: https://github.com/Jasig/cas/tree/v4.0.0-RC3 Jasig CAS单点登陆系统分为服务器端和客户端,服务器端提供单点登陆,多个客户端(子系统)将跳转到该服务器进行登陆验证,大致流程以下: 一、访问客户端须要登陆的页面http://localhost:90 ...
目录贴: 跟我学Shiro目录贴 对于SSL的支持,Shiro只是判断当前url是否须要SSL登陆,若是须要自动重定向到https进行访问。 首先生成数字证书,生成证书到D:\localhost.keystore 使用JDK的keytool命令,生成证书(包含证书/公钥/私钥)到D:\localhost.keystore: keytool -genkey -keystore "D:\localhost.keystore" -alias localhost -keyalg RSA
目录贴: 跟我学Shiro目录贴 Shiro提供了记住我(RememberMe)的功能,好比访问如淘宝等一些网站时,关闭了浏览器下次再打开时仍是能记住你是谁,下次访问时无需再登陆便可访问,基本流程以下: 一、首先在登陆页面选中RememberMe而后登陆成功;若是是浏览器登陆,通常会把RememberMe的Cookie写到客户端并保存下来; 二、关闭浏览器再从新打开;会发现浏览器仍是记住你的; 三、访问通常的网页服务器端仍是知道你是谁,且能正常访问; 四、可是好比咱们访问淘宝时,若是要查看个人订单或进行支付时,此时仍是须要再进行身份认证的,以确保当前用户仍是你。 ...
目录贴: 跟我学Shiro目录贴 Shiro的组件都是JavaBean/POJO式的组件,因此很是容易使用Spring进行组件管理,能够很是方便的从ini配置迁移到Spring进行管理,且支持JavaSE应用及Web应用的集成。 在示例以前,须要导入shiro-spring及spring-context依赖,具体请参考pom.xml。 spring-beans.xml配置文件提供了基础组件如DataSource、DAO、Service组件的配置。 JavaSE应用 spring-shiro.xml提供了普通JavaSE独立应用的Spring配置: &l ...
目录贴: 跟我学Shiro目录贴 Shiro提供了相似于Spring的Cache抽象,即Shiro自己不实现Cache,可是对Cache进行了又抽象,方便更换不一样的底层Cache 实现。对于Cache的一些概念能够参考个人《Spring Cache抽象详解》:http://jinnianshilongnian.iteye.com/blog/2001040。 Shiro提供的Cache接口: public interface Cache<K, V> { //根据Key获取缓存中的值 public V get(K key) throws C ...
目录贴: 跟我学Shiro目录贴 Shiro提供了完整的企业级会话管理功能,不依赖于底层容器(如web容器tomcat),无论JavaSE仍是JavaEE环境均可以使用,提供了会 话管理、会话事件监听、会话存储/持久化、容器无关的集群、失效/过时支持、对Web的透明支持、SSO单点登陆的支持等特性。即直接使用Shiro的会 话管理能够直接替换如Web容器的会话管理。 会话 所谓会话,即用户访问应用时保持的链接关系,在屡次交互中应用可以识别出当前访问的用户是谁,且能够在屡次交互中保存一些数据。如访问一些网站时登陆成功 后,网站能够记住用户,且在退出以前均可以识别当前用户是谁。 ...
目录贴: 跟我学Shiro目录贴 Shiro提供了JSTL标签用于在JSP/GSP页面进行权限控制,如根据登陆用户显示相应的页面按钮。 导入标签库 <%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" %> 标签库定义在shiro-web.jar包下的META-INF/shiro.tld中定义。 guest标签 <shiro:guest> 欢迎游客访问,<a href="${pageContext.req ...
目录贴: 跟我学Shiro目录贴 8.1 拦截器介绍 Shiro使用了与Servlet同样的Filter接口进行扩展;因此若是对Filter不熟悉能够参考《Servlet3.1规范》 http://www.iteye.com/blogs/subjects/Servlet-3-1了解Filter的工做原理。首先下图是Shiro拦 截器� ...
目录贴: 跟我学Shiro目录贴 Shiro提供了与Web集成的支持,其经过一个ShiroFilter入口来拦截须要安全控制的URL,而后进行相应的控制,ShiroFilter类 似于如Strut2/SpringMVC这种web框架的前端控制器,其是安全控制的入口点,其负责读取配置(如ini配置文件),而后判断URL是否需 要登陆/权限等工做。 7.1 准备环境 一、建立webapp应用 此处咱们使用了jetty-maven-plugin和tomcat7-maven-plugin插件;这样能够直接使用“mvn jetty:run”或“mvn tomcat7:run”直接 ...
目录贴: 跟我学Shiro目录贴 6.1 Realm 【2.5 Realm】及【3.5 Authorizer】部分都已经详细介绍过Realm了,接下来再来看一下通常真实环境下的Realm如何实现。 一、定义实体及关系 即用户-角色之间是多对多关系,角色-权 ...
目录贴: 跟我学Shiro目录贴 在涉及到密码存储问题上,应该加密/生成密码摘要存储,而不是存储明文密码。好比以前的600w csdn帐号泄露对用户可能形成很大损失,所以应加密/生成不可逆的摘要方式存储。 5.1 编码/解码 Shiro提供了base64和16进制字符串编码/解码的API支持,方便一些编码解码操做。Shiro内部的一些数据的存储/表示都使用了base64和16进制字符串。 String str = "hello"; String base64Encoded = Base64.encodeToString(str.getBytes ...
目录贴: 跟我学Shiro目录贴 以前章节咱们已经接触过一些INI配置规则了,若是你们使用过如Spring之类的IoC/DI容器的话,Shiro提供的INI配置也是很是相似的,即 能够理解为是一个IoC/DI容器,可是区别在于它从一个根对象securityManager开始。 4.1 根对象SecurityManager 从以前的Shiro架构图能够看出,Shiro是从根对象SecurityManager进行身份验证和受权的;也就是全部操做都是自它开始的,这个对象 是线程安全且真个应用只须要一个便可,所以Shiro提供了SecurityUtils让咱们绑定它为全局的,方便后 ...
目录贴: 跟我学Shiro目录贴 受权,也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操做等)。在受权中需了解的几个关键对象:主体(Subject)、资源(Resource)、权限(Permission)、角色( ...
目录贴: 跟我学Shiro目录贴 身份验证,即在应用中谁能证实他就是他本人。通常提供如他们的身份ID一些标识信息来代表他就是他本人,如提供身份证,用户名/密码来证实。 在shiro中,用户须要提供principals (身份)和credentials(证实)给shiro,从而应用能验证用户身份: principals:身份,即主体的标识属性,能够是任何东西,如用户名、邮箱等,惟一便可。一个主体能够有多个principals,但只有一个Primary principals
目录贴: 跟我学Shiro目录贴 1.1 简介 Apache Shiro是Java的一个安全框架。目前,使用Apache Shiro的人愈来愈多,由于它至关简单,对比Spring Security,可能没有Spring Security作的功能强大,可是在实际工做时可能并不须要那么复杂的东西,因此使用小而简单的Shiro就足够了。对于它俩到底哪一个好,这个没必要纠 结,能更简单的解决项目问题就行了。 本教程只介绍基本的Shiro使用,不会过多分析源码等,重在使用。 Shiro能够很是容易的开发出足够好的应用,其不只能够用在JavaSE环境,也能够用在JavaEE环境。S ...
历经三个月左右时间,《跟我学Shiro》系列教程已经完结,暂时没有须要补充的内容,所以生成PDF版供你们下载。最近项目比较紧,没有时间解答一些疑问,暂时没法回复一些问题,很抱歉,不过能够加群(334194438/348194195)一块儿讨论问题。 点击下载《跟我学Shiro》教程PDF版。学习交流使用,请勿用于其余任何商业用途。 Shiro目录 第一章 Shiro简介 第二章 身份验证 第三章 受权 第四章 INI配置 第五章 编码/加密 第六章 Realm及相关对象 第七章 与Web集成 第八章 拦截器机制 第九章 JSP标签 第十章 ...