冠辰网站建设关键词优化公司推荐
一、单点登录效果
首先我们看通过一个具体的案例来加深对单点登录的理解。案例地址:https://gitee.com/xuxueli0323/xxl-sso?_from=gitee_search 把案例代码直接导入到IDEA中
然后分别修改下server和samples中的配置信息
在host文件中配置
127.0.0.1 sso.server.com
127.0.0.1 client1.com
127.0.0.1 client2.com
然后分别启动server和两个simple服务。
访问测试:
其中一个节点登录成功后其他节点就可以访问了
二、单点登录实现
清楚了单点登录的效果后,我们就可以自己来创建一个单点登录的实现了。来加深下单点登录的理解了。
1.创建项目
通过Maven创建一个聚合工程,然后在工程中创建3个子模块,分别为认证服务和客户端模块。
引入相同的依赖
2.client1
我们先在client1中来提供相关的接口。我们提供一个匿名访问的接口和一个需要认证才能访问的接口。
@Controller
public class UserController {@ResponseBody@GetMapping("/hello")public String hello(){return "hello";}@GetMapping("/queryUser")public String queryUser(Model model){model.addAttribute("list", Arrays.asList("张三","李四","王五"));return "user";}
}
user.html中的代码为:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>$Title$</title>
</head>
<body><h1>用户管理:</h1><ul><li th:each="user:${list}">[[${user}]]</li></ul>
</body>
</html>
访问测试:
没有认证就能访问,所以得加上验证的逻辑。
@GetMapping("/queryUser")public String queryUser(Model model, HttpSession session){Object userLogin = session.getAttribute("userLogin");if(userLogin != null){// 说明登录过了,直接放过model.addAttribute("list", Arrays.asList("张三","李四","王五"));return "user";}// 说明没有登录,需要跳转到认证服务器认证 为了能在登录成功后跳回到当前页面,传递参数return "redirect:http://sso.server:8080/loginPage?redirect=http://client1.com:8081/queryUser";}
可以看到当我们访问queryUser请求的时候,因为没有登录所以会重定向到认证服务中的服务,做登录处理。这时就需要进入到server服务中处理
3.server服务
在服务端我们需要提供两个接口,一个调整到登录界面,一个处理认证逻辑以及一个登录页面
@Controller
public class LoginController {/*** 跳转到登录界面的逻辑* @return*/@GetMapping("/loginPage")public String loginPage(@RequestParam(value = "redirect" ,required = false) String url, Model model){model.addAttribute("url",url);return "login";}/*** 处理登录请求* @return*/@PostMapping("/ssoLogin")public String login(@RequestParam("userName") String userName,@RequestParam("password") String password,@RequestParam(value = "url",required = false) String url){if("zhangsan".equals(userName) && "123".equals(password)){// 登录成功return "redirect:"+url;}// 登录失败重新返回登录页面return "redirect:loginPage";}}
登录页面代码逻辑
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8">