单点登录Java代码
时间: 2023-09-06 15:04:47 浏览: 40
### 回答1:
下面是一个简单的单点登录的 Java 代码示例。
```
import java.util.HashMap;
import java.util.Map;
public class SingleSignOnRegistry {
private static final Map<String, String> USERS_BY_TOKEN = new HashMap<>();
public static void registerToken(String token, String username) {
USERS_BY_TOKEN.put(token, username);
}
public static String getUsernameForToken(String token) {
return USERS_BY_TOKEN.get(token);
}
public static void unregisterToken(String token) {
USERS_BY_TOKEN.remove(token);
}
}
```
这个示例定义了一个 `SingleSignOnRegistry` 类,该类维护了一个将令牌映射到用户名的映射表。你可以使用 `registerToken` 方法将令牌和用户名注册到映射表中,使用 `getUsernameForToken` 方法查询用户名,并使用 `unregisterToken` 方法从映射表中删除令牌。
这是一个非常简单的实现,实际的单点登录系统可能会有更多的功能,例如超时,安全性检查等。
### 回答2:
单点登录(Single Sign-On,简称SSO)是一种让用户只需一次登录就能访问多个相互信任的应用系统的认证机制。下面是一个简单的实现单点登录的Java代码示例。
首先,我们需要一个包含用户信息的Token类:
```java
public class Token {
private String userId;
private long expirationTime;
public Token(String userId, long expirationTime) {
this.userId = userId;
this.expirationTime = expirationTime;
}
// Getters and setters
public boolean isExpired() {
return System.currentTimeMillis() > expirationTime;
}
}
```
接下来,我们创建一个单点登录管理器类,用于管理用户的登录状态:
```java
public class SsoManager {
private static SsoManager instance;
private Map<String, Token> tokenMap;
private SsoManager() {
tokenMap = new ConcurrentHashMap<>();
}
public static synchronized SsoManager getInstance() {
if (instance == null) {
instance = new SsoManager();
}
return instance;
}
public String login(String userId) {
Token token = generateToken(userId);
tokenMap.put(userId, token);
return token.getUserId();
}
public boolean validate(String token) {
Token storedToken = tokenMap.get(token);
if (storedToken != null && !storedToken.isExpired()) {
return true;
}
return false;
}
public void logout(String token) {
tokenMap.remove(token);
}
private Token generateToken(String userId) {
long expirationTime = System.currentTimeMillis() + 86400000; // 24小时过期
return new Token(userId, expirationTime);
}
}
```
最后,我们可以在应用程序中使用这些类来实现单点登录功能:
```java
public class MyApp {
public static void main(String[] args) {
SsoManager ssoManager = SsoManager.getInstance();
// 用户登录,获得token
String token = ssoManager.login("123456");
// 验证token是否有效
boolean isValid = ssoManager.validate(token);
System.out.println("Token是否有效: " + isValid);
// 用户注销
ssoManager.logout(token);
// 再次验证token是否有效
isValid = ssoManager.validate(token);
System.out.println("Token是否有效: " + isValid);
}
}
```
以上代码示例演示了一个简单的单点登录实现,具体的实现方式可以根据实际需求进行调整和扩展。