java实现单点登录

news/2024/11/13 3:34:41/

以下是使用Java实现单点登录功能的示例代码:

  1. SSO服务器端代码

SSO服务器使用Spring Boot框架实现,主要的部分如下:

// SSO服务器端控制器
@RestController
public class SsoController {// 模拟用户账号信息private static final Map<String, String> userMap = new HashMap<>();static {userMap.put("user1", "password1");userMap.put("user2", "password2");}// SSO登录接口@PostMapping("/sso/login")public Map<String, Object> login(@RequestParam String username, @RequestParam String password) {// 根据账号密码获取用户信息String dbPassword = userMap.get(username);if (dbPassword != null && dbPassword.equals(password)) {// 生成并返回tokenString token = UUID.randomUUID().toString();return Collections.singletonMap("token", token);}return Collections.emptyMap();}// SSO验证接口@GetMapping("/sso/validate")public Map<String, Object> validate(@RequestParam String token) {// 根据token获取用户信息// 如果token有效则返回用户信息,否则返回空mapreturn Collections.singletonMap("user", "user1");}
}

  1. 客户端应用代码

客户端应用使用Spring Boot框架实现,主要的部分如下:

// 客户端应用控制器
@RestController
public class AppController {// 应用认证方法private boolean authenticate(String token) {try {// 根据token向SSO服务器发送验证请求String url = "https://sso.example.com/sso/validate?token=" + token;HttpClient httpClient = HttpClientBuilder.create().build();HttpGet request = new HttpGet(url);HttpResponse response = httpClient.execute(request);// 根据返回结果判断token是否有效if (response.getStatusLine().getStatusCode() == 200) {return true;}} catch (Exception e) {e.printStackTrace();}return false;}// 首页控制器@GetMapping("/")public String index(HttpServletRequest request) {// 从请求中获取tokenString token = request.getParameter("token");if (token != null && authenticate(token)) {// 如果token有效则设置session并返回欢迎信息request.getSession().setAttribute("user", "user1");return "Welcome, user1!";} else {// 如果token无效则重定向到SSO服务器的登录页面String url = "https://sso.example.com/sso/login?app=https://example.com&callback=https://example.com/";return "Please login again: <a href='" + url + "'>Login</a>";}}
}

以上代码仅供参考,实际使用中需要根据具体需求进行修改。


http://www.ppmy.cn/news/1195507.html

相关文章

nodejs express uniapp 图书借阅管理系统源码

开发环境及工具&#xff1a; nodejs&#xff0c;mysql5.7&#xff0c;HBuilder X&#xff0c;vscode&#xff08;webstorm&#xff09; 技术说明&#xff1a; nodejs express vue elementui uniapp 功能介绍&#xff1a; 用户端&#xff1a; 登录注册 首页显示轮播图&am…

代码随想录打卡第六十天|● 739. 每日温度 ● 496.下一个更大元素 I

739. 每日温度 题目&#xff1a; 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来…

Redis常见风险分析

击穿 概念&#xff1a;在Redis获取某一key时, 由于key不存在, 而必须向DB发起一次请求的行为, 称为“Redis击穿”。 引发击穿的原因&#xff1a; 第一次访问恶意访问不存在的keyKey过期 合理的规避方案&#xff1a; 服务器启动时, 提前写入规范key的命名, 通过中间件拦截对…

东北大学python大作业

目前金属矿开采&#xff0c;爆破还是主要的破岩方式&#xff0c;为了保证巷道采场的安全&#xff0c;需要对爆破震动进行监测&#xff0c;获取的监测数据如附件&#xff0c;第1列数据为震动的序号&#xff0c;第2、3、4列为x,y,z三个方向的震动速度&#xff0c;往往由于各种因素…

发邮件时我可以不是我

大家好&#xff0c;才是真的好。 Notes/Domino 12.0有一项新特性&#xff0c;即启用备用发件人功能&#xff0c;从一个邮箱当中发送邮件&#xff0c;可以选定不同的用户邮箱身份&#xff0c;继而我不是我。 这在某些情况下特别实用。比如有人使用Notes客户端来接收163或Gmail…

您对互联网有多“上瘾”?

萨里大学的科学家决定检查现代用户的网络成瘾程度。他们的一篇文章最近发表在 《旅行与旅游营销杂志》上 &#xff0c;其中包含对受此问题困扰的年轻人&#xff08;而不仅仅是年轻人&#xff09;的研究和分类结果。 796名不同年龄段的人参加了实验。科学家们仔细监测了他们的行…

AM@二元函数和多元函数

文章目录 abstract多元函数的定义2元函数 n n n元函数 多元函数定义域多元抽象函数和多元代换例 二元函数的几何意义空间直角坐标系二元函数的几何图形例 refs abstract 二元函数和多元函数的定义二元函数的基本问题和几何意义 多元函数的定义 2元函数 设 D D D是平面上的一…

抽象轻松的理解

映射 → mapping 在数学里&#xff0c;映射是个术语&#xff0c;指两个元素的集之间元素相互“对应”的关系&#xff0c;为名词。映射&#xff0c;或者射影 &#xff08;百度百科&#xff09; &#xff08;原因&#xff09;↓ 为什么会出现这个小结&#xff0c;原因很简单…