内网运行的两个独立小应用,因为功能比较简单,所以部署在了同一个tomcat里。
为了方便,两个应用新添加了一些手动维护数据的管理功能,管理页面在A应用,加上了跳转B应用的入口,并做了简单的登录。
测试时发现,A应用登录后,session能检测到登录信息,但跳转到B应用时session是空的。因为session是保存在服务端内存的,A创建的session,在B中肯定是没有的。
查了网上的资料,跨应用共享session主要有四种实现方式。
1. 基于NFS的Session共享
2. 基于数据库的Session共享
3. 基于Cookie的Session共享
4. 基于缓存的Session共享(redis/memcache)
为了快速实现,选择了基于Cookie的Session共享方式。这种方式依靠Cookie来传递登录信息,但是受限cookie数据量大小和安全性,可能不是太适合用于大量用户登录的生产场景,但是这种内网小应用登录的情况够了。
1、应用A判断账号密码通过后,保存对应的session和cookie信息
//将登录信息放入应用A的session
request.getSession().setAttribute(USER_CONTEXT, member);
//将登录信息放入公共的cookie中
String jsessionId = request.getSession().getId();
Cookie cookie = new Cookie(LoginInterceptor.USER_C