zoukankan      html  css  js  c++  java
  • shiro整合ehcache

    目标:让Shiro整合ehcache,提供缓存realm数据的功能。

    1.引入encache配置文件,配置缓存

     1 <!-- <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
     2  --><ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
     3 
     4     <!-- 磁盘上的缓存的临时目录 ,默认是系统的临时目录,也可以手动指定一个目录-->
     5     <diskStore path="java.io.tmpdir"/>
     6     <!-- 默认的缓存区域的默认策略 -->
     7     <!--
     8     maxElementsInMemory:内存中元素最大存放的个数
     9     eternal:缓存的对象是否永生不死。一般都是false。
    10     timeToIdleSeconds:发呆的时间,多长时间不用,就干掉,秒
    11     timeToLiveSeconds:存活的时间,活够了就干掉,秒
    12     maxElementsOnDisk:硬盘上最大存放的元素的个数,如果内存10000个满了,就往硬盘上存。
    13     memoryStoreEvictionPolicy:内存中存储和销毁元素的策略:默认使用LRU,解决的是缓存元素满了怎么办。
    14       策略有三个:LRU、LFU、FIFO
    15     LRU:最少使用被清理,次数
    16     LFU:时间,闲置最长的时间
    17     FIFO:管道策略,先进先出
    18      -->
    19     <defaultCache
    20             maxElementsInMemory="10000"
    21             eternal="false"
    22             timeToIdleSeconds="120"
    23             timeToLiveSeconds="120"
    24             maxElementsOnDisk="10000000"
    25             diskExpiryThreadIntervalSeconds="120"
    26             memoryStoreEvictionPolicy="LRU">
    27         <persistence strategy="localTempSwap"/>
    28     </defaultCache>
    29     <!-- Spring整合的菜单缓存 -->
    30     <cache name="bos_menu_cache"
    31            maxElementsInMemory="10000"
    32            eternal="false"
    33            timeToIdleSeconds="120"
    34            timeToLiveSeconds="120"
    35            maxElementsOnDisk="10000000"
    36            diskExpiryThreadIntervalSeconds="120"
    37            memoryStoreEvictionPolicy="LRU">
    38         <persistence strategy="localTempSwap"/>
    39     </cache>
    40     <!-- Shiro权限缓存-认证 -->
    41     <cache name="bos_realm_authentication_cache"
    42            maxElementsInMemory="10000"
    43            eternal="false"
    44            timeToIdleSeconds="120"
    45            timeToLiveSeconds="120"
    46            maxElementsOnDisk="10000000"
    47            diskExpiryThreadIntervalSeconds="120"
    48            memoryStoreEvictionPolicy="LRU">
    49         <persistence strategy="localTempSwap"/>
    50     </cache>
    51     <!-- Shiro权限缓存-授权 -->
    52     <cache name="bos_realm_authorization_cache"
    53            maxElementsInMemory="10000"
    54            eternal="false"
    55            timeToIdleSeconds="120"
    56            timeToLiveSeconds="120"
    57            maxElementsOnDisk="10000000"
    58            diskExpiryThreadIntervalSeconds="120"
    59            memoryStoreEvictionPolicy="LRU">
    60         <persistence strategy="localTempSwap"/>
    61     </cache>
    62 </ehcache>
    View Code

    2.引入坐标(其他坐标这里略)

    1 <!-- shiro整合ehcache -->
    2         <dependency>
    3             <groupId>org.apache.shiro</groupId>
    4             <artifactId>shiro-ehcache</artifactId>
    5             <version>1.3.2</version>
    6         </dependency>
    View Code

    3.在Spring中配置shiro缓存

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     4     xsi:schemaLocation="
     5         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
     6             
     7     <!-- 配置Shiro核心Filter,bean的id必须和过滤器的名字一样  --> 
     8     <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
     9         <!-- 安全管理器 -->
    10         <property name="securityManager" ref="securityManager" />
    11         <!-- 未认证,跳转到哪个页面 ,如果认证失败,跳转的默认页面 -->
    12         <property name="loginUrl" value="/login.html" />
    13         <!-- 登录页面页面,如果认证成功,则默认跳转的页面 -->
    14         <property name="successUrl" value="/index.html" />
    15         <!-- 如果没有授权,则默认跳转到该页面 -->
    16         <property name="unauthorizedUrl" value="/unauthorized.html" />
    17         <!-- shiro URL控制过滤器规则:配置的小过滤器链(过滤器栈):执行从上倒下有顺序  -->
    18         <property name="filterChainDefinitions">
    19             <value>
    20                 /login.html* = anon
    21                 /user_login.action* = anon 
    22                 /validatecode.jsp* = anon
    23                 /css/** = anon
    24                 /js/** = anon
    25                 /images/** = anon
    26                 /services/** = anon 
    27                 /pages/base/courier.html* = perms[courier:list]
    28                 /pages/base/area.html* = roles[base]
    29                 /** = authc
    30             </value>
    31         </property>
    32     </bean>
    33     
    34         <!-- 安全管理器  -->
    35     <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
    36         <property name="realm" ref="bosRealm"></property>
    37         <!-- 开启Shiro缓存功能,需要在shiro安全管理器中注入shiro的 平台缓存管理器 -->
    38         <property name="cacheManager" ref="shiroCacheManager" />
    39     </bean>
    40     
    41     <!-- 配置Shiro的bean后处理器:用来初始化Shiro的bean在spring中-->
    42     <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
    43     <!-- 开启Shiro注解 -->
    44     <!-- Enable Shiro Annotations for Spring-configured beans.
    45     Only run after -->
    46     <!-- the lifecycleBeanProcessor has run:
    47     depends-on:当前bean初始化时,必须依赖于指定的bean,(指定的
    48     bean必须先初始化)
    49     下面的两个bean配置:传统的aop编程:增强、切点、切面
    50     -->
    51     <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
    52     depends-on="lifecycleBeanPostProcessor"/>
    53     
    54     <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
    55         <!-- 必须注入安全管理器 -->
    56         <property name="securityManager" ref="securityManager" />
    57     </bean>
    58     
    59     <!-- shiro整合echcache的缓存配置 -->
    60     <!-- 配置Shiro的平台缓存管理 -->
    61     <bean id="shiroCacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
    62         <!-- 注入ehcache的对象 -->
    63         <property name="cacheManager" ref="ehCacheManager" />
    64     </bean>
    65     
    66 </beans>
    View Code

    4.在reaml对象中指定缓存权限的数据的区域

     1 @Component("bosRealm")
     2 public class BosRealm extends AuthorizingRealm{
     3     
     4     //只需要向父类注入缓存区域即可
     5     //认证缓存区域
     6     @Value("bos_realm_authentication_cache")
     7     //方法上注入按照参数注入,和方法名无关
     8     public void setSuperAuthenticationCacheName(String authenticationCacheName){
     9         super.setAuthenticationCacheName(authenticationCacheName);
    10     }
    11     //授权缓存区域
    12     @Value("bos_realm_authorization_cache")
    13     public void setSuperAuthorizationCacheName(String authorizationCacheName){
    14         super.setAuthorizationCacheName(authorizationCacheName);
    15     }
    View Code
    今天要比昨天好
  • 相关阅读:
    HashMap和HashTable有什么不同?
    JAVA基础查漏补缺(面向面试场景)
    JAVA--GC 垃圾回收机制----可达性分析算法
    如何优雅的设计 Java 异常
    Java多线程之捕获子线程中的异常---面试经
    Review: the foundation of the transaction、Transaction characteristics in Spring
    用Demo 去理解Java Object 的 wait() 和 notify() 方法
    决心彻底认知 Integer 和 int 对象创建的原理
    java 基础复习 -用Demo去认识String 类
    java 基础复习 -用Demo去认识数组
  • 原文地址:https://www.cnblogs.com/lichangyun/p/8425362.html
Copyright © 2011-2022 走看看