Commit 3e6d7e6d by fsn

shiro集成ehcache

parent 2f5298bc
package com.stylefeng.guns.config.web; package com.stylefeng.guns.config.web;
import com.stylefeng.guns.core.shiro.ShiroDbRealm; import com.stylefeng.guns.core.shiro.ShiroDbRealm;
import org.apache.shiro.cache.CacheManager;
import org.apache.shiro.cache.ehcache.EhCacheManager;
import org.apache.shiro.codec.Base64; import org.apache.shiro.codec.Base64;
import org.apache.shiro.spring.LifecycleBeanPostProcessor; import org.apache.shiro.spring.LifecycleBeanPostProcessor;
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
...@@ -10,6 +12,7 @@ import org.apache.shiro.web.mgt.DefaultWebSecurityManager; ...@@ -10,6 +12,7 @@ import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.apache.shiro.web.servlet.SimpleCookie; import org.apache.shiro.web.servlet.SimpleCookie;
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
import org.springframework.beans.factory.config.MethodInvokingFactoryBean; import org.springframework.beans.factory.config.MethodInvokingFactoryBean;
import org.springframework.cache.ehcache.EhCacheManagerFactoryBean;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn; import org.springframework.context.annotation.DependsOn;
...@@ -28,25 +31,28 @@ public class ShiroConfig { ...@@ -28,25 +31,28 @@ public class ShiroConfig {
/** /**
* 安全管理器 * 安全管理器
*
* @author fengshuonan
*/ */
@Bean @Bean
public DefaultWebSecurityManager securityManager(CookieRememberMeManager rememberMeManager) { public DefaultWebSecurityManager securityManager(CookieRememberMeManager rememberMeManager, CacheManager cacheShiroManager) {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
//设置自定义Realm
securityManager.setRealm(this.shiroDbRealm()); securityManager.setRealm(this.shiroDbRealm());
securityManager.setCacheManager(cacheShiroManager);
//记住密码管理
securityManager.setRememberMeManager(rememberMeManager); securityManager.setRememberMeManager(rememberMeManager);
return securityManager; return securityManager;
} }
/** /**
* 缓存管理器 使用Ehcache实现
*/
@Bean
public CacheManager getCacheShiroManager(EhCacheManagerFactoryBean ehcache) {
EhCacheManager ehCacheManager = new EhCacheManager();
ehCacheManager.setCacheManager(ehcache.getObject());
return ehCacheManager;
}
/**
* 项目自定义的Realm * 项目自定义的Realm
*
* @author fengshuonan
*/ */
@Bean @Bean
public ShiroDbRealm shiroDbRealm() { public ShiroDbRealm shiroDbRealm() {
...@@ -55,8 +61,6 @@ public class ShiroConfig { ...@@ -55,8 +61,6 @@ public class ShiroConfig {
/** /**
* rememberMe管理器, cipherKey生成见{@code Base64Test.java} * rememberMe管理器, cipherKey生成见{@code Base64Test.java}
*
* @author fengshuonan
*/ */
@Bean @Bean
public CookieRememberMeManager rememberMeManager(SimpleCookie rememberMeCookie) { public CookieRememberMeManager rememberMeManager(SimpleCookie rememberMeCookie) {
...@@ -68,8 +72,6 @@ public class ShiroConfig { ...@@ -68,8 +72,6 @@ public class ShiroConfig {
/** /**
* 记住密码Cookie * 记住密码Cookie
*
* @author fengshuonan
*/ */
@Bean @Bean
public SimpleCookie rememberMeCookie() { public SimpleCookie rememberMeCookie() {
...@@ -81,25 +83,23 @@ public class ShiroConfig { ...@@ -81,25 +83,23 @@ public class ShiroConfig {
/** /**
* Shiro的过滤器链 * Shiro的过滤器链
*
* @author fengshuonan
*/ */
@Bean @Bean
public ShiroFilterFactoryBean shiroFilter(DefaultWebSecurityManager securityManager) { public ShiroFilterFactoryBean shiroFilter(DefaultWebSecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean(); ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
//安全管理器
shiroFilter.setSecurityManager(securityManager); shiroFilter.setSecurityManager(securityManager);
/**
//默认的登陆访问url * 默认的登陆访问url
*/
shiroFilter.setLoginUrl("/login"); shiroFilter.setLoginUrl("/login");
/**
//登陆成功后跳转的url * 登陆成功后跳转的url
*/
shiroFilter.setSuccessUrl("/"); shiroFilter.setSuccessUrl("/");
/**
//没有权限跳转的url * 没有权限跳转的url
*/
shiroFilter.setUnauthorizedUrl("/global/error"); shiroFilter.setUnauthorizedUrl("/global/error");
/** /**
* 配置shiro拦截器链 * 配置shiro拦截器链
* *
...@@ -108,20 +108,17 @@ public class ShiroConfig { ...@@ -108,20 +108,17 @@ public class ShiroConfig {
* user 验证通过或RememberMe登录的都可以 * user 验证通过或RememberMe登录的都可以
* *
*/ */
Map<String, String> hashMap = new HashMap<String, String>(); Map<String, String> hashMap = new HashMap<>();
hashMap.put("/static/**", "anon"); hashMap.put("/static/**", "anon");
hashMap.put("/login", "anon"); hashMap.put("/login", "anon");
hashMap.put("/kaptcha", "anon"); hashMap.put("/kaptcha", "anon");
hashMap.put("/**", "user"); hashMap.put("/**", "user");
shiroFilter.setFilterChainDefinitionMap(hashMap); shiroFilter.setFilterChainDefinitionMap(hashMap);
return shiroFilter; return shiroFilter;
} }
/** /**
* 在方法中 注入 securityManager,进行代理控制 * 在方法中 注入 securityManager,进行代理控制
*
* @author fengshuonan
*/ */
@Bean @Bean
public MethodInvokingFactoryBean methodInvokingFactoryBean(DefaultWebSecurityManager securityManager) { public MethodInvokingFactoryBean methodInvokingFactoryBean(DefaultWebSecurityManager securityManager) {
...@@ -133,19 +130,14 @@ public class ShiroConfig { ...@@ -133,19 +130,14 @@ public class ShiroConfig {
/** /**
* 保证实现了Shiro内部lifecycle函数的bean执行 * 保证实现了Shiro内部lifecycle函数的bean执行
*
* @author fengshuonan
*/ */
@Bean @Bean
public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() { public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
return new LifecycleBeanPostProcessor(); return new LifecycleBeanPostProcessor();
} }
/** /**
* 启用shrio授权注解拦截方式,AOP式方法级权限检查 * 启用shrio授权注解拦截方式,AOP式方法级权限检查
*
* @author fengshuonan
*/ */
@Bean @Bean
@DependsOn(value = "lifecycleBeanPostProcessor") //依赖其他bean的初始化 @DependsOn(value = "lifecycleBeanPostProcessor") //依赖其他bean的初始化
......
...@@ -6,6 +6,16 @@ ...@@ -6,6 +6,16 @@
<diskStore path="java.io.tmpdir/ehcache"/> <diskStore path="java.io.tmpdir/ehcache"/>
<defaultCache
maxElementsInMemory="50000"
eternal="false"
timeToIdleSeconds="3600"
timeToLiveSeconds="3600"
overflowToDisk="true"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
/>
<!-- 全局变量:永不过期--> <!-- 全局变量:永不过期-->
<cache name="CONSTANT" <cache name="CONSTANT"
maxElementsInMemory="50000" maxElementsInMemory="50000"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment