单点登录,就是在一个系统登录后,在它的关联系统也不用重新登录了。例如:你成功登录了淘宝,那么在天猫也就成功登录了;同理,退出也是一样的。在天猫退出账号,在淘宝的账号也就退出了。(咳咳,同一浏览器内)
实现单点登录,主要就是利用同域名传递 cookie 中的登录用户信息。以下是一种实现方式,仅供参考!
准备工作
1)
系统:win10
IDE:sts4
springboot2.2.4.RELEASE、 jdk8、 maven3.3.9
在本例中,创建了4个 springboot 项目,一个专用来处理登录(login.sso.com),其他都是关联系统,把 sys1.sso.com 当做是主系统。
如果用户首先在 sys1 系统的首页浏览,此时点击登录,则跳转到登录系统处理登录逻辑。登录成功后,会跳转到 sys1 系统的首页,并且是已登录状态。
同理用户在 sys2 系统的首页浏览,此时点击登录,则跳转到登录系统处理登录逻辑。登录成功后,会跳转到 sys2 系统的首页,并且是已登录状态。
那如果一开始就是没有在其他系统浏览,而是直接到登录系统进行登录呢。那这种情况登录成功后,本例会跳转到 sys1 的首页,即设定 sys1 为主系统的意思
2)域名映射
修改 hosts 文件,路径:C:\Windows\System32\drivers\etc
登录系统
登录系统只有一个登录界面和处理登录信息的逻辑
1)pom 依赖
<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>
没有使用数据库,用户信息是写死的,所以只需要这两个依赖就够了。
2)登录界面 login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>sso-login</title>
</head>
<body>
<h3>这里是登录页面</h3>
<p style="color:red;" th:text="${session.msg}"></p>
<form action="/login" method="post">
用户名:<input type="text" name="uname"/><br/>
密码:<input type="password" name="upwd"/><br/>
<button