软件设计实验一
User.java
public class User {
private int id;
private String username;
private String password;
private String email;
public User(int id, String username, String password, String email) {
this.id = id;
this.username = username;
this.password = password;
this.email = email;
}
public int getId() {
return id;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public String getEmail() {
return email;
}
}
2. UserRepository.java
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserRepository {
public User loadFromDatabase(String username) {
User user = null;
try (Connection conn = MySQLConnection.getConnection()) {
String query = "SELECT * FROM users WHERE username = ?";
PreparedStatement stmt = conn.prepareStatement(query);
stmt.setString(1, username);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
user = new User(rs.getInt("id"), rs.getString("username"), rs.getString("password"), rs.getString("email"));
}
} catch (SQLException e) {
e.printStackTrace();
}
return user;
}
}
3. Authenticator.java
public class Authenticator {
private UserRepository userRepository;
private SessionManager sessionManager;
private Logger logger;
private EmailNotifier emailNotifier;
public Authenticator(UserRepository userRepository, SessionManager sessionManager, Logger logger, EmailNotifier emailNotifier) {
this.userRepository = userRepository;
this.sessionManager = sessionManager;
this.logger = logger;
this.emailNotifier = emailNotifier;
}
public boolean login(String username, String password) {
User user = userRepository.loadFromDatabase(username);
if (user != null && user.getPassword().equals(password)) {
sessionManager.createSession(user);
logger.log("User " + username + " logged in.");
emailNotifier.sendLoginNotification(user);
return true;
}
logger.log("Failed login attempt for " + username);
return false;
}
public void logout(User user) {
sessionManager.destroySession(user);
logger.log("User " + user.getUsername() + " logged out.");
}
}
4. Logger.java
public class Logger {
public static void log(String info) {
System.out.println("LOG: " + info);
}
}
5. SessionManager.java
import java.util.HashMap;
public class SessionManager {
private static HashMap<String, User> sessions = new HashMap<>();
public static synchronized void createSession(User user) {
sessions.put(user.getUsername(), user);
Logger.log("Session created for " + user.getUsername());
}
public static synchronized void destroySession(User user) {
sessions.remove(user.getUsername());
Logger.log("Session destroyed for " + user.getUsername());
}
}
6. EmailNotifier.java
public class EmailNotifier {
public static void sendLoginNotification(User user) {
// 实际的邮件发送代码
Logger.log("Email notification sent to " + user.getEmail());
}
}
7. MySQLConnection.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class MySQLConnection {
private static final String URL = "jdbc:mysql://localhost:3306/login_db";
private static final String USER = "root
private static final String PASSWORD = "123123
public static Connection getConnection() {
try {
return DriverManager.getConnection(URL, USER, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
}
8. 数据库表结构
CREATE DATABASE login_db;
USE login_db;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(100) NOT NULL,
email VARCHAR(100)
);

浙公网安备 33010602011771号