浅谈shiro

本篇文章主要是对权限框架shiro的一个小总结。写的不对的地方或者哪里需要修改的欢迎大家给出意见。

shiro是什么

      Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码学和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

主要功能

三个核心组件:Subject, SecurityManager 和 Realms.

Subject:即“当前操作用户”。但是,在Shiro中,Subject这一概念并不仅仅指人,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物。它仅仅意味着“当前跟软件交互的东西”。但考虑到大多数目的和用途,你可以把它认为是Shiro的“用户”概念。

Subject代表了当前用户的安全操作,SecurityManager则管理所有用户的安全操作。

SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。

Realm: Realm充当了Shiro与应用安全数据间的“桥梁”或者“连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。

从这个意义上讲,Realm实质上是一个安全相关的DAO:它封装了数据源的连接细节,并在需要时将相关数据提供给Shiro。当配置Shiro时,你必须至少指定一个Realm,用于认证和(或)授权。配置多个Realm是可以的,但是至少需要一个。

Shiro内置了可以连接大量安全数据源(又名目录)的Realm,如LDAP、关系数据库(JDBC)、类似INI的文本配置资源以及属性文件等。如果缺省的Realm不能满足需求,你还可以插入代表自定义数据源的自己的Realm实现。


shiro 的执行图

为什么要使用shiro?

     shiro 的安全,围绕着 2点来,  1 是 角色 2是权限

     我们通常是角色对应一组权限,他这边不是的。

      我们系统中角色不是固定的,但是权限是固定的,比如    角色允许动态去创建,因此我们只可以拿权限来判断

       比如  useraction  里面的add 方法  我可以通过  一个注解  参数为 user:add 代表  shiro  维护的当前请求用户的 这个人只要有 user:add  就可以了。

       比如  useraction 里面有一个 findbean (获取一个bean的信息)   又有一个listdata(获取列表数据)  他们都是查看权限  他们的注解加入同一个 user:see 就可以了

      如果用传统的url拦截我们需要给 findbean 和 listdata 各配置一个url权限(他们是不同的url),很显然用shiro  去做这件事更方便一些。

      另外,比较好的就是shiro   自带了前台的标签

      我们在列表页面   的添加按钮,动态判断是否有 user:add 这个权限,如果有才给他显示,   不用shiro   我们需要自己写一个标签,现在shiro   自带标签。

shiro的简单demo

   工具说明: 这里楼主使用的开发工具是IntelliJ IDEA,jdk用的1.8

    代码说明:

        首先加入shiro的依赖包。楼主使用的maven来进行管理


shiro的相关jar包

添加shiro的XML 配置


shiro的xml配置

若果是web项目,还需要在web.xml文件中配置shiro的filter。


shiroFilter

自己可以重写relam类,定义自己的权限规范,这里也相当于是shiro使用的一个重点。继承 org.apache.shiro.realm.AuthorizingRealm;这个类。并且重写其中的doGetAuthorizationInfo以及doGetAuthenticationInfo方法。第一个方法是对用户授权,第二个方法是对用户进行认证。

shiro的验证原理分析:shiro 登录验证的时候会封装一个subject。然后我们可以通过这个subject 的用户名或者其他标致来查询是否拥有这个用户,如果没有的话会抛出一个    org.apache.shiro.authc.UnknownAccountException 。然后通过这个用户名或者其他标志从数据库查出来的实体类做比较。如果符合则返回一个AuthenticationInfo。没有验证成功则抛出一系列异常。

 异常总结:

<-- 身份认证异常 --> 

<--身份令牌异常,不支持的身份令牌-->

org.apache.shiro.authc.pam.UnsupportedTokenException  

<-- 未知账户/没找到帐号,登录失败-->

org.apache.shiro.authc.UnknownAccountException  

<--帐号锁定-->

org.apache.shiro.authc.LockedAccountException  

<--用户禁用-->

org.apache.shiro.authc.DisabledAccountException  

<--登录重试次数,超限。只允许在一段时间内允许有一定数量的认证尝试-->

org.apache.shiro.authc.ExcessiveAttemptsException  

<--一个用户多次登录异常:不允许多次登录,只能登录一次 。即不允许多处登录--->

org.apache.shiro.authc.ConcurrentAccessException  

<-- 账户异常-->

org.apache.shiro.authc.AccountException  

<--过期的凭据异常-->

org.apache.shiro.authc.ExpiredCredentialsException  

<--- 错误的凭据异常 -->

org.apache.shiro.authc.IncorrectCredentialsException  

<--凭据异常-->

org.apache.shiro.authc.CredentialsException  

org.apache.shiro.authc.AuthenticationException  

<--权限异常-->

<--没有访问权限,访问异常 -->

org.apache.shiro.authz.HostUnauthorizedException  

org.apache.shiro.authz.UnauthorizedException  

  <-- 授权异常 -->  

org.apache.shiro.authz.UnauthenticatedException  

org.apache.shiro.authz.AuthorizationException  

<-- shiro全局异常 -->  

org.apache.shiro.ShiroException


shiro的授权分析:shiro的授权主要是利用角色和权限信息来控制用户的权限,通过每一个角色的不同来确定对应的权限。可以配置多个数据源relam来处理权限;

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容