通过shiro验证实现两个平台单点登录
2017-12-08 10:28
393 查看
之前的一个业务系统需要迁移到另外一个平台上。但对之前的系统不想有过多的修改。
一个实现方案是通过shiro验证用户信息,来实现单点登录
![](http://img.blog.csdn.net/20171208101900310?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvRmFpbHVyZV9MZWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这里通过中间数据库存储用户登录信息。业务系统在原有的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));
}
一个实现方案是通过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));
}
相关文章推荐
- ASP.NET jQuery 食谱11 (通过使用jQuery validation插件简单实现用户登录页面验证功能)
- spring集成shiro实现登录认证自定义验证功能(认证采用国密SM4算法)
- 通过Ajax实现不显示登录框的IIS-Windows集成身份验证登录
- PHP通过session id 实现session共享和登录验证-android开发非常重要
- 使用shiro的的表单过滤器重写shiro默认的认证规则来实现先验证验证码再验证登录所遇到的问题
- shiro框架---关于用户登录和权限验证功能的实现步骤(五)
- 基于权限安全框架Shiro的登录验证功能实现
- PHP通过session id 实现session共享和登录验证[转]
- shiro框架---关于用户登录和权限验证功能的实现步骤(二)
- 基于mob平台,手机短信验证码实现登录功能
- PHP通过session id 实现session共享和登录验证的代码
- PHP通过session id 实现session共享和登录验证的代码
- shiro框架---关于用户登录和权限验证功能的实现步骤(三)
- ios平台上国密sm3的实现,iphone4s,5,6,6s验证通过
- Servlet实现用户登录页面(通过数据库验证)
- 在PHP中利用LDAP通过活动目录(Active Directory)实现域用户登录验证的办法
- 通过Ajax实现不显示登录框的IIS-Windows集成身份验证登录
- SharePoint基于windows验证的如何通过组策略实现IE自动以当前域账号登录SP站点
- j2ee 简单网站搭建:(七)使用 shiro 结合 jcaptcha 实现用户验证登录
- shiro框架---关于用户登录和权限验证功能的实现步骤(一)