一、目标

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

二 、系统UML工程类图


SmartSsoConfig、LoginFilter、LoginController这三个类是主要的实现类

三、代码实现

1.com.yuantai.config.SmartSsoConfig

@Configuration
public class SmartSsoConfig {@Value("${sso.server.url}")private String serverUrl;@Value("${sso.app.id}")private String appId;@Value("${sso.app.secret}")private String appSecret;/*** 单点登录Filter容器* @return*/@Beanpublic FilterRegistrationBean<SmartContainer> smartContainer() {SmartContainer smartContainer = new SmartContainer();smartContainer.setServerUrl(serverUrl);smartContainer.setAppId(appId);smartContainer.setAppSecret(appSecret);// 忽略拦截URL,多个逗号分隔smartContainer.setExcludeUrls("/login,/logout,/oauth2/*,/custom/*,/assets/*");smartContainer.setFilters(new LogoutFilter(), new LoginFilter());FilterRegistrationBean<SmartContainer> registration = new FilterRegistrationBean<>();registration.setFilter(smartContainer);registration.addUrlPatterns("/*");registration.setOrder(1);registration.setName("smartContainer");return registration;}
}
  • smartContainer() 初始化了参数、注册SmartContainer过滤器
  • SmartContainer过滤器存储了基础参数、doFilter对登录进行验证处理

2.com.yuantai.filter.LoginFilter

  • isAccessAllowed()方法判断登录三种情况(已登录、第一次登录成功、未登录)
  • redirectLogin(request, response); 属于第三种情况未登录、重定向到SSO统一登录页面(http://authentication.sso.com:8080/login?appId=xxx&redirectUri=http://xxx.sso.com:8080/)

3.com.yuantai.controller.LoginController

 /*** 登录页* @param redirectUri* @param appId* @param request* @return*/@RequestMapping(method = RequestMethod.GET)public String login(@RequestParam(value = SsoConstant.REDIRECT_URI, required = true) String redirectUri,@RequestParam(value = Oauth2Constant.APP_ID, required = true) String appId,HttpServletRequest request) throws UnsupportedEncodingException {String tgt = sessionManager.getTgt(request);if (StringUtils.isEmpty(tgt)) {return goLoginPath(redirectUri, appId, request);}return generateCodeAndRedirect(redirectUri, tgt);}

当2步发起重定向后会跳转到login的方法(GET请求)跳转到统一的SSO登录页面

总结

  • 客户端发起请求,这3步完成了统一跳转至SSO登录页面。
  • 动手是学习起来最快的方式,不要让眼睛是感觉看会了,但上手操作就废了。也希望有需要的读者可以亲手操作一下,把你的想法也融入到可落地实现的代码里,看看想的和做的是否一致。

代码下载方式

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

手撸SSO单点登录(三):统一跳转至SSO登录页相关推荐

  1. SpringCloud入门 —— SSO 单点登录

    前言 本文适合初学者,如有不足或错误之处,还请大家在下方留言指正.(文章稍长,建议点赞收藏) 一.SSO单点登录是什么? 单点登录简介 单点登录SSO (Single Sign On) 是指在一个多系 ...

  2. 实现SSO单点登录的思考

    关注 "Java艺术" 我们一起成长! 随着公司业务的发展,子系统越来越多,实现SSO单点登录的需求就愈加迫切. 我们一些子系统中都有使用Redis存储Session,这最初是为了 ...

  3. 简单入门SSO单点登陆——认证服务

    SSO在我们的应用中非常常见,例如我们在OA系统登录了,我们就可以直接进入采购系统,不需要再登录了,这样使我们非常方便.现在网上也有很多实现方法,于是乎我也想写一个看看.我主要用到的是cookie的机 ...

  4. 《SSO系列二》自己动手写一个SSO

    概述 上篇博客http://blog.csdn.net/bingospunky中大概的介绍了一下SSO.这篇文章介绍一个我学习过程中写的一个Demo,可以让初学者对SSO有一个整体的认识. 线上演示 ...

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

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

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

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

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

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

  8. SSO单点登录三种情况的实现方式详解

    SSO单点登录三种情况的实现方式详解 单点登录(SSO--Single Sign On)对于我们来说已经不陌生了.对于大型系统来说使用单点登录可以减少用户很多的麻烦.就拿百度来说吧,百度下面有很多的子 ...

  9. sso 登出_最强SSO单点登录教程(三)单点注销流程分析

    一.前言 单点登录自然也要单点注销,在一个子系统中注销,所有子系统的会话都将被销毁,用下面的图来说明: 单点注销流程 步骤分析: 1.用户在CRM系统中点击注销按钮.会重定向到统一认证中心的注销方法 ...

最新文章

  1. mui 根据 json 数据动态创建列表
  2. mogilefsd同步速度调优
  3. java的serializable_Java里Serializable的那些事
  4. 2020运动相机推荐_2020年优秀户外运动相机推荐
  5. *.exe 中的 0x0053b1f7 处未处理的异常: 0xC00000FD: Stack overflow
  6. 如何做组间差异检验_买套餐送车险,做维修提供代步车,考拉爱车如何实现差异化竞争?...
  7. 机器学习—XGBoost实战与调参
  8. 几万字的博文,你自己会看吗
  9. 1999年考研数学一解析pdf
  10. RapidMiner
  11. [CSP-S模拟测试]:游戏(最短路)
  12. 每日方法分享:免费一键抠图方法都有哪些?
  13. KingbaseES共享集群存储方案的选择
  14. 浙江台州“安乐死”案承办法官首次披露庭审细节
  15. 反向链接与外链区别,如何查询反向链接?
  16. 利用计算机进行会计造假的案例分析,账簿会计造假的形式和识别技巧
  17. git push错误,如何回滚
  18. DLT645-2007 规约 电表 报文解析
  19. Antecedent Membership Functions相关资料
  20. TCP Connect 函数超时的问题

热门文章

  1. STM32开源代码——0.96寸OLED显示屏IIC(可显示汉字)
  2. 深度 | 驭势仿真实景建模技术,构筑无人驾驶的商业化世界
  3. python:关于三维装箱问题的算法研究-1
  4. PWA---新生代手机APP
  5. 手写字识别——可视化训练过程
  6. 21美亚杯团队赛,镜像+解析,只做了pc+恶意+内存,希望与大家一起学习进步。
  7. 光通量发光强度照度亮度关系_发光强度、光通量、照度、亮度之间有什么区别呢?用最浅鲜易懂的方法解答一下吧?...
  8. C++(17):overload模式
  9. oppo手机用计算机充满电,OPPO手机的充电小技巧,打开这个开关,让你充一次电可玩三天...
  10. 14. unity粒子特效--速度、粒子环绕、力(重力、阻力、风力等)、噪音