Coder Social home page Coder Social logo

coder-yqj / springboot-shiro Goto Github PK

View Code? Open in Web Editor NEW
591.0 37.0 337.0 844 KB

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

Shell 2.40% Batchfile 1.70% Java 95.90%
springboot shiro redis thymeleaf datatables

springboot-shiro's Issues

关于session失效的问题?

修改了ShiroConfigurer类中的缓存时间,但发现无法控制登录后的session有效时间。半小时会自动退出登录 请问应该在何处设置?

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

我这这边试了一下是没有问题的。但是发现几个问题:
首先你的项目存在重复依赖:
<dependency> <groupId>org.crazycake</groupId> <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。当然我是开了两个浏览器来测试的,希望能对你有用。。

关于加sale

大佬你好,看了你的博客受益匪浅,在此先谢过,另外问一下,注册的时候密码是通过 pwd+sale 然后再md5加密的,然后看了你的代码发现PasswordHelper 加密的方法没有用到salt,用的是new SimpleHash();看了下源码构造函数,SimpleHash(String algorithmName, Object source, Object salt, int hashIterations) 如果我要是加salt的话是不是直接再构造里面传入salt就好了呢?一直找到源码深处 hash方法 protected byte[] hash(byte[] bytes, byte[] salt, int hashIterations) 没太看明白。。。。。

关键问题是 doGetAuthenticationInfo 方法中new SimpleAuthenticationInfo()传入的参数中并不知道这个salt从哪里加进去呀,希望大佬留个qq 请教,大榭

nullException

你用的编译器是idea嘛,idea好像在动态权限管理查询哪里,会报空指针异常吧。注入不进去

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.