通过shiro验证实现两个平台单点登录
之前的一个业务系统需要迁移到另外一个平台上。但对之前的系统不想有过多的修改。
一个实现方案是通过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));
}声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: 分布式系列 单点登录和session共享
- 下一篇: shiro 单点登录原理 实例
