一、实现流程

二、git中下载sp程序,部署服务,并调试,确保与idp可以通信。
1、下载地址
https://github.com/vdenotaris/spring-boot-security-saml-sample
2、配置证书,修改 \src\main\resources\update-certifcate.sh,并运行,会根据配置生成jks证书。解决SSL peer failed hostname validation for name: null错误
注:update-certifcate.sh解释:从IDP_HOST、IDP_PORT的地址获取证书存入临时ssocircle.cert中,根据ssocircle.cert生成samlKeystore.jks文件。
如果自己有cert证书,请修改update-certifcate.sh 根据自己的cert证书生成 jks。
3、修改WebSecurityConfig.java

String idpSSOCircleMetadataURL = "自己idp地址"; //指向 federationmetadata.xml
HTTPMetadataProvider httpMetadataProvider = new HTTPMetadataProvider(this.backgroundTaskTimer, httpClient(), idpSSOCircleMetadataURL);
extendedMetadataDelegate.setMetadataTrustCheck(false); // 不改成false好像不能过

4、部署并启动
5、访问 http://localhost:8080/saml/metadata 下载 spring_saml_metadata.xml,并在idp中进行配置。(通信需要)。
6、修改LandingController方法

@RequestMapping("/landing")public String landing(@CurrentUser User user, Model model,HttpServletRequest request) { String userName = user.getUsername(); String token = UUID.randomUUID().toString();ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();valueOperations.set(token, userName,2,TimeUnit.MINUTES);System.out.println("-------------------"+userName+"---------------------------------");return "redirect:https://xxx/esp/index.html#app/singleview?token="+token;//return "redirect:"+redirectUrl+"?token="+token;}

7、修改js文件

var token = $location.search().token || "";
UserService.findCurrentUserInfo(token).success(function(data){//获取当前用户后执行的方法
})

8、修改后端方法(因为系统判断是否登录都走findCurrentUserInfo方法,故修改这个方法。主要实现根据token,如果能取到用户名则从数据库中取出用户信息,放入Session中)

@RequestMapping(value = "/findCurrentUserInfo", method = RequestMethod.GET)public AjaxResponse findCurrentUserInfo(HttpServletRequest request,String token) throws Exception {if(!StringUtils.isEmpty(token)) {ValueOperations<String, String> valueOperations = ssoTokenRedisTemplate.opsForValue(); String userName = valueOperations.get(token);if(!StringUtils.isEmpty(userName)) { if(userName.indexOf("@")>0) {userName = userName.split("@")[0];}  User sysUser = iSysUserRepository.findByUserName(userName);if(sysUser == null) {throw new BusinessException("UserNotExist","用户不存在!");}RequestAttributes attrs = RequestContextHolder.getRequestAttributes();HttpServletRequest request = ((ServletRequestAttributes)attrs).getRequest(); request.getHttpSession().setAttribute(name, item);.setItem("SysUser", sysUser); }  return rps;}

三、总结
1、调试通过spring-boot-security-saml-sample这个sp服务,并且与idp实现通信。主要涉及到https证书,我在这个上面绕了好长时间。
2、spring-boot-security-saml-sample需要部署成一个服务,不需要和我们的程序绑到一起,它的主要作用就是我们请求idp,idp给它返回用户名。我们从它那里获取用户名。
3、我们自己的程序需要有统一判断是否登录的入口,这样比较好改。

基于SAML2.0单点登录的实现(JAVA)相关推荐

  1. 基于saml2.0的平台(适用多种平台)单点登录配置,以okta为例

    目录 现状和问题 解决方案原理 基于saml2.0协议的Java实现 基于OKTA平台的实例演示 结论 题外话 现状和问题 事情的起因在于接到一个需求,要求在SAP的succesfactory中使用单 ...

  2. 【No.1】基于Cookie的单点登录(SSO)

    2019独角兽企业重金招聘Python工程师标准>>> 这篇主要说明基于Cookie的单点登录实现,以及Cookie的一些特性以及使用说明. 1.Cookie是什么,如何工作的 在程 ...

  3. 基于SAML的单点登录介绍

    一.背景知识: SAML即安全断言标记语言,英文全称是Security Assertion Markup Language.它是一个基于XML的标准,用于在不同的安全域(security domain ...

  4. 2、cas4.0 单点登录 之 cas-client

    cas4.0 单点登录 之 cas-client cas4.0 单点登录 之 https证书 已经做好了证书的准备工作,现在结合cas-server来配置单点登录: 一.安装cas服务端(cas-se ...

  5. 基于.Net的单点登录(SSO)解决方案

    基于.Net的单点登录(SSO)解决方案 前些天一位朋友要我帮忙做一单点登录,其实这个概念早已耳熟能详,但实际应用很少,难得最近轻闲,于是决定通过本文来详细描述一个SSO解决方案,希望对大家有所帮助. ...

  6. java php 单点登陆,cas实现单点登录,登出(java跟php客户端)(转)

    cas实现单点登录,登出(java跟php客户端)(转)cas实现单点登录,登出(java和php客户端) (转) 最近项目中需要做单点登录,客户端包含java和php,java有几个应用程序,php ...

  7. 基于Cookie的单点登录(SSO)系统介绍

    基于Cookie的单点登录(SSO)系统介绍 SSO的概念: 单点登录SSO(Single Sign-On)是身份管理中的一部分.SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保 ...

  8. 1、cas4.0 单点登录 之 https证书

    cas4.0 单点登录 之 https证书 公司项目使用分布式部署,使用单点登录可使各节点无状态,达到业务与用户认证解耦:cas-server与cas-client通讯安全完全基于https,需要ss ...

  9. Spring Cloud入门-Oauth2授权之基于JWT完成单点登录(Hoxton版本)

    文章目录 Spring Cloud入门系列汇总 摘要 单点登录简介 创建oauth2-client模块 修改授权服务器配置 网页单点登录演示 调用接口单点登录演示 oauth2-client添加权限校 ...

  10. 基于云端的通用权限管理系统,SAAS服务,基于SAAS的权限管理,基于SAAS的单点登录SSO,企业单点登录,企业系统监控,企业授权认证中心...

    基于云端的通用权限管理系统 SAAS服务 基于SAAS的权限管理 基于SAAS的单点登录SSO 基于.Net的SSO,单点登录系统,提供SAAS服务 基于Extjs 4.2 的企业信息管理系统 基于E ...

最新文章

  1. JVM中线程是否可以并行执行
  2. 纯注解开发配置spring
  3. pythontuple数据类型_数据类型-元组Tuple
  4. MyBatis 的执行流程,学废了!
  5. python捷联惯导的姿态解算_自动驾驶中高精地图的大规模生产:视觉惯导技术在高德的应用...
  6. Feature flag,一个让软件发布轻松不掉发的神技
  7. Qt-做一个快速打包插件(一键完成项目软件打包)
  8. linux 下恢复文件权限设置,备份和恢复Linux文件权限的方法
  9. MyEclipse+Tomcat+JSP开发环境配置
  10. js中如何判断按钮是否被点击了
  11. linux 查看pgsql端口,如何通过Linux脚本检查是否已安装PostgreSQL?
  12. CentOS7安装单机kubernetes和Docker
  13. 硬件开发过程简介(一)
  14. 移动设备数据丢失恢复办法
  15. 统计学习——联合概率分布
  16. 桌面计算机图标无法显示属性,Win7系统桌面图标显示异常的解决方法大全
  17. 此CA证书不受信任的解决办法
  18. 创成汇:科技与艺术概念结合在手机上,效果居然这么强?_创成汇
  19. 【学习分享】0、创龙 TMS320C6748开发例程使用手册
  20. 强力推荐mac快速查看应用快捷键工具:键指如飞FlyKey

热门文章

  1. aic值检验 p值_qRT-PCR差异分析及P值计算
  2. 银行计算机综合知识,银行秋招综合知识测试包含哪些专业课?
  3. JAVA计算机毕业设计中药分类管理系统Mybatis+源码+数据库+lw文档+系统+调试部署
  4. python微信加人_真的有专门给微信加人的软件吗?
  5. 组态王JAVA,组态王肿么实现点击按钮以后可以实现画面的运行
  6. 服务器amd cpu性能排行,Ryzen处理器有哪些/性能排名如何?AMD Ryzen CPU天梯图解答...
  7. 最小二乘法曲线拟合(代码环境:matlab)
  8. echarts label固定位置_echarts 饼状图调节 label和labelLine的位置
  9. 【网络】解决校园网Wi-Fi登录页无法自动弹出
  10. 基于原语的千兆以太网RGMII接口设计