A_88_spring-shiro 相关
2021-04-15 22:59:00 0 举报
AI智能生成
全面、高效的知识图谱:A_88_spring-shiro 相关!! 全面又深度的提升认知,达到实际应用的目的! 建议先纵观全局,掌握好大方向。 再根据自己的需要,针对性的学习某一个点,最后做到逐步由点及面。
作者其他创作
大纲/内容
转发
loginUrl value="/login.html"
successUrl value="/index.html"
shiro不跳转successUrl的问题 - - ITeye技术网站
unauthorizedUrl value="/"
权限控制方法
jsp标签(jstl)
<shiro:hasPermission name="printer:print">
我有打印机的打印权限
</shiro:hasPermission>
更多标签
<shiro:guest/>,<shiro:hasRole/>
注解
@RequiresPermissions({"printer:print"})
shiro添加注解@RequiresPermissions不起作用
@RequiresRoles(“administrator”)
编码方式授权
subject.hasRole("role1")
subject.isPermitted("printer:print")
?权限过滤器配置
/? = authc,roles[admin] 角色权限控制
权限结构
Permissions(许可)
定义:Permissions关联的功能,为事先分配,不支持线上调节(一对一)
权限控制方式(硬编码)
controller方法 @RequiresPermissions({"printer:print"})
subject.isPermitted("printer:print")
UserRealm-doGetAuthorizationInfo
info.setStringPermissions(permsSet)
虽不能线上调整,但规则上Permissions与功能权限关系是一对一,所以也没有调整的必要
用户与Permissions的关系,可以线上调整
角色
定义:角色关联的功能,为事先分配,不支持线上调节(一对多)
权限控制方式(硬编码)
controller方法 @RequiresRoles(“administrator”)
过滤器配置 /? = authc,roles[admin] 角色权限控制
UserRealm-doGetAuthorizationInfo
info.setRoles(permsSet);
用户与角色的关系,可以线上调整
风险
如有动态调整某个角色对应功能列表,在shiro的角色设定下,将不能支持
自定义(Permissions组)
定义:Permissions组关联的功能,线上配置
权限控制方式(硬编码)
controller方法 @RequiresPermissions({"printer:print"})
subject.isPermitted("printer:print")
UserRealm-doGetAuthorizationInfo
将Permissions组对应权限,拆解出来
实际的权限比较还是通过Permissions
info.setStringPermissions(permsSet)
用户与Permissions组的关系,可以线上调整
优点
Permissions组与功能的关系,也可以线上调整
解决了角色与功能关系的线上更新问题,通过权限组代替
如果权限控制需求相对简单,可以只使用Permissions控制方式
参考
第六章 Realm及相关对象——《跟我学Shiro》 ITeye技术网站
Shiro学习笔记(3)——授权(Authorization) - 君君的专栏 - CSDN.NET
Shiro学习笔记(2)——身份验证之Realm - 君君的专栏 - 博客频道 - CSDN.NET
前后端分离,常见问题
Angular中在前后端分离模式下实现权限控制 - 基于RBAC - 顽Shi的Blog
java - 前后端分离中后端提供的RESTFUL接口如何进行权限控制? - SegmentFault
Shiro Ajax请求权限不满足,拦截后解决方案
前后端分离了,然后呢? - Web前端 - ITeye资讯
javascript - 前后端分离的项目,如何解决登录问题? - SegmentFault
兄弟们,项目前后台分离怎么弄啊?
原来的form提交换成ajax而已, 本地cookie同样生效.
前后端分离架构中的接口设计 - 石竹的专栏 - 博客频道 - CSDN.NET
前后端分离cookie,session就没用了
shiro session 超时时间设置无效, 排查过程
<property name="globalSessionTimeout" value="120000"/>
Shiro 设置session超时时间
SecurityUtils.getSubject().getSession().setTimeout(30000);
正确的设置永不超时的方式
SecurityUtils.getSubject().getSession().setTimeout(-1000l);
扩展
spring-shiro-cas.xml 单点登录
一个账号,不同平台 统一认证 √
一个账号只能一个地方登录 ×
前后端分离项目,权限控制方法
UI组件的依据权限进行显隐(菜单/按钮)
Angular运行之前获取到permission的映射关系
angular.module('myApp') .factory('permissions', function ($rootScope)
permissions.setPermissions(permissionList)
标签指令 directive
<div has-permission='Edit'>
<a href="/#/courses/{{ id }}/edit"> {{ name }}</a>
</div>
试想
登录时获取用户权限,存储rootScope(单字符串存储),localstorage
控制ui显隐时用ng-if比较权限是否包含
避免权限名重复,权限名称设计含"模块-页面-按钮"组合
路由上的依权限访问
$routeChangeStart 监听
不打算控制(存在风险)-如后台控制严格风险近0
HTTP请求处理
$httpProvider.responseInterceptors 过滤器
不打算控制(存在风险)-如后台控制严格风险近0
服务端
@RequiresPermissions({"printer:print"}) [shiro控制,依赖session]
客户端应用,有不掉线特性
session不超时
服务器内存受限
重启服务导致session丢失风险
存入redis,可缓解
session超时
存redis,可提高性能
存数据库,可靠,但每次取库性能下降
自动登录,方便在登录接口中统计活性
token
无法使用shiro权限框架,或自编写过滤器
前后端分离,shiro拦截错误处理
场景
权限不具备
Shiro Ajax请求权限不满足,拦截后解决方案
session超时
处理
捕获异常,转换为json返回前端(默认是响应异常或重定向错误页)
ajax请求后端差异
ajax jQuery
会自动使用cookie
ajax fetch
会自动忽略cookie
问题:无cookie(即无sessionid),后端shiro依据sessionid作为权限控制基础.如此,请求会当做未登陆情况处理,跳转到登陆页
ajax fetch + cookie
主动使用cookie
{credentials: 'include'}
shiro哪里好?
便捷的权限控制方式
jsp标签(jstl) <shiro:hasPermission
注解 @RequiresPermissions({"printer:print"})
编码方式授权 subject.isPermitted("printer:print")
?权限过滤器配置 authc,roles[admin] 角色权限控制
完善的权限控制
如系统的权限需求简单,此可以忽略(因用不到)
可以自编filter实现的能力(即可不使用shiro)
简易的登录控制
菜单级的权限控制(如果使用了shiro就不需要自编了)
0 条评论
下一页