最近改项目bug,用到了shiro权限,当时测试出一个bug,就是关于shiro权限失效的问题,记录一下Bug
如图所示,此时名称为aa:bb:cc的权限做判断,如果登录用户拥有此权限,selectDepartment应为true
否则为false,这时候就有一个问题,登录用户没有拥有权限,但是aa:bb:cc的权限判断为true。
贴上完整的页面权限判断,可以看见有aa:bb:xx和aa:bb:cc两个权限判断
这时候应该知道一个问题,就是shiro的权限判断不是根据字符串的,而是通过集合的包含关系判断的
而且通过debug发现权限的判断走的并不是aa:bb:cc或者aa:bb:xx,而是aa:bb,debug的具体位置在realm类的isPermitted方法,更加证明了权限的判断是根据包含关系来的(忘记说了,项目测试中登录的角色有aa:bb这个权限),总而言之就是坑。
误区来了,公司大佬说的是根据严格的字符串判断的,可能有什么误解吧,因为根据字符串判断的话就不会出现这个问题!
这是遇到一个坑,记录一下,每天一坑!