之前的一个业务系统需要迁移到另外一个平台上。但对之前的系统不想有过多的修改。
一个实现方案是通过shiro验证用户信息,来实现单点登录
这里通过中间数据库存储用户登录信息。业务系统在原有的shiro验证逻辑上,增加一个和IUAP平台相同的验证逻辑;这样业务系统就支持两种登录验证逻辑,从而实现单点登录。
登录IUAP平台后,通过配置业务系统的菜单,可以在平台上直接访问,这样看起来是一个系统,实际后台是跑了两个系统。
关于用户信息,两边必须能把用户信息关联起来,在业务系统当判断到时按IUAP平台的登录逻辑验证成功后,会从cookies中读取用户名,并记录用户的登录信息,这样在IUAP平台访问业务系统时,业务系统这边也能取到当前的登录用户信息。
在shiro中需要覆写认证回调函数doGetAuthenticationInfo,在原先的基础上,增加IUAP平台的登录成功的获取用户方式
String username = null;// 用户代码 String valilogin = null; //验证短信验证码 if (isIuapCertificate) {// IUAP登录 StatelessToken statelessToken = (StatelessToken) authcToken; username = statelessToken.getUsername(); } else { UsernamePasswordCaptchaToken token = (UsernamePasswordCaptchaToken) authcToken; username = token.getUsername(); valilogin = token.getCaptcha(); //验证短信验证码 } UserEntity user = null; try { user = userService.findByLoginName(username); } catch (ServiceException e) { logger.error("查询用户出错:" + e.getMessage(), e); throw new UnknownAccountException("查询用户出错:" + e.getMessage()); } if (user == null) { throw new UnknownAccountException("系统无法找到用户:" + StringFilter(username)); }