shiro 学习记录

根据Shiro的设计思路,用户与角色之前的关系为多对多,
角色与权限之间的关系也是多对多。
在数据库中需要因此建立5张表,
分别是
用户表(存储用户名,密码,盐等)、
角色表(角色名称,相关描述等)、
权限表(权限名称,相关描述等)、
用户-角色对应中间表(以用户ID和角色ID作为联合主键)、
角色-权限对应中间表(以角色ID和权限ID作为联合主键)。
总之结论:
Shiro需要根据用户名和密码首先判断登录的用户是否合法,
然后再对合法用户授权。而这个过程就是Realm的实现过程。
授权只是查找数据源中权限并给当前用户
授权与对应资源需要定义的一个权限才能使用

Realm的作用:
1.根据传入用户principle(身份)查询数据源得到对应的用户信息封装交给subject
2.为查询用户的role和permisson 并封装好传给subject
subject得到信息后可以进行认证,判断是否具有某项权限等操作

Realm 是一个能够访问应用程序特定的安全数据(如用户、角色及权限)的组件。
Realm 将应用程序特定的数据转换成一种 Shiro 能够理解的格式
Realm 通常和数据源是一对一的对应关系

Shiro不会去维护用户、维护权限;
这些需要我们自己去设计/提供;然后通过相应的接口注入给Shiro即可

权限是名词,对应着权限表:对某个资源的某种操作!!!
只有在具体应用(资源、url)中标注了该权限名词,权限才起作用

通过注解标注资源的访问权限(该资源需要具有什么权限才能访问)
Shiro共有5个注解,接下来我们就详细说说吧
shiro 提供的注解,提供方法安全验证(方法级别)
1、RequiresAuthentication:
使用该注解标注的类,实例,方法在访问或调用时,当前Subject必须在当前session中已经过认证。
2、RequiresGuest:
使用该注解标注的类,实例,方法在访问或调用时,当前Subject可以是“gust”身份,不需要经过认证或者在原先的session中存在记录。
3、RequiresPermissions:
当前Subject需要拥有某些特定的权限时,才能执行被该注解标注的方法。如果当前Subject不具有这样的权限,则方法不会被执行。
4、RequiresRoles:
当前Subject必须拥有所有指定的角色时,才能访问被该注解标注的方法。如果当天Subject不同时拥有所有指定角色,则方法不会执行还会抛出AuthorizationException异常。
5、RequiresUser
当前Subject必须是应用的用户,才能访问或调用被该注解标注的类,实例,方法。

Shiro的认证注解处理是有内定的处理顺序的
如果有个多个注解的话,前面的通过了会继续检查后面的,若不通过则直接返回,处理顺序依次为(与实际声明顺序无关)
顺序:4>3>1>5>2
示例:
//属于user或者admin之一;修改logical为OR 即可
@RequiresRoles(value={"user","admin"},logical=Logical.OR)
//符合index:hello或index:world权限要求即可
@RequiresPermissions(value={"index:hello","index:world"},logical=Logical.OR)

shiro注解与过滤器的使用
注解是对某个资源方法进行限制(需要配置注解使用) --细粒度
过滤器是对匹配的url进行限制(需要配置过滤器) --粗粒度

anon,authcBasic,auchc,user是认证过滤器,
perms,roles,ssl,rest,port是授权过滤器

为接口配置过滤器链(访问接口时会有对应的过滤器处理后进行访问)(失败会抛出异常)
自定义过滤器

权限名词的定义:
第一部分是域(domain), 第二部分是操作(action), 第三部分是实例(instance)
eg:
role1=user:update:1
表达的是,角色1 拥有实例1的更新权限
对user中的实例1具有update的权限

1.通过注解和过滤器可以配置资源的访问要达到的要求
2.通过Realm可以使subject获得用户的相关role和permission

用户具备某种权限 VS 资源URL需要某种权限才能访问

java 过滤器
Filter接口

用户认证登录成功,会在session中存储是否认证通过的信息!!!!!!!!!
org.apache.shiro.subject.support.DefaultSubjectContext_AUTHENTICATED_SESSION_KEY

登录会默认创建session,也可以自定义session管理器管理session
web环境默认使用web环境的session,se环境默认default session

shiro
用户 操作资源 是否有权限(资源指Controller层接口)
1.用户权限封装
2.资源所需权限定义
3.过滤器匹配

service对象和数据库等是否可作为资源设定权限??(不可!!)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 什么是shiro 是一个java的安全(权限)框架,可以用在javase/javaee环境; shiro可完成:认...
    强某某阅读 4,895评论 1 5
  • github: https://github.com/pyygithub/shiro-web 什么是Shiro? ...
    匆匆岁月阅读 11,206评论 3 22
  • 女:老公,想你了,明天打电话给你 男:别打了还是微信吧 女:哦,知道了,那你忙吧 男:恩 时间 14:15 女:老...
    艾米小宇宙阅读 1,895评论 0 0
  • 一 2014年下半年有一段时间,我被抑郁症折磨的无比痛苦,进了一个抑郁症贴吧去聊天。 贴吧里有各种各样的病情讲述,...
    躺平专家阅读 16,524评论 14 18
  • 题目来源给一个数组以及一个targe,求组成这个targe的两个数的索引。我想的是用哈希表记录下,然后看targe...
    我叫胆小我喜欢小心阅读 1,756评论 0 1

友情链接更多精彩内容