目标

 上一章节手撸SSO单点登录(四)登录验证-首次登录已经成功登陆并且跳转至OA系统,当OA系统刷新,或者OA系统打开其他菜单是怎么实现无需登陆,直接验证通过,跳转页面或者刷新页面。
视频详细讲解请见https://www.bilibili.com/video/BV1b5411d7be/

二 、系统UML工程类图

三、代码实现

a.当刷新OA系统页面的时候,进入com.yuantai.filter.LoginFilter请求拦截、进入isAccessAllowed方法

@Overridepublic boolean isAccessAllowed(HttpServletRequest request, HttpServletResponse response) throws IOException {SessionAccessToken sessionAccessToken = SessionUtils.getAccessToken(request);// 本地Session中已存在,且accessToken没过期或者refreshToken成功,直接返回if (sessionAccessToken != null && (!sessionAccessToken.isExpired()|| refreshToken(sessionAccessToken.getRefreshToken(), request))) {return true;}String code = request.getParameter(Oauth2Constant.AUTH_CODE);if (code != null) {// 获取accessTokengetAccessToken(code, request);// 为去掉URL中授权码参数,再跳转一次当前地址redirectLocalRemoveCode(request, response);}else {redirectLogin(request, response);}return false;}

因之前已经登陆过,所以SessionUtils.getAccessToken(request) 取值不为空,进去到

if (sessionAccessToken != null && (!sessionAccessToken.isExpired()|| refreshToken(sessionAccessToken.getRefreshToken(), request))) {return true;
}

 当sessionAccessToken.isExpired()没有过期 或者刷新refreshToken(sessionAccessToken.getRefreshToken(), request))成功返回true,认证通过,进入com.yuantai.controller.IndexController"/"GET请求返回请求成功index页面

b.如果sessionAccessToken.isExpired()过期,我们需要调用refreshToken(sessionAccessToken.getRefreshToken(), request))刷新token成功才会返回true。

protected boolean refreshToken(String refreshToken, HttpServletRequest request) {Result<RpcAccessToken> result = Oauth2Utils.refreshToken(getServerUrl(), getAppId(), refreshToken);if (!result.isSuccess()) {logger.error("refreshToken has error, message:{}", result.getMessage());return false;}return setAccessTokenInSession(result.getData(), request);}

 可以看到Oauth2Utils.refreshToken(getServerUrl(), getAppId(), refreshToken);这里是向认证中心请求token 刷新我们当做token 刷新成功(如果刷新不成功将会认证失败直接跳转到SSO统一登录页面,需要再次登录验证)。

接着调用 setAccessTokenInSession(result.getData(), request);把登录信息存储到session中,记录session与token的映射关系(这里与手撸SSO单点登录(四)登录验证-首次登录根据临时授权码code获取登录信息后的流程一样)

