`

39.3 Spring Boot Shiro权限管理【从零开始学Spring Boot】

阅读更多

 à悟空学院:https://t.cn/Rg3fKJD

学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

SpringBoot视频:http://t.cn/A6ZagYTi

Spring Cloud视频:http://t.cn/A6ZagxSR

SpringBoot Shiro视频:http://t.cn/A6Zag7IV

SpringBoot交流平台:https://t.cn/R3QDhU0

SpringData和JPA视频:http://t.cn/A6Zad1OH

SpringSecurity5.0视频:http://t.cn/A6ZadMBe

Sharding-JDBC分库分表实战http://t.cn/A6ZarrqS

分布式事务解决方案「手写代码」:http://t.cn/A6ZaBnIr

 

 

在学习此小节之前您可能还需要学习:

 

 

(39.1) Spring Boot Shiro权限管理【从零开始学Spring Boot】

http://412887952-qq-com.iteye.com/blog/2299732

(39.2). Spring Boot Shiro权限管理【从零开始学Spring Boot】

http://412887952-qq-com.iteye.com/blog/2299777

 

 

      相对于上一小节这个就比较简单了。

主要分这么几个步骤:在pom.xml中加入缓存依赖;注入缓存;

(a) pom.xml文件中加入依赖:

<!-- shiro ehcache -->

       <dependency>

           <groupId>org.apache.shiro</groupId>

           <artifactId>shiro-ehcache</artifactId>

           <version>1.2.2</version>

       </dependency>

      

       <!--

           包含支持UI模版(VelocityFreeMarkerJasperReports),

           邮件服务,

           脚本服务(JRuby)

           缓存CacheEHCache),

           任务计划Schedulinguartz)。

        -->

       <dependency>

          <groupId>org.springframework</groupId>

          <artifactId>spring-context-support</artifactId>

        </dependency>

 

(b)注入缓存

com.kfit.config.shiro.ShiroConfiguration中加入如下方法:

/**

     * shiro缓存管理器;

     * 需要注入对应的其它的实体类中:

     * 1、安全管理器:securityManager

     * 可见securityManager是整个shiro的核心;

     * @return

     */

    @Bean

    public EhCacheManager ehCacheManager(){

       System.out.println("ShiroConfiguration.getEhCacheManager()");

       EhCacheManager cacheManager = new EhCacheManager();

       cacheManager.setCacheManagerConfigFile("classpath:config/ehcache-shiro.xml");

       returncacheManager;

    }

 

将缓存对象注入到SecurityManager中:

@Bean

    public SecurityManager securityManager(){

       DefaultWebSecurityManager securityManager =  new DefaultWebSecurityManager();

       //设置realm.

       securityManager.setRealm(myShiroRealm());

      

       //注入缓存管理器;

       securityManager.setCacheManager(ehCacheManager());//这个如果执行多次,也是同样的一个对象;

      

       returnsecurityManager;

    }

 

(c)添加缓存配置文件:

src/main/resouces/config添加ehcache-shiro.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>

<ehcache name="es">

 

    <diskStore path="java.io.tmpdir"/>

   

    <!--

       name:缓存名称。

       maxElementsInMemory:缓存最大数目

       maxElementsOnDisk:硬盘最大缓存个数。 

       eternal:对象是否永久有效,一但设置了,timeout将不起作用。 

       overflowToDisk:是否保存到磁盘,当系统当机时

       timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。

       timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。

       diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false. 

       diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。 

       diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。

       memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。 

        clearOnFlush:内存数量最大时是否清除。

         memoryStoreEvictionPolicy:

            Ehcache的三种清空策略;

            FIFOfirst in first out,这个是大家最熟的,先进先出。

            LFU Less Frequently Used,就是上面例子中使用的策略,直白一点就是讲一直以来最少被使用的。如上面所讲,缓存的元素有一个hit属性,hit值最小的将会被清出缓存。

            LRULeast Recently Used,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。

    -->

     <defaultCache

            maxElementsInMemory="10000"

            eternal="false"

            timeToIdleSeconds="120"

            timeToLiveSeconds="120"

            overflowToDisk="false"

            diskPersistent="false"

            diskExpiryThreadIntervalSeconds="120"

            />

           

           

    <!-- 登录记录缓存锁定10分钟 -->

    <cache name="passwordRetryCache"

           maxEntriesLocalHeap="2000"

           eternal="false"

           timeToIdleSeconds="3600"

           timeToLiveSeconds="0"

           overflowToDisk="false"

           statistics="true">

    </cache>

   

</ehcache>

在配置文件上已经有很详细的解释了,所以这里就过多介绍ehcache的配置了。

运行程序访问:http://127.0.0.1:8080/userInfo/userAdd

查看控制台的打印信息:

权限配置-->MyShiroRealm.doGetAuthorizationInfo()

这个信息就只打印一次了,说明我们的缓存生效了。

  

 

【视频&交流平台】

à悟空学院:https://t.cn/Rg3fKJD

学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

SpringBoot视频:http://t.cn/A6ZagYTi

Spring Cloud视频:http://t.cn/A6ZagxSR

SpringBoot Shiro视频:http://t.cn/A6Zag7IV

SpringBoot交流平台:https://t.cn/R3QDhU0

SpringData和JPA视频:http://t.cn/A6Zad1OH

SpringSecurity5.0视频:http://t.cn/A6ZadMBe

Sharding-JDBC分库分表实战http://t.cn/A6ZarrqS

分布式事务解决方案「手写代码」:http://t.cn/A6ZaBnIr

 

à Spring Boot交流平台

http://412887952-qq-com.iteye.com/blog/2321532

 

 ======================================

Spring Boot Shiro视频实战篇【已更新】

======================================

 

适合人群

有Spring Boot基础的人群。

 

使用技术

(1)spring boot(整合框架)

(2)spring mvc

(3)spring data jpa(持久化操作)

(4)shiro(安全框架)

(5)thymeleaf(模板引擎)

(6)ehcache(缓存管理)

(7)mysql(数据库)

(8)js/css/img(静态资源使用)

9kaptcha(验证码库)

 

课程目录

1. Spring Boot Shiro介绍

 

2. Spring Boot 搭建无Shiro的框架

 

3. Spring Boot Shiro拦截

 

4. Spring Boot Shiro身份认证准备工作

 

5. Spring Boot Shiro身份认证

 

6. Spring Boot Shiro权限控制

 

7. Spring Boot Shiro缓存

 

8. Spring Boot Shiro记住密码

 

9. Spring Boot Shiro登录成功之后下载favicon.ico

 

10. Spring Boot 在thymeleaf使用shiro标签

 

11. Spring Boot Shiro密码加密算法

 

12.Spring Boot Shiro使用JS-CSS-IMG

 

13. Spring Boot Shiro限制登录尝试次数

 

14.Spring Boot Shiro 验证码

分享到:
评论
8 楼 bingyu_liu 2017-02-10  
bingyu_liu 写道
楼主您好,按照您的教程,为shiro添加缓存成功了。但出现一个新问题,如果给Spring boot(1.4.3)添加热部署,项目就会报以下错误:
Caused by: net.sf.ehcache.CacheException: Another CacheManager with same name 'springbootcache' already exists in the same VM. Please provide unique names for each CacheManager in the config or do one of following:
1. Use one of the CacheManager.create() static factory methods to reuse same CacheManager with same name or create one if necessary
2. Shutdown the earlier cacheManager before creating new one with same name.
----------------------------
请问楼主这个该怎样解决?


这个问题解决了!按如下方法:
1、在ShiroConfiguration中添加如下bean,用它来管理EhCacheManager的生命周期
@Bean(name = "lifecycleBeanPostProcessor")
public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
logger.info("ShiroConfiguration--lifecycleBeanPostProcessor");
return new LifecycleBeanPostProcessor();
}
2、在EhCacheManager 上添加如下信息:@DependsOn("lifecycleBeanPostProcessor")

@Bean
@DependsOn("lifecycleBeanPostProcessor")
public EhCacheManager shiroEhcacheManager() {
logger.info("ShiroConfiguration--ehCacheManager");

EhCacheManager shiroEhcacheManager = new EhCacheManager();

shiroEhcacheManager.setCacheManagerConfigFile("classpath:ehcache-shiro.xml");

return shiroEhcacheManager;
}
7 楼 bingyu_liu 2017-02-09  
楼主您好,按照您的教程,为shiro添加缓存成功了。但出现一个新问题,如果给Spring boot(1.4.3)添加热部署,项目就会报以下错误:
Caused by: net.sf.ehcache.CacheException: Another CacheManager with same name 'springbootcache' already exists in the same VM. Please provide unique names for each CacheManager in the config or do one of following:
1. Use one of the CacheManager.create() static factory methods to reuse same CacheManager with same name or create one if necessary
2. Shutdown the earlier cacheManager before creating new one with same name.
----------------------------
请问楼主这个该怎样解决?
6 楼 xd03122049 2016-12-23  
    敢问下楼主,那个10分钟是怎么来的,我遍访资料也不知道这个10分钟是如何得来的?求解惑
5 楼 k88520 2016-11-03  
花了几天时间 跟着博主学习了 shiro的安全管理   虽然最后的权限缓存 还是会重复调用权限信息  但是 收货很大  非常感谢博主~~~~很厉害的博主 感谢前辈无私分享
4 楼 k88520 2016-11-02  
k88520 写道
额。。。试过之后还是会调用权限验证额。。。无法实现缓存  我已经添加了redis了 是不是因为  redis缓存和ehcache缓存会有冲突?啊  按照博主方法部署之后还是不行

如果是整合redis 的缓存呢   博主有什么建议没有?
3 楼 k88520 2016-11-02  
额。。。试过之后还是会调用权限验证额。。。无法实现缓存  我已经添加了redis了 是不是因为  redis缓存和ehcache缓存会有冲突?啊  按照博主方法部署之后还是不行
2 楼 林祥纤 2016-11-01  
k88520 写道
感谢博主无私分享~~~


O(∩_∩)O~~
1 楼 k88520 2016-11-01  
感谢博主无私分享~~~

相关推荐

Global site tag (gtag.js) - Google Analytics