开源权限管理框架Shiro.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
开源权限管理框架Shiro

一、Shiro基本概念: Apache Shiro(日语“堡垒(Castle)”的意思)是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可为任何应用提供安全保障 - 从命令行应用、移动应用到大型网络及企业应用。 Shiro为解决下列问题(我喜欢称它们为应用安全的四要素)提供了保护应用的API: 认证 - 用户身份识别,常被称为用户“登录”; 授权 - 访问控制; 密码加密 - 保护或隐藏数据防止被偷窥; 会话管理 - 每用户相关的时间敏感的状态。 Shiro还支持一些辅助特性,如Web应用安全、单元测试和多线程,它们的存在强化了上面提到的四个要素。 Shiro的基本功能如图: 二、Shiro基本处理流程及一些主要概念 如图: Shiro框架拦截到一个应用请求后,会为此请求建立一个Subject对象,本次Session没关闭时,Subject对象会一直存在,作为一个虚拟的user对象。对此对象可以进行身份验证(Authentication)和权限验证(Authorization),这些处理将会提交给Shiro的SecurityManager对象。简单地理解,SecurityManager是一个总调度,负责接受不同的Subject对象的权限相关的处理请求。而真正干活的是Realm对象,也就是说最后作身份验证和权限验证的是Realm对象。 Shiro的Realm对象不提供用户信息和权限信息,这些信息是Shiro的使用者要提供的,Realm中定义的各种验证方法和安全数据的容器,使用者是把自己的安全数据装进去。 重要的事情再说一遍,对subject的各种安全验证,使用者调用subject对象的相关属性和方法,不直接操作Realm对象。 三、一些简单的例子 为了帮助大家理解Shiro的运行机制,这里简单举例说明。假设我们有一个基于MVC的简单web应用,假设Shiro框架已经配置好,拦截页面的任何请求(如何配置后面会简单介绍)。 登录时的身份验证: (1)MVC中的C(controller)接收页面发来的登录请求,从request中取出页面送来的username, password。 java代码: String username = request.getParameter("username"); String password = request.getParameter("password"); (2)构造token对象,装入username和password,用于验证。 java代码: UsernamePasswordToken mytoken = new UsernamePasswordToken(username, password); (3)获取当前session的subject对象。 java代码: Subject curSbj = SecurityUtils.getSubject(); (4)登录验证。 java代码: curSbj.login(mytoken); 若login方法验证失败,会抛出异常,所以本方法应写在一个try catch结构中。 小结:只需要调用subject的方法,不直接访问realm。 在执行某个功能时判断当前用户是否有权限执行: Subject curSbj = SecurityUtils.getSubject(); curSbj. isPermitted(“某权限”); 小结:只需要调用subject的方法,不直接访问realm。 判断当前用户是否具有某个角色: Subject curSbj = SecurityUtils.getSubject(); curSbj.hasRole(“某角色”); 小结:只需要调用subject的方法,不直接访问realm。 Realm中怎样装入使用者自定义的权限数据 (1)调用curSbj.login(mytoken)方法的请求最终会被SecurityManager发送到realm对象,并调用realm对象的doGetAuthenticationInfo()方法,我们在这个方法中验证是否存在传入的token中的username,并完成password验证。下面具体来看看doGetAuthenticationInfo()方法的代码。 java代码: protected AuthenticationInfo doGetAuthenticationInfo( AuthenticationToken authcToken) throws AuthenticationException { UsernamePasswordToken token = (UsernamePassword

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档