private boolean setAccessTokenInSession(RpcAccessToken rpcAccessToken, HttpServletRequest request) {if (rpcAccessToken == null) {return false;}// 记录accessToken到本地sessionSessionUtils.setAccessToken(request, rpcAccessToken);// 记录本地session和accessToken映射recordSession(request, rpcAccessToken.getAccessToken());return true;}

总结
刷新页面,或者打开新的页面,无非就是带着登录后的信息去后台请求接口,第一步先去验证是否通过,验证通过则继续接口调用,验证不通过直接跳转至SSO统一登录页面。

代码下载方式

搜索微信公众号:攻城狮小章鱼 ,关注后 ,发SSO源码获取源代码

手撸SSO单点登录(五)登录验证-OA系统页面刷新或者跳转新OA系统页面相关推荐

  1. 手撸SSO单点登录(六)SSO单点退出原理

    目标 这一章节我们来一起学习,单点退出登录,是怎么让所有sso系统一起退出登录的. 视频详细讲解请见https://www.bilibili.com/video/BV14A4y1S7HP/ 时序图 当 ...

  2. 手撸SSO单点登录(四)登录验证-首次登录

    一.目标 前一章节讲解了各应用未登录的系统统一跳转至SSO统一登录页面.当输入用户名.密码后点击登录流程是怎么实现的.这一章节的目标主要是讲解OA(这里代表client.sso.com:8082)经过 ...

  3. 手撸SSO单点登录(一):序言

    开源地址: 代码下载地址在最后面 功能介绍 本篇是基于HttpSession技术实现的单点登录,权限认证基于标准OAuth2协议.支持分布式Session共享的SSO单点登录功能. HttpSessi ...

  4. 手撸SSO单点登录(三):统一跳转至SSO登录页

    一.目标 这一章节的目标主要是讲解第一次打开系统,无论OA系统,还是认证系统等,在未登录的情况下怎么统一跳转至SSO登录页面.client 用OA系统代替更直观 视频讲解地址https://www.b ...

  5. SSO 单点登录解决方案

    转自:http://www.blogjava.net/Jack2007/archive/2014/03/11/191795.html 1 什么是单点登陆       单点登录(Single Sign ...

  6. SSO单点登录解决方案

    1 什么是单点登陆       单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相 ...

  7. 基于SAML 2.0对接阿里云的SSO(单点登录)

    背景 公司使用的阿里云作为公有云,每次员工入职或离职时同时需要维护两套账号(一套内部账号,一套阿里云RAM账号),为了让用户能够使用内部账号能访问阿里云,所以决定对接阿里云的SSO 主流程介绍 用户访 ...

  8. usmssosetup 单点登录被禁用_如何解决SSO单点登录跳转异常问题

    应用出现访问异常,很大可能是由于网络设备出现故障或者设备关联验证过程中出现了问题造成的.但是在部分情况下,对系统程序的设置也会成为造成异常现象的原因所在.正如本案例所介绍的单点跳转异常情况. 3.1 ...

  9. XSS跨站脚本攻击防御和Cookie,及SSO单点登录原理

    XSS又称CSS,全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性.其原理是攻击者向有XSS漏洞的网站中输入 ...

最新文章

  1. tomcat_deploy 平滑启动脚本
  2. CUDA编程快速入门教程
  3. Android中的ViewPager2
  4. 计算机工程信息学院严翔,严翔校长第六次大师课
  5. 基于 Ubuntu 16.04 LTS 的 KDE neon 到达维护周期
  6. java 录音_用JAVA实现不限时录音功能
  7. Linux手机适配,nginx同时适配PC版和手机移动版
  8. 线扫相机 编码器_面阵和线扫工业相机选型
  9. Commons net实现 FTP上传下载
  10. 资深程序员:Python中你不知道的那些小工具
  11. hset php,HSET命令_视频讲解_用法示例-redis编程词典-php中文网
  12. 罗永浩望着 7 年前的罗永浩
  13. b5对战一直检索服务器信息,【B5平台】求解封,服务器问题啊
  14. IDEA Tomcat控制台中文乱码
  15. 如何使用计算机对文件修改密码,如何给文件夹设置一个密码?(电脑怎么给文件夹设置密码?)...
  16. cesium制作飞机路线图
  17. poj 2586 Y2K Accounting Bug
  18. 美国ESS-HIFI音频解码芯片ES9023P
  19. 数据预测算法-指数平滑法-2
  20. 让Flows感知生命周期

热门文章

  1. 冷风骑车与贝多芬的命运交响曲
  2. 深度解析服务器科普知识
  3. oracle sql 不等 优化6,oracle sql 优化(三)
  4. echarts-特殊需求
  5. High Version Count Issues(SQL高Version Count) (文档 ID 296377.1)
  6. Android studio 高德地图开发
  7. BI神器Power Query(15)-- PQ制作时间维度表(4)
  8. 运维学习 unit 5 用户的建立与管理
  9. Photoshop支持ICO图片格式(咋个办呢 zgbn)
  10. UE4中的玩家类UPlayer、ULocalPlayer 和 UNetConnection