Java基础之《shiro概念》

1、为什么要使用shiro?
项目中的密码是否可以明文存储
是否任意访客,无论是否登录都可以访问任何功能
项目中的各种功能操作,是否是所有用户都可以随意使用

2、shiro主要做四件事:
1、authentication:身份认证(登录)
2、authorization:授权,知道你身份后,根据身份找到你的权限
3、cryptography:密码学,加密支撑
4、session management:会话管理,登录后把你的登录信息、登录状态存入

3、shiro三个组件:
Subject:个体。当我们调用某个功能时,我们先找到Subject,由Subject某些个方法,完成最终的功能调用
SecurityManager:Subject底层调用SecurityManager。SecurityManager等价于SpringMVC中的DispatcherServlet。核心地位,除了加密之外的所有行为都由它调度
Realms:区域。注入Service查数据。等价于SpringMVC中的DAO,做数据支撑的

4、RBAC模型(Role Base Access Controll 基于角色的访问控制)
模型中3个主体:用户、角色、权限
每个角色可以有多个权限,每个权限可以分配给多个角色
每个用户可以有多个角色,每个角色可以分配给多个用户
两个多对多

角色把用户和权限的关系解耦了
基础表:5张(用户表、角色表、用户-角色关联表、权限表、角色-权限关联表)
更精细:用户组表、角色组表

5、权限访问控制,做的事是:
身份校验:判断是否为合法用户
权限校验:用户要做某件事或使用某些资源,必须拥有某角色,或必须拥有某权限

6、权限规则
6-1、user:query,user:insert,order:query
【:】作为分隔符,分隔资源和操作【资源:操作】
【,】作为分隔,分隔多个权限【权限1,权限2,权限3】

6-2、user:*,*:query
【*】作为通配符,代表所有操作、资源
【user:* 即user的所有操作】
【*:query 即所有资源的查询操作】

6-3、*
代表一切资源的一切权限 = 最高权限

6-4、细节
user:*
可以匹配user:xx,user:xx:xxx
*:query
只可以匹配xx:query,不能匹配xx:xxx:query,除非*:*:query

【user:update,user:insert】可以简写为【"user:update,insert"】

6-5、实例级权限标识:【资源:操作:实例】,粒度细化到具体某个资源实例
user:update:1,user:delete:1
对用户1可以update,对用户1可以delete

7、shiroFilter的作用
遍历过滤器链,做访问校验
通过ThreadContext在当前线程中绑定一个subject和SecurityManager,供请求内使用。可以通过SecurityUtils.getSubject()获得Subject

8、路径问题
1)? * ** 细节如下
/user/login/page,/user/login/logic:是普通路径
/user/*:代表/user后还有一级任意路径(/user/a,/user/b,/user/xxx)
/user/**:代表/user后还有任意多级任意路径(/user/a,/user/a/b/c,/user/x/xx/xxx)
/user/hello?:代表hello后还有一个任意字符(/user/helloa,/user/hellob,/user/hellox)

2)过滤器匹配
是从上到下匹配,一旦找到可以匹配的则停止,所以,通配范围大的url要往后放
 

Guess you like

Origin blog.csdn.net/csj50/article/details/121751640