coder-yqj / springboot-shiro

使用SpringBoot与shiro实现基于数据库的细粒度动态权限管理系统实例
593 stars 336 forks source link

关于你博文中提及的授权数据清空redis缓存无效的问题 #3

Closed gongxufan closed 6 years ago

gongxufan commented 6 years ago

我这这边试了一下是没有问题的。但是发现几个问题: 首先你的项目存在重复依赖: `

org.crazycake
        <artifactId>shiro-redis</artifactId>
        <version>2.4.2.1-RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>`

shiro-core又有两个版本,应为spring-shiro也有该依赖。而且clearCachedAuthorizationInfo是protected的,所以直接调用是无法编译的。 应当把清除redis缓存的方法移到MyShiroRealm,然后将这个实例注入到Service更新权限的时候调用清除缓存。改下这两个地方我这边该更权限就能及时生效了。

在redis里直接可以观测到key的变化: 更改了权限,不操作界面: 127.0.0.1:6379> keys ** 1) "\xac\xed\x00\x05sr\x002org.apache.shiro.subject.SimplePrincipalCollection\xa8\x7fX%\xc6\xa3\bJ\x03\x00\x01L\x00\x0frealmPrincipalst\x00\x0fLjava/util/Map;xpsr\x00\x17java.util.LinkedHashMap4\xc0N\\\x10l\xc0\xfb\x02\x00\x01Z\x00\x0baccessOrderxr\x00\x11java.util.HashMap\x05\a\xda\xc1\xc3\x16\xd1\x03\x00\x02F\x00\nloadFactorI\x00\tthresholdxp?@\x00\x00\x00\x00\x00\x0cw\b\x00\x00\x00\x10\x00\x00\x00\x01t\x00&gxf.dev.biz.admin.shiro.MyShiroRealm_0sr\x00\x17java.util.LinkedHashSet\xd8l\xd7Z\x95\xdd*\x1e\x02\x00\x00xr\x00\x11java.util.HashSet\xbaD\x85\x95\x96\xb8\xb74\x03\x00\x00xpw\x0c\x00\x00\x00\x02?@\x00\x00\x00\x00\x00\x01sr\x00\x1cgxf.dev.biz.admin.model.User\x86\xc1M\xfe\xd0\x041\xba\x02\x00\x04L\x00\x06enablet\x00\x13Ljava/lang/Integer;L\x00\x02idq\x00~\x00\x0bL\x00\bpasswordt\x00\x12Ljava/lang/String;L\x00\busernameq\x00~\x00\x0cxpsr\x00\x11java.lang.Integer\x12\xe2\xa0\xa4\xf7\x81\x878\x02\x00\x01I\x00\x05valuexr\x00\x10java.lang.Number\x86\xac\x95\x1d\x0b\x94\xe0\x8b\x02\x00\x00xp\x00\x00\x00\x01q\x00~\x00\x10t\x00 3ef7164d1f6167cb9f2658c07d3c2f0at\x00\x05adminxx\x00w\x01\x01q\x00~\x00\x05x" 2) "shiro_redis_session:141ed009-00b7-4976-8527-f004e6e4790a" 3) "shiro_redis_session:69482d6c-88a7-4db0-9a01-ae88d378d935"`

重新访问菜单: 127.0.0.1:6379> keys ** 1) "\xac\xed\x00\x05sr\x002org.apache.shiro.subject.SimplePrincipalCollection\xa8\x7fX%\xc6\xa3\bJ\x03\x00\x01L\x00\x0frealmPrincipalst\x00\x0fLjava/util/Map;xpsr\x00\x17java.util.LinkedHashMap4\xc0N\\\x10l\xc0\xfb\x02\x00\x01Z\x00\x0baccessOrderxr\x00\x11java.util.HashMap\x05\a\xda\xc1\xc3\x16\xd1\x03\x00\x02F\x00\nloadFactorI\x00\tthresholdxp?@\x00\x00\x00\x00\x00\x0cw\b\x00\x00\x00\x10\x00\x00\x00\x01t\x00&gxf.dev.biz.admin.shiro.MyShiroRealm_0sr\x00\x17java.util.LinkedHashSet\xd8l\xd7Z\x95\xdd\x1e\x02\x00\x00xr\x00\x11java.util.HashSet\xbaD\x85\x95\x96\xb8\xb74\x03\x00\x00xpw\x0c\x00\x00\x00\x02?@\x00\x00\x00\x00\x00\x01sr\x00\x1cgxf.dev.biz.admin.model.User\x86\xc1M\xfe\xd0\x041\xba\x02\x00\x04L\x00\x06enablet\x00\x13Ljava/lang/Integer;L\x00\x02idq\x00~\x00\x0bL\x00\bpasswordt\x00\x12Ljava/lang/String;L\x00\busernameq\x00~\x00\x0cxpsr\x00\x11java.lang.Integer\x12\xe2\xa0\xa4\xf7\x81\x878\x02\x00\x01I\x00\x05valuexr\x00\x10java.lang.Number\x86\xac\x95\x1d\x0b\x94\xe0\x8b\x02\x00\x00xp\x00\x00\x00\x01sq\x00~\x00\x0e\x00\x00\x00\x02t\x00 90e66e36e3135a91d298177d4389851et\x00\x05user1xx\x00w\x01\x01q\x00~\x00\x05x" 2) "\xac\xed\x00\x05sr\x002org.apache.shiro.subject.SimplePrincipalCollection\xa8\x7fX%\xc6\xa3\bJ\x03\x00\x01L\x00\x0frealmPrincipalst\x00\x0fLjava/util/Map;xpsr\x00\x17java.util.LinkedHashMap4\xc0N\\x10l\xc0\xfb\x02\x00\x01Z\x00\x0baccessOrderxr\x00\x11java.util.HashMap\x05\a\xda\xc1\xc3\x16`\xd1\x03\x00\x02F\x00\nloadFactorI\x00\tthresholdxp?@\x00\x00\x00\x00\x00\x0cw\b\x00\x00\x00\x10\x00\x00\x00\x01t\x00&gxf.dev.biz.admin.shiro.MyShiroRealm_0sr\x00\x17java.util.LinkedHashSet\xd8l\xd7Z\x95\xdd\x1e\x02\x00\x00xr\x00\x11java.util.HashSet\xbaD\x85\x95\x96\xb8\xb74\x03\x00\x00xpw\x0c\x00\x00\x00\x02?@\x00\x00\x00\x00\x00\x01sr\x00\x1cgxf.dev.biz.admin.model.User\x86\xc1M\xfe\xd0\x041\xba\x02\x00\x04L\x00\x06enablet\x00\x13Ljava/lang/Integer;L\x00\x02idq\x00~\x00\x0bL\x00\bpasswordt\x00\x12Ljava/lang/String;L\x00\busernameq\x00~\x00\x0cxpsr\x00\x11java.lang.Integer\x12\xe2\xa0\xa4\xf7\x81\x878\x02\x00\x01I\x00\x05valuexr\x00\x10java.lang.Number\x86\xac\x95\x1d\x0b\x94\xe0\x8b\x02\x00\x00xp\x00\x00\x00\x01q\x00~\x00\x10t\x00 3ef7164d1f6167cb9f2658c07d3c2f0at\x00\x05adminxx\x00w\x01\x01q\x00~\x00\x05x" 3) "shiro_redis_session:141ed009-00b7-4976-8527-f004e6e4790a" 4) "shiro_redis_session:69482d6c-88a7-4db0-9a01-ae88d378d935" ` 很明显,后面加入新的key。当然我是开了两个浏览器来测试的,希望能对你有用。。

zhangjinmiao commented 6 years ago

@gongxufan 可以把你修改后的代码共享下吗

gongxufan commented 6 years ago

@JavaerZJM 明天我提交一份

changkongdian commented 6 years ago

您好能分享下代码么?

gongxufan commented 6 years ago

@changkongdian

https://github.com/gongxufan/biz-admin 这里已经整理好了相关依赖,而且加入了ajax场景下的登录和权限认证返回的场景。

changkongdian commented 6 years ago

非常感谢您的分享!