帮我写一个单点登录的示例代码
时间: 2023-06-28 07:16:06 浏览: 44
好的,以下是一个简单的单点登录示例代码:
```java
// SSO Server 端
import java.util.HashMap;
import java.util.Map;
public class SSO {
private static Map<String, User> userMap = new HashMap<>();
public static String login(String username, String password) {
// 模拟用户登录过程,验证用户名和密码是否正确
if (validate(username, password)) {
// 生成 token,并将 token 和对应的用户信息保存到 userMap 中
String token = generateToken();
User user = new User(username);
userMap.put(token, user);
return token;
} else {
return null;
}
}
public static User getUser(String token) {
// 根据 token 获取对应的用户信息
return userMap.get(token);
}
private static boolean validate(String username, String password) {
// 模拟用户登录验证
return true;
}
private static String generateToken() {
// 生成随机 token
return "random_token";
}
}
// SSO Client 端
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入用户名:");
String username = scanner.nextLine();
System.out.print("请输入密码:");
String password = scanner.nextLine();
// 调用 SSO Server 的 login 方法进行登录,获取 token
String token = SSO.login(username, password);
if (token != null) {
System.out.println("登录成功,token:" + token);
// 跳转到业务系统,并将 token 作为参数传递给业务系统
BusinessSystem.redirect(token);
} else {
System.out.println("登录失败");
}
}
}
// 业务系统
public class BusinessSystem {
public static void redirect(String token) {
// 跳转到业务系统首页,并将 token 作为参数传递给业务系统
String url = "http://localhost:8080/index?token=" + token;
System.out.println("跳转到业务系统:" + url);
}
}
// User 类
public class User {
private String username;
public User(String username) {
this.username = username;
}
public String getUsername() {
return username;
}
}
```
这段代码实现了一个简单的单点登录系统,其中 SSO Server 端负责用户的认证和 token 的生成,SSO Client 端负责用户的登录并将 token 传递给业务系统,业务系统根据 token 获取用户信息并进行授权。在实际应用中,SSO Server 和业务系统通常会分别部署在不同的服务器上,通过 HTTP 接口进行通信。