springboot+shiro 一个项目部署多个,session名冲突问题
问题
前几天遇到一个比较奇怪的问题, 一个项目部署多个,端口不同。启动之后在同一浏览器中进行登录,后一个登录的会把前一个登录的挤掉,导致只能登录一个。
原因
是因为sessionid相同,然后修改了springboot中sessionManager的相关配置,主要是sessionIdCookie中的name。修改之后两个项目可以同时登录了。
解决方案
1,
修改每个springboot WEB工程的 application.properties 文件中的 server.session.cookie.name 属性(如没有该属性,则新建)
使该服务器内部署的所有WEB工程的 server.session.cookie.name 各不相同即可,springboot2.0配置可能不同(这个方法在网上找的,并没有解决我的问题)
2,使用java配置的方式
/** * shiro session的管理 */ @Bean public DefaultWebSessionManager sessionManager() { DefaultWebSessionManager sessionManager = new DefaultWebSessionManager(); sessionManager.setGlobalSessionTimeout(tomcatTimeout * 1000); sessionManager.setSessionDAO(sessionDAO()); sessionManager.setSessionIdCookieEnabled(true); sessionManager.setSessionIdCookie(sessionIdCookie()); Collection<SessionListener> listeners = new ArrayList<SessionListener>(); listeners.add(new BDSessionListener()); sessionManager.setSessionListeners(listeners); return sessionManager; } /** * 设置cookie * @return */ private SimpleCookie sessionIdCookie() { SimpleCookie cookie = new SimpleCookie(); cookie.setName("USERSESSIONID"); cookie.setHttpOnly(true); cookie.setMaxAge(tomcatTimeout * 10); return cookie; }
(转载请注明花儿为何那样红博客)