mysql 实现session共享_shiro分布式之mysql存储session以实现session共享--springboot项目...

packagecom.inslink.roboqa.shiro;importorg.apache.shiro.mgt.SecurityManager;importorg.apache.shiro.spring.LifecycleBeanPostProcessor;importorg.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;importorg.apache.shiro.spring.web.ShiroFilterFactoryBean;importorg.apache.shiro.web.mgt.CookieRememberMeManager;importorg.apache.shiro.web.mgt.DefaultWebSecurityManager;importorg.apache.shiro.web.servlet.ShiroHttpSession;importorg.apache.shiro.web.servlet.SimpleCookie;importorg.apache.shiro.web.session.mgt.DefaultWebSessionManager;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;importorg.springframework.beans.factory.annotation.Qualifier;importorg.springframework.boot.web.servlet.FilterRegistrationBean;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.web.filter.DelegatingFilterProxy;importcom.alibaba.fastjson.JSON;importjavax.servlet.DispatcherType;importjava.util.LinkedHashMap;

@Configurationpublic classShiroConfiguration {private static final Logger logger = LoggerFactory.getLogger(ShiroConfiguration.class);

@BeanpublicMysqlSessionDao mysqlSessionDao(){return newMysqlSessionDao();

}

@BeanpublicMysqlCacheManager mysqlCacheManager(){return newMysqlCacheManager();

}

@BeanpublicFilterRegistrationBean filterRegistrationBean() {

FilterRegistrationBean filterRegistration= newFilterRegistrationBean();

filterRegistration.setFilter(new DelegatingFilterProxy("shiroFilter"));

filterRegistration.setEnabled(true);

filterRegistration.addUrlPatterns("/*");

filterRegistration.setDispatcherTypes(DispatcherType.REQUEST);returnfilterRegistration;

}

@Bean(name= "shiroFilter")public ShiroFilterFactoryBean shiroFilter(@Qualifier("securityManager") SecurityManager manager) {

ShiroFilterFactoryBean bean= newShiroFilterFactoryBean();

bean.setSecurityManager(manager);//配置登录的url和登录成功的url

bean.setLoginUrl("/login");//登录成功后要跳转的链接

bean.setSuccessUrl("/index");//未授权界面;

bean.setUnauthorizedUrl("/403");//配置访问权限//Mapfilters = new HashMap();//filters.put("perms", urlPermissionsFilter());//filters.put("anon", new AnonymousFilter());//bean.setFilters(filters);

LinkedHashMap filterChainDefinitionMap = new LinkedHashMap<>();//filterChainDefinitionMap.put("/static/**", "anon");//表示可以匿名访问//filterChainDefinitionMap.put("/loginUser", "anon");//filterChainDefinitionMap.put("/login","anon");//filterChainDefinitionMap.put("/loginIndex","authc");//filterChainDefinitionMap.put("/static/index.html","authc");//filterChainDefinitionMap.put("/**", "authc,perms");//表示需要认证才可以访问//filterChainDefinitionMap.put("/*.*", "authc");//filterChainDefinitionMap.put("/static/error.html*","anon");//filterChainDefinitionMap.put("/*", "authc,perms");//表示需要认证才可以访问

filterChainDefinitionMap.put("/*", "anon");

filterChainDefinitionMap.put("/**", "anon");

filterChainDefinitionMap.put("/*.*", "anon");

bean.setFilterChainDefinitionMap(filterChainDefinitionMap);returnbean;

}

@BeanpublicURLPermissionsFilter urlPermissionsFilter() {return newURLPermissionsFilter();

}//设置客户信息cookie管理器

@Bean(name = "rememberMeManager")publicCookieRememberMeManager rememberMeManager() {

CookieRememberMeManager rememberMeManager= newCookieRememberMeManager();

SimpleCookie cookie= newSimpleCookie(CookieRememberMeManager.DEFAULT_REMEMBER_ME_COOKIE_NAME);

cookie.setHttpOnly(true);

cookie.setMaxAge(24*60*60*7);returnrememberMeManager;

}//配置核心安全事务管理器

@Bean(name = "securityManager")public SecurityManager securityManager(@Qualifier("authRealm") AuthRealm authRealm, @Qualifier("sessionManager") DefaultWebSessionManager sessionManager, @Qualifier("rememberMeManager") CookieRememberMeManager rememberMeManager) {

System.err.println("--------------shiro已经加载----------------");

DefaultWebSecurityManager manager= newDefaultWebSecurityManager();

manager.setRealm(authRealm);

manager.setRememberMeManager(rememberMeManager);

manager.setSessionManager(sessionManager);//manager.setCacheManager(mysqlCacheManager());

returnmanager;

}//设置session管理器

@Bean(name = "sessionManager")publicDefaultWebSessionManager sessionManager() {

DefaultWebSessionManager sessionManager= newDefaultWebSessionManager();

SimpleCookie cookie= newSimpleCookie(ShiroHttpSession.DEFAULT_SESSION_ID_NAME);

cookie.setHttpOnly(true);

cookie.setMaxAge(24*60*60);

sessionManager.setSessionIdCookie(cookie);

sessionManager.setDeleteInvalidSessions(true);//设置是否删除无效session//sessionManager.setGlobalSessionTimeout(mysqlSessionDao().getExpireTime());//设置全局session超时时长//mysqlSessionDao().setCacheManager(mysqlCacheManager());

sessionManager.setSessionDAO(mysqlSessionDao());//设置自定义session操作//sessionManager.setSessionValidationSchedulerEnabled(true);//设置是否定期检查session

returnsessionManager;

}//重写报错

@Bean(name = "exceptionResolver")publicMyExceptionResolver myExceptionResolver() {return newMyExceptionResolver();

}//配置自定义的权限登录器

@Bean(name = "authRealm")public AuthRealm authRealm(@Qualifier("credentialsMatcher") CredentialsMatcher matcher) {

AuthRealm authRealm= newAuthRealm();

authRealm.setCredentialsMatcher(matcher);returnauthRealm;

}//配置自定义的密码比较器

@Bean(name = "credentialsMatcher")publicCredentialsMatcher credentialsMatcher() {return newCredentialsMatcher();

}

@BeanpublicLifecycleBeanPostProcessor lifecycleBeanPostProcessor() {return newLifecycleBeanPostProcessor();

}

@BeanpublicDefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {

DefaultAdvisorAutoProxyCreator creator= newDefaultAdvisorAutoProxyCreator();

creator.setProxyTargetClass(true);returncreator;

}

@Beanpublic AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(@Qualifier("securityManager") SecurityManager manager) {

AuthorizationAttributeSourceAdvisor advisor= newAuthorizationAttributeSourceAdvisor();

advisor.setSecurityManager(manager);returnadvisor;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值