1. 程式人生 > >兩個不同springboot+shiro的專案登入衝突

兩個不同springboot+shiro的專案登入衝突

前幾天遇到一個比較奇怪的問題,建了兩個不同springboot+shiro的專案,一個集成了cas單點登入,另一個是普通的登入。啟動之後在同一瀏覽器中進行登入,後一個登入的會把前一個登入的擠掉,導致只能登入一個。一開始以為是有一個集成了單點登入的原因,把去掉之後,仍然有這個問題。在一個前輩的提醒下,發現可能是因為sessionid相同,然後修改了springboot中sessionManager的相關配置,主要是sessionIdCookie中的name。修改之後兩個專案可以同時登入了,果然是這個原因。

然而在正式的環境中,因為域名的不同,就算不修改sessionId,也不會出現我遇到的這種情況,不過還是改了比較放心。

@Bean(name = "sessionIdGenerator")
public JavaUuidSessionIdGenerator sessionIdGenerator() {
    return new JavaUuidSessionIdGenerator();
}

@Bean(name = "sessionIdCookie")
public SimpleCookie sessionIdCookie() {
    SimpleCookie cookie = new SimpleCookie();
cookie.setName("WEBSID");
cookie.setHttpOnly(true
); cookie.setMaxAge(18000); return cookie; } @Bean(name = "sessionDao") public EnterpriseCacheSessionDAO sessionDao() { EnterpriseCacheSessionDAO sessionDao = new EnterpriseCacheSessionDAO(); sessionDao.setActiveSessionsCacheName("shiro-activeSessionCache"); sessionDao.setSessionIdGenerator(new
JavaUuidSessionIdGenerator()); return sessionDao; } @Bean(name = "sessionManager") public DefaultWebSessionManager sessionManager() { DefaultWebSessionManager sessionManager = new DefaultWebSessionManager(); sessionManager.setGlobalSessionTimeout(1800000); sessionManager.setDeleteInvalidSessions(true); sessionManager.setSessionValidationSchedulerEnabled(true); // sessionManager.setSessionValidationScheduler(new QuartzSessionValidationScheduler()); sessionManager.setSessionDAO(sessionDao()); sessionManager.setSessionIdCookieEnabled(true); sessionManager.setSessionIdCookie(sessionIdCookie()); return sessionManager; } @Bean(name = "lifecycleBeanPostProcessor") public LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() { return new LifecycleBeanPostProcessor(); } @Bean public DefaultAdvisorAutoProxyCreator getDefaultAdvisorAutoProxyCreator() { DefaultAdvisorAutoProxyCreator daap = new DefaultAdvisorAutoProxyCreator(); daap.setProxyTargetClass(true); return daap; } @Bean(name = "securityManager") public DefaultWebSecurityManager getDefaultWebSecurityManager(MyShiroRealm myShiroRealm, DefaultWebSessionManager sessionManager) { DefaultWebSecurityManager dwsm = new DefaultWebSecurityManager(); dwsm.setRealm(myShiroRealm); dwsm.setSessionManager(sessionManager); // 使用者授權/認證資訊Cache, 採用EhCache 快取 // dwsm.setCacheManager(getEhCacheManager()); return dwsm; }