通过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));
        }



猜你喜欢

转载自blog.csdn.net/failure_lee/article/details/78748713
今日推荐