多系统-单点登录测试
多系统-单点登录测试
- 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;}
多系统-单点登录测试相关推荐
- A系统单点登录B系统
A系统单点登录B系统 单点登录的前提条件 流程图 调用方式 单点登录的前提条件 B系统需要提前配置可单点登录的用户信息(部门信息则不需要). 在A系统与B系统之间通过令牌的方式来实现双方系统对于当前用 ...
- 金蝶EAS通过第三方系统单点登录
这里写自定义目录标题 金蝶EAS通过第三方系统单点登录 操作步骤 第三方系统代码示例 示例jsp代码如下: 示例java代码如下: 金蝶EAS通过第三方系统单点登录 操作步骤 1.需要有LtpaTok ...
- 多系统单点登录(sso)设计
文章目录 问题提出 登录信息共享机制设计 简单实现 淘宝天猫登录信息共享(简化版) 登录流程 问题提出 多个系统中,如何做到其中一个系统登录了,在浏览器中打开其他系统也会成登录状态?比如在淘宝登陆了, ...
- vue 若依系统单点登录
vue 若依系统单点登录 实现思路: 第三方跳转到我们系统直接请求我们系统的登录页面,挂着code参数 根据code判断登录方式,如果有code的话就直接调用后端的登录接口把code传递给后端,登录成 ...
- 孵化版与总部系统单点登录实现方案概述
方案概述 孵化版 所有用户通过单点登录进行登录 登录后本系统通过sso服务器传回的session获取用户名 系统再获取到用户名后通过本地数据库进行查询 获取到用户信息则按正常流程走,通过省-角色-个体 ...
- 金蝶云如何html5登录,第三方系统单点登录到金蝶云指南V2
启用第三方系统登录授权 2 测试第三方系统单点登陆 使用生成的链接测试是否能正常的单点登录. 3 在第三方系统中生成签名授权的URL [参数格式]:ud={"dbid":& ...
- N多系统单点登录,实现、解决方案。四种解决方案
单点登录 ( SSO )的技术被越来越广泛地运用到各个领域的软件系统当中.本文从业务的角度分析了 单点登录 的需求和应用领域:从技术本身的角度分析了 单点登录 技术的内部机制和实现手段,并且给 ...
- JAVA——基于HttpClient的通过单点登录方式(统一身份认证平台)登录正方教务系统[1999-2020]基本解决方案
问题分析 通过HttpClient获取网页数据源,通过Jsoup解析数据.先模拟登录统一身份认证平台,再通过单点登录方式登录正方教务系统,最后获取相关信息.模拟浏览器正常操作,封装请求头信息获取SES ...
- CAS 单点登录/登出 系统
前言: 在我们的实际开发中,更多的是采用分布式系统.那么问题来了,对于分布式系统的登录问题,我们如何解决呢? 如果说我们在每一个系统中都要进行一次登录,那么用户体验度也就差的没法用了.以京东商城为例, ...
最新文章
- Android零碎知识点-更新中
- 张家口zec挖矿软件哪里下载_AMTO软件下载-AMTO挖矿官网版v1.1
- E:VUE 插件 开发与使用 (一)
- Python的MySQLdb模块安装
- E-MapReduce上如何升级EMR-Core
- Struts2的Maven依赖包
- 【OpenCV】OpenCV函数精讲之 -- 感兴趣区域ROI
- linux上的甘特图软件,甘特图软件这么好用,可惜很多人不知道
- Bex5服务启动时提示概念表超限
- c语言中的加减乘除字母,C语言加减乘除运算
- Python里面有个inf是干啥的
- postgresql立式版本下载_【PostgreSQL下载】PostgreSQL官方版下载_多特软件站
- java 将多个文件打包成压缩包下载
- 高薪offer,只因做对了这套笔试题
- Python判断一个正整数是否为素数的算法
- 单元格中添加自适应斜线
- java 提取违反顺序_oracle 中 java.sql.SQLException: ORA-01002: 提取违反顺序
- 学习Python很难?过来人给你分享学习经验
- Memcached哈希性能优化(八)——总结报告
- 方舟服务器延迟n a什么意思,留存分析
热门文章
- System.InvalidOperationException HResult=0x80131509 Message=ExecuteNonQuery 要求已打开且可用的 Connection
- 【数据分发服务DDS】软件定义汽车【四】-行业现状
- 使用CStdioFile读写文件
- oracle建表语句设置主键,oracle 表添加主键 primary key
- 视角设置(第一人称、第三人称)
- Python3根据URL下载图片
- EZ 2018 02 28 NOIP2018 模拟赛(二)
- noi题库1011. 正方形
- 【黑马程序员西安中心】一匹“黑马”的自述
- 【Keras+计算机视觉+Tensorflow】生成对抗神经网络中DCGAN、CycleGAN网络的讲解(图文解释 超详细)