随着公司系统的增加,每次新建一个项目是否还在做登录功能呢?这其实都是重复的工作,统一登录SSO你值得拥有。本文主要讲解,基于令牌token方式实现,同域与不同域均支持。
SpringBoot工程下的SSO单点登录整合代码实例Demo,文末附源码地址。
1.环境准备
SSO认证中心服务( www.mysso.com)
客户端1(www.myclient1.com)
客户端2(www.myclient2.com)
由于是Demo实例,这里若有要访问-需要修改一下本机host,添加如下映射
127.0.0.1 www.mysso.com 127.0.0.1 www.myclient1.com 127.0.0.1 www.myclient2.com
2.搭建SSO认证中心服务
注意:本文主要讲代码实现如果要看流程相关请移步SSO单点登录全流程分析
问题来了,搭建一个SSO统一登录需要哪些功能?
统一登录页+接口
校验令牌有效性接口(调用来源:子系统)
校验登录状态接口(调用来源:子系统)
统一退出(调用来源:子系统或退出认证中心服务)
这里就不贴Maven依赖了,主要讲解功能,详见文末附源码。
2.1统一登录页
创建一个统一登录页
<html><head> <meta charset="UTF-8"> <title>程序员小强-SSODemotitle>head><style>body.center {
text-align: center;}style><body class="center"><div> <h1>SSO用户统一登录h1>div><div> <form name="loginForm" action="/sso/login" method="POST" accept-charset="UTF-8"> <div><input placeholder="用户名" value="admin" name="username" type="text"/>div> <div><input placeholder="密码" value="123456" name="password" type="password"/>div> <div style="color: red"><span th:text="${msg}">span>div> <div><input name="redirectUrl" type="hidden" th:value="${redirectUrl}"/>div> <input type="submit" value="登录"/> <input type="reset" value="重置"/> form>div>body>html>
效果图
2.2统一登录接口
/** * 认证中心SSO统一登录方法 */@RequestMapping("/login")public String login(LoginParam loginParam, RedirectAttributes redirectAttributes, HttpSession session, Model model) {
//Demo 项目此处模拟数据库账密校验 if (!"admin".equals(loginParam.getUsername()) || !"123456".equals(loginParam.getPassword())) {
model.addAttribute("msg", "账户或密码错误,请重新登录!"); model.addAttribute("redirectUrl", loginParam.getRedirectUrl()); return "login"; } //登录成功 //创建令牌 String ssoToken = UUID.randomUUID().toString(); //把令牌放到全局会话中 session.setAttribute("ssoToken", ssoToken); /