请问哪位大神可以帮在下写一个mysql+jdbc的简单的用户权限管理小项目,可以的话
加q1009647267细谈
以下是使用 MySQL 和 JDBC 实现简单用户权限管理的示例项目:
在 MySQL 中创建相关用户和权限表结构:
CREATE TABLE users (
id INT(11) PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(50) NOT NULL,
email VARCHAR(50) NOT NULL
);
CREATE TABLE roles (
id INT(11) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL UNIQUE
);
CREATE TABLE permissions (
id INT(11) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL UNIQUE
);
CREATE TABLE users_roles (
user_id INT(11) NOT NULL,
role_id INT(11) NOT NULL,
PRIMARY KEY (user_id, role_id),
FOREIGN KEY (user_id) REFERENCES users (id),
FOREIGN KEY (role_id) REFERENCES roles (id)
);
CREATE TABLE roles_permissions (
role_id INT(11) NOT NULL,
permission_id INT(11) NOT NULL,
PRIMARY KEY (role_id, permission_id),
FOREIGN KEY (role_id) REFERENCES roles (id),
FOREIGN KEY (permission_id) REFERENCES permissions (id)
);
用户登录和注册操作,可以用 Java 代码实现。下面是一个示例代码:
import java.sql.*;
public class UserAuth {
// 数据库连接信息
private static final String DB_URL = "jdbc:mysql://127.0.0.1:3306/test";
private static final String DB_USERNAME = "root";
private static final String DB_PASSWORD = "password";
// 数据库表名
private static final String TABLE_NAME = "users";
// 查询用户信息
public static int[] auth(String username, String password) {
int[] result = new int[2];
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);
String sql = "SELECT id, password FROM " + TABLE_NAME + " WHERE username = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username);
rs = pstmt.executeQuery();
if (rs.next()) {
if (rs.getString("password").equals(password)) {
result[0] = rs.getInt("id");
result[1] = 1;
} else {
result[1] = -1;
}
} else {
result[1] = 0;
}
} catch (SQLException se) {
se.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null) rs.close();
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (SQLException se) {
se.printStackTrace();
}
}
return result;
}
// 添加新用户
public static boolean register(String username, String password, String email) {
Connection conn = null;
PreparedStatement pstmt = null;
boolean result = false;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);
conn.setAutoCommit(false);
String sql = "INSERT INTO " + TABLE_NAME + " (username,password,email) VALUES (?,?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, password);
pstmt.setString(3, email);
pstmt.executeUpdate();
conn.commit();
result = true;
} catch (SQLException se) {
try {
conn.rollback();
} catch (SQLException sqle) {
sqle.printStackTrace();
}
se.printStackTrace();
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException se) {
se.printStackTrace();
}
e.printStackTrace();
} finally {
try {
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (SQLException se) {
se.printStackTrace();
}
}
return result;
}
}
下面是 Java 代码示例实现角色和权限管理:
import java.sql.*;
public class RoleAuth {
// 数据库连接信息
private static final String DB_URL = "jdbc:mysql://127.0.0.1:3306/test";
private static final String DB_USERNAME = "root";
private static final String DB_PASSWORD = "password";
// 查询用户角色
public static String[] getRoles(int userId) {
String[] result = new......
// 角色名称数组
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);
String sql = "SELECT r.name FROM roles r INNER JOIN users_roles ur ON r.id = ur.role_id WHERE ur.user_id = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, userId);
rs = pstmt.executeQuery();
List<String> list = new ArrayList<>();
while (rs.next()) {
list.add(rs.getString("name"));
}
result = list.toArray(new String[list.size()]);
} catch (SQLException se) {
se.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null) rs.close();
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (SQLException se) {
se.printStackTrace();
}
}
return result;
}
// 查询用户权限
public static String[] getPermissions(int userId) {
String[] result = new String[0];
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);
String sql = "SELECT p.name FROM permissions p INNER JOIN roles_permissions rp ON p.id = rp.permission_id INNER JOIN roles r ON rp.role_id = r.id INNER JOIN users_roles ur ON r.id = ur.role_id WHERE ur.user_id = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, userId);
rs = pstmt.executeQuery();
List<String> list = new ArrayList<>();
while (rs.next()) {
list.add(rs.getString("name"));
}
result = list.toArray(new String[list.size()]);
} catch (SQLException se) {
se.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null) rs.close();
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (SQLException se) {
se.printStackTrace();
}
}
return result;
}
}
使用上面的代码,您可以查询用户的角色和权限信息。请注意,这里可以将用户信息的查询结果作为参数传递给这些方法。
这只是一个基本的示例项目,您可以据此扩展代码以支持更多的用户和权限管理功能。同时,您也可以基于这个项目,使用任何其他框架来实现更强大的用户权限管理系统。