欢迎来到天天文库
浏览记录
ID:35336086
大小:82.46 KB
页数:5页
时间:2019-03-23
《开源权限管理框架shiro》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、—、Shiro基本概念:ApacheShiro(日语“堡垒(Castle)”的意思)是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可为任何应用提供安全保障-从命令行应用、移动应用到大型网络及企业应用。Shiro为解决下列问题(我喜欢称它们为应用安全的四要素)提供了保护应用的API:认证・用户身份识别,常被称为用户“登录”;授权・访问控制;密码加密-保护或隐藏数据防止被偷窥;会话管理-每用户相关的时间敏感的状态。Shiro还支持一些辅助特性,如Web应用安全、单元测试和多线程,它们的存在强化了上面提到的四个要索。Shiro的基本功能如图:rAuthentica
2、tionAuthorizationSessionManagementCryptography,WebSupportCaching1[concurMncy[TUMng[Bun]PrimaryConcernsSupportingFeatures二、Shiro基本处理流程及一些主要概念SecurltyManager(thecurrent’user)(managesallSubjects)(accessyoursecuritydata)Shiro框架拦截到一个应用请求后,会为此请求建立一个Subject对象,木次Session没关闭时,Subject对象会一直存在,作为一个虚拟的user对象
3、。对此对象可以进行身份验证(Authentication)和权限验证(Authorization),这吐处理将会提交给Shiro的SecurityManager对•象。简单地理解,SecurityManager是一个总调度,负责接受:不同的Subject対象的权限相关的处理请求。而真正干活的是Realm对象,也就是说最后作身份验证和权限验证的是Realm对象。Shiro的Realm对象不提供用户信息和权限信息,这些信息是Shiro的使用者要提供的,Realm中定义的各种验证方法和安全数据的容器,使用者是把自己的安全数据装进去。重要的事情再说一遍,对subject的各种安全验证,使用者
4、调用subject对彖的相关属性和方法,不直接操作Realm对象。三、一些简单的例子为了帮助大家理解Shiro的运行机制,这里简单举例说明。假设我们有一个基于MVC的简单web应用,假设Shiro框架已经配置好,拦截页血的任何请求(如何配置后血会简单介绍)。1、登录时的身份验证:(1)MVC中的C(controller)接收页面发来的登录请求,从request中取出页面送来的username,password□java代码:Stringusername=request.getParameter("username”);Stringpassword=request.getParamet
5、er("password");(2)构造token对象,装入username和password,用于验证。java代码:UsernamePasswordTokenmytoken二newUsernamePasswordToken(username,password);(3)获取当前session的subject对象。java代码:SubjectcurSbj=SecurityUtils.getSubject();(4)背录验证。java代码:curSbj.login(mytoken);若login方法验证失败,会抛出异常,所以木方法应写在一个trycatch结构屮。小结:只需要调用sub
6、ject的方法,不直接访问realmo2、在执行某个功能时判断当前用户是否有权限执行:SubjectcurSbj=Securitylltils.getSubject();curSbj.isPermitted(n某权限“);小结:只需要调川subject的方法,不直接访问realmo3、判断当前用户是否具冇某个角色:SubjectcurSbj=Securitylltils.getSubject();curSbj.hasRole(“某角色“);小结:只需要调用subject的方法,不直接访问realmo4、Realm中怎样装入使用者口定义的权限数据(1)调用curSbj.login(my
7、token)方法的请求最终会被SecurityManager发送到realm对象,并调川realm对象的doGetAuthenticationlnfo()Z/'法,我们在这个方法屮验证是否存在传入的token中的username,并完成password验证。下1侨具体来看看doGetAuthenticationlnfo()方法的代码。java代码:protectedAuthenticationlnfodoGetAuthenticationlnfo(Auth
此文档下载收益归作者所有