多系统-单点登录测试

  • 1.介绍
  • 2.流程1,
  • 3.流程2,实现多客户端的单点登录
    • 3.1.介绍
    • 3.2.流程
    • 3.3 测试
      • 1).客户端1,登录
      • 2).客户端2,不用登录,直接访问
    • 3.4 代码
      • 1.代码-客户端
        • 1).pom.xml
        • 2).application.properties
        • 3).无需登录就可访问--HelloController
        • 4).登录后才可访问--HelloController
        • 5).list.html
        • 6).注意:客户端2与客户端2一样,把登录名称改为boss,端口号改为8082,服务名称改为client2.com
      • 2.代码-服务端
        • 1).pom.xml
        • 2).application.properties
        • 3).去登陆页--LoginController
        • 4).登陆页login.html
        • 5).登录服务
        • 6).获取用户信息

1.介绍

2.流程1,

3.流程2,实现多客户端的单点登录

3.1.介绍

实现多客户端的单点登录。一次登录,多个客户端不用登录。

3.2.流程

3.3 测试

1).客户端1,登录

http://client1.com:8081/employees

2).客户端2,不用登录,直接访问

http://client2.com:8082/boss

3.4 代码

1.代码-客户端

1).pom.xml
  <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.gulimall</groupId><artifactId>common</artifactId><version>0.0.1-SNAPSHOT</version></dependency>
2).application.properties

server.port=8081
spring.application.name=client1.com
sso.server.url=http://ssoserver.com:8080/login.html

3).无需登录就可访问–HelloController
//无需登录就可访问@ResponseBody@GetMapping("/hello")public String hello() {return "hello";}
4).登录后才可访问–HelloController
 @Controllerpublic class HelloController {@Value("${sso.server.url}")String ssoserverUrl;@Value("${spring.application.name}")String serverName;@Value("${server.port}")String port;//登录后才可访问//token:令牌,登录成功才有,required = false/**@Model:保存页面数据@session:获取session的数据@token:去ssoserver服务器登录成功跳回来后带上*/@GetMapping("/employees")public String employees(Model model, HttpSession session,@RequestParam(value = "token",required = false) String token) {if (!StringUtils.isEmpty(token)){//todo 去ssoserver获得真正的数据与token进行判断,数据一致才放入session, okRestTemplate restTemplate = new RestTemplate();ResponseEntity<String> forEntity = restTemplate.getForEntity("http://ssoserver.com:8080/userInfo?token=" + token, String.class);String body = forEntity.getBody();session.setAttribute("loginUser",body);}Object loginUser = session.getAttribute("loginUser");//判断session是否有值,有值说明登录if (loginUser == null) {//未登录,跳转到登录服务器。http://ssoserver.com:8080/login.html.服务名称、端口号可以注入进来@Value//登录成功后再跳回来,redirect_url=http://client1.com:8081/employeesreturn "redirect:" + ssoserverUrl+"?redirect_url=http://"+serverName+":"+port+"/employees";} else {//已经登录List<String> emps = new ArrayList<>();emps.add("张三");emps.add("李四");emps.add("王五");emps.add("赵刘");model.addAttribute("emps", emps);return "list";}}
5).list.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>员工列表。</title>
</head>
<body>
<h1>欢迎,[[${session.loginUser}]]</h1>
<ul><li th:each="emp:${emps}">姓名:[[${emp}]]</li>
</ul></body>
</html>
6).注意:客户端2与客户端2一样,把登录名称改为boss,端口号改为8082,服务名称改为client2.com

2.代码-服务端

1).pom.xml
 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
2).application.properties
server.port=8080
sso.server.url=http://ssoserver.com:8080/login.html#配置redis
spring.redis.host=192.168.56.10
spring.redis.port=6379
3).去登陆页–LoginController
 @Controllerpublic class LoginController {@Value("${sso.server.url}")String ssoserverUrl;@AutowiredRedisTemplate redisTemplate;//去登陆页/*** redirect_url:重定向地址* sso_token:不一定有,登录才有,required = false* */@GetMapping("/login.html")public String loginPage(@RequestParam("redirect_url") String redirect_url, Model model,@CookieValue(value = "sso_token",required = false) String sso_token) {if (!StringUtils.isEmpty(sso_token)){//如果不为空说明有人登陆过,给浏览器留下了痕迹return "redirect:"+redirect_url+"?token="+sso_token;}model.addAttribute("redirect_url", redirect_url);return "login";}
4).登陆页login.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>登录页</title>
</head>
<body>
<form action="/login" method="post">用户名:<input name="username"></br>密  码:<input type="password" name="password"></br><input type="hidden" name="redirect_url" th:value="${redirect_url}"><input type="submit" value="登录">
</form>
</body>
</html>
5).登录服务
 //登录@PostMapping("/login")public String login(@RequestParam("username") String username,@RequestParam("password") String password,@RequestParam("redirect_url") String redirect_url,HttpServletResponse response) {if (!StringUtils.isEmpty(username)&&!StringUtils.isEmpty(password)){System.out.println("登录成功");//登陆成功,跳转到之前的页面,http://client1.com:8081/employees,// 把登录成功的session放入redisString uuid = UUID.randomUUID().toString().replace("-","");redisTemplate.opsForValue().set(uuid,username);Cookie sso_token = new Cookie("sso_token",uuid);response.addCookie(sso_token);return "redirect:"+redirect_url+"?token="+uuid;}else {System.out.println("登录失败");//登录失败,跳回login.htmlreturn "login";}}
6).获取用户信息
    //获取用户信息@ResponseBody@GetMapping("/userInfo")public String userInfo(@RequestParam("token")  String token){String s = (String) redisTemplate.opsForValue().get(token);return s;}

多系统-单点登录测试相关推荐

  1. A系统单点登录B系统

    A系统单点登录B系统 单点登录的前提条件 流程图 调用方式 单点登录的前提条件 B系统需要提前配置可单点登录的用户信息(部门信息则不需要). 在A系统与B系统之间通过令牌的方式来实现双方系统对于当前用 ...

  2. 金蝶EAS通过第三方系统单点登录

    这里写自定义目录标题 金蝶EAS通过第三方系统单点登录 操作步骤 第三方系统代码示例 示例jsp代码如下: 示例java代码如下: 金蝶EAS通过第三方系统单点登录 操作步骤 1.需要有LtpaTok ...

  3. 多系统单点登录(sso)设计

    文章目录 问题提出 登录信息共享机制设计 简单实现 淘宝天猫登录信息共享(简化版) 登录流程 问题提出 多个系统中,如何做到其中一个系统登录了,在浏览器中打开其他系统也会成登录状态?比如在淘宝登陆了, ...

  4. vue 若依系统单点登录

    vue 若依系统单点登录 实现思路: 第三方跳转到我们系统直接请求我们系统的登录页面,挂着code参数 根据code判断登录方式,如果有code的话就直接调用后端的登录接口把code传递给后端,登录成 ...

  5. 孵化版与总部系统单点登录实现方案概述

    方案概述 孵化版 所有用户通过单点登录进行登录 登录后本系统通过sso服务器传回的session获取用户名 系统再获取到用户名后通过本地数据库进行查询 获取到用户信息则按正常流程走,通过省-角色-个体 ...

  6. 金蝶云如何html5登录,第三方系统单点登录到金蝶云指南V2

    启用第三方系统登录授权 2   测试第三方系统单点登陆 使用生成的链接测试是否能正常的单点登录. 3   在第三方系统中生成签名授权的URL [参数格式]:ud={"dbid":& ...

  7. N多系统单点登录,实现、解决方案。四种解决方案

    单点登录  ( SSO  )的技术被越来越广泛地运用到各个领域的软件系统当中.本文从业务的角度分析了 单点登录  的需求和应用领域:从技术本身的角度分析了 单点登录  技术的内部机制和实现手段,并且给 ...

  8. JAVA——基于HttpClient的通过单点登录方式(统一身份认证平台)登录正方教务系统[1999-2020]基本解决方案

    问题分析 通过HttpClient获取网页数据源,通过Jsoup解析数据.先模拟登录统一身份认证平台,再通过单点登录方式登录正方教务系统,最后获取相关信息.模拟浏览器正常操作,封装请求头信息获取SES ...

  9. CAS 单点登录/登出 系统

    前言: 在我们的实际开发中,更多的是采用分布式系统.那么问题来了,对于分布式系统的登录问题,我们如何解决呢? 如果说我们在每一个系统中都要进行一次登录,那么用户体验度也就差的没法用了.以京东商城为例, ...

最新文章

  1. Android零碎知识点-更新中
  2. 张家口zec挖矿软件哪里下载_AMTO软件下载-AMTO挖矿官网版v1.1
  3. E:VUE 插件 开发与使用 (一)
  4. Python的MySQLdb模块安装
  5. E-MapReduce上如何升级EMR-Core
  6. Struts2的Maven依赖包
  7. 【OpenCV】OpenCV函数精讲之 -- 感兴趣区域ROI
  8. linux上的甘特图软件,甘特图软件这么好用,可惜很多人不知道
  9. Bex5服务启动时提示概念表超限
  10. c语言中的加减乘除字母,C语言加减乘除运算
  11. Python里面有个inf是干啥的
  12. postgresql立式版本下载_【PostgreSQL下载】PostgreSQL官方版下载_多特软件站
  13. java 将多个文件打包成压缩包下载
  14. 高薪offer,只因做对了这套笔试题
  15. Python判断一个正整数是否为素数的算法
  16. 单元格中添加自适应斜线
  17. java 提取违反顺序_oracle 中 java.sql.SQLException: ORA-01002: 提取违反顺序
  18. 学习Python很难?过来人给你分享学习经验
  19. Memcached哈希性能优化(八)——总结报告
  20. 方舟服务器延迟n a什么意思,留存分析

热门文章

  1. System.InvalidOperationException HResult=0x80131509 Message=ExecuteNonQuery 要求已打开且可用的 Connection
  2. 【数据分发服务DDS】软件定义汽车【四】-行业现状
  3. 使用CStdioFile读写文件
  4. oracle建表语句设置主键,oracle 表添加主键 primary key
  5. 视角设置(第一人称、第三人称)
  6. Python3根据URL下载图片
  7. EZ 2018 02 28 NOIP2018 模拟赛(二)
  8. noi题库1011. 正方形
  9. 【黑马程序员西安中心】一匹“黑马”的自述
  10. 【Keras+计算机视觉+Tensorflow】生成对抗神经网络中DCGAN、CycleGAN网络的讲解(图文解释 超详细)