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 People

Contributors

coder-yqj avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

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.