Apache Shiro功能强大并且容易集成的开源权限框架

关于 Shiro 的一系列特征及优点,很多文章已有列举,这里不再逐一赘述,本文重点介绍 Shiro 在 ">Web Application 中如何实现验证码认证以及如何实现单点登录。

用户权限模型

在揭开 Shiro 面纱之前,我们需要认知用户权限模型。本文所提到用户权限模型,指的是用来表达用户信息及用户权限信息的数据模型。即能证明“你是谁?”、“你能访问多少受保护资源?”。为实现一个较为灵活的用户权限数据模型,通常把用户信息单独用一个实体表示,用户权限信息用两个实体表示。

用户信息用 LoginAccount 表示,最简单的用户信息可能只包含用户名 loginName 及密码 password 两个属性。实际应用中可能会包含用户是否被禁用,用户信息是否过期等信息。 用户权限信息用 Role 与 Permission 表示,Role 与 Permission 之间构成多对多关系。Permission 可以理解为对一个资源的操作,Role 可以简单理解为 Permission 的集合。 用户信息与 Role 之间构成多对多关系。表示
同一个用户可以拥有多个 Role,一个 Role 可以被多个用户所拥有。

图 1. 用户权限模型

认证与授权

Shiro 认证与授权处理过程

被 Shiro 保护的资源,才会
经过认证与授权过程。使用 Shiro 对 URL 进行保护可以参见“与 Spring 集成”章节。 用户访问受 Shiro 保护的 URL;
例如 http://host/security/action.do。 Shiro
首先检查用户是否已经通过认证,如果未通过认证检查,则跳转到登录页面,否则进行授权检查。认证过程需要通过 Realm 来
获取用户及密码信息,通常情况我们实现 JDBC Realm,此时用户认证所需要的信息从数据库获取。如果使用了缓存,除第一次外用户信息从缓存获取。 认证通过后接受 Shiro 授权检查,授权检查
同样需要通过 Realm 获取用户权限信息。Shiro 需要的用户权限信息包括 Role 或 Permission,可以是其中任何一种或同时两者,具体取决于受保护资源的配置。如果用户权限信息未包含 Shiro 需要的 Role 或 Permission,授权不通过。只有授权通过,才可以访问受保护 URL 对应的资源,否则跳转到“未经授权页面”。

Shiro Realm

在 Shiro 认证与授权处理过程中,提及到 Realm。Realm 可以理解为读取用户信息、角色及权限的 DAO。由于大多 Web 应用程序使用了关系数据库,因此实现 JDBC Realm 是常用的做法,后面会提到 CAS Realm,另一个 Realm 的实现。

清单 1. 实现自己的 JDBC Realm

public class MyShiroRealm extends AuthorizingRealm{ // 用于获取用户信息及用户权限信息的业务接口 private BusinessManager businessManager; // 获取授权信息 protected AuthorizationInfo doGetAuthorizationInfo( PrincipalCollection principals) { String username = (String) principals.fromRealm( getName()).iterator().next(); if( username != null ){ // 查询用户授权信息 Collection<String> pers=businessManager.queryPermissions(username); if( pers != null && !pers.isEmpty() ){ SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); for( String each:pers ) info.addStringPermissions( each ); return info; } } return null; } // 获取认证信息 protected AuthenticationInfo doGetAuthenticationInfo( AuthenticationToken authcToken ) throws AuthenticationException { UsernamePasswordToken token = (UsernamePasswordToken) authcToken; // 通过
表单接收的用户名 String username = token.getUsername(); if( username != null && !"".equals(username) ){ LoginAccount account = businessManager.get( username ); if( account != null ){ return new SimpleAuthenticationInfo( account.getLoginName(),account.getPassword(),getName() ); } } return null; } }

代码说明:

businessManager 表示从数据库获取用户信息及用户权限信息的业务类,实际情况中可能因用户权限模型设计不同或持久化框架选择不同,这里没给出示例代码。 doGetAuthenticationInfo 方法,取用户信息。对照用户权限模型来说,就是取 LoginAccount 实体。最终我们需要为 Shiro 提供 AuthenticationInfo 对象。 doGetAuthorizationInfo 方法,获取用户权限信息。代码给出了获取用户 Permission 的示例,获取用户 Role 的代码类似。为 Shiro 提供的用户权限信息以 AuthorizationInfo 对象形式返回。

时间: 2024-10-07 04:03:00

Apache Shiro功能强大并且容易集成的开源权限框架的相关文章

Apache Shiro

Apache Shiro 是功能强大并且容易集成的开源权限框架,它能够完成认证.授权.加密.会话管理等功能.认证和授权为权限控制的核心,简单来说,"认证"就是证明你是谁? Web 应用程序一般做法通过表单提交用户名及密码达到认证目的."授权"即是否允许已认证用户访问受保护资源.关于 Shiro 的一系列特征及优点,很多文章已有列举,这里不再逐一赘述,本文重点介绍 Shiro 在 Web Application 中如何实现验证码认证以及如何实现单点登录. 14 评论

让Apache Shiro保护你的应用_Linux

在尝试保护你的应用时,你是否有过挫败感?是否觉得现有的Java安全解决方案难以使用,只会让你更糊涂?本文介绍的Apache Shiro,是一个不同寻常的Java安全框架,为保护应用提供了简单而强大的方法.本文还解释了Apache Shiro的项目目标.架构理念以及如何使用Shiro为应用安全保驾护航. 什么是Apache Shiro?Apache Shiro(发音为"shee-roh",日语"堡垒(Castle)"的意思)是一个强大易用的Java安全框架,提供了认证

Apache Shiro 使用手册(一) Shiro架构介绍_Linux

一.什么是ShiroApache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能:认证 - 用户身份识别,常被称为用户"登录":授权 - 访问控制:密码加密 - 保护或隐藏数据防止被偷窥:会话管理 - 每用户相关的时间敏感的状态.对于任何一个应用程序,Shiro都可以提供全面的安全管理服务.并且相对于其他安全框架,Shiro要简单的多. 二.Shiro的架构介绍首先,来了解一下Shiro的三个核心组件:Subject, SecurityManager

AJAX和J2EE创建功能强大的瘦客户端

ajax|j2ee|创建|客户端 创建于1998年的Iconix Pharmaceuticals公司从事科研和工业方面的软件开发.该公司是chemogenomics方面的先驱,chemogenomics是一门学科,这门学科使用化学和基因学的方法,在堆积如山的数据中深入研究,而这些数据对于开发新药并推向市场来说是必须的. 对于公司来说,一个主要的挑战是:产生一种新药或者提供制药工业所需要的信息需要将分散的.不同的数据库的数据集成起来,并且来分析它们,最后得到引人注目的结果.大多数的研究者都同意:当

使用AJAX和J2EE创建功能强大的瘦客户端

ajax|j2ee|创建|客户端 创建于1998年的Iconix Pharmaceuticals公司从事科研和工业方面的软件开发.该公司是chemogenomics方面的先驱,chemogenomics是一门学科,这门学科使用化学和基因学的方法,在堆积如山的数据中深入研究,而这些数据对于开发新药并推向市场来说是必须的. 对于公司来说,一个主要的挑战是:产生一种新药或者提供制药工业所需要的信息需要将分散的.不同的数据库的数据集成起来,并且来分析它们,最后得到引人注目的结果.大多数的研究者都同意:当

使用AJAX优化客户端:Iconix Pharmaceuticals使用AJAX和J2EE创建功能强大的瘦客户端的实践

ajax|j2ee|创建|客户端|优化     创建于1998年的Iconix Pharmaceuticals公司从事科研和工业方面的软件开发.该公司是chemogenomics方面的先驱,chemogenomics是一门学科,这门学科使用化学和基因学的方法,在堆积如山的数据中深入研究,而这些数据对于开发新药并推向市场来说是必须的.     对于公司来说,一个主要的挑战是:产生一种新药或者提供制药工业所需要的信息需要将分散的.不同的数据库的数据集成起来,并且来分析它们,最后得到引人注目的结果.大

收集的15个功能强大的HTML编辑器

基于Web的HTML编辑器,可视化编辑器,或者是富文本编辑器,是让用户在浏览器中输入富文本的一个Web组件.大多数时候 ,这些HTML编 辑器都 使用于CMS管理系统 中,让管理理或作者可以在后台轻松的创建文章内容. 不多废话了,让我们来看一下这些强大的HTML编辑器. 1. FCKeditor FCKeditor最著名的在线HTML编辑之一,它把桌面编辑器的强大功能带到了Web里在, 它可以方便的集成到 ASP, ASP.NET, PHP, Java, Perl, Phyton等等. 它支持皮

功能强大的CGI语言

  在互连网络高速发展的今天,WEB的后台开发已日益成为开发的焦点:激烈地商业竞争,也促使人们对WEB后台程序有了更高的要求.本文将向您介绍一种新型的CGI程序编写语言PHP3,它简单易学,拥有众多的优秀特性,可让您方便快捷地编写出功能强大,运行速度快,并可同时运行于WINDOWS,UNIX,LINUX平台的WEB后台程序,特别值得一提的是,任何人在遵守GNU条约的情况下,均可免费使用并更改其源码!       现有WEB后台程序,决大多数采用下列几种技术编写:PERL,C通用CGI语言直接编写

【转】推荐下载使用:功能强大的光盘刻录软件NERO 9.0中文版(最新官方原版+有效序列号)

     世界顶级光盘刻录软件NERO ,以其卓越性能长期位居同类软件榜首(市场占有率).在推出8.0还没有半年时间,就又推出了9.0最新多国语言版(包括简体中文).NERO 9.0,功能更为强大:1.支持所有品牌.不同类型的刻录机:2.支持所有品牌.不同类型的CD.DVD光碟:3.支持几乎所有的刻录对象和刻录方式.同时,进一步拓展了数字媒体和家庭娱乐功能(套装:"一条龙"作业).现提供NERO 9.0官方原版下载 + 有效序列号如下-- NERO 9.0官方中文版下载: 点击--下载