软件设计实验一

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) 

);  

posted @ 2024-09-10 16:53  芊羽鱼  阅读(7)  评论(0)    收藏  举报