不积跬步无以至千里,不积细流,无以成江河!
1.工具类Utils,用来驱动连接数据库
package com.jdbc.bookSystem.Utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Utils {
private static String driver="com.mysql.jdbc.Driver";
private static String url = "jdbc:mysql://localhost:3306/test1";
private static String username = "root";
private static String passwod = "123456";
public static Connection connection() throws ClassNotFoundException, SQLException {
Class.forName(driver);
return DriverManager.getConnection(url, username, passwod);
}
}
2.随机数生成包RandomStringUtils,用来生成随机字符串
package com.jdbc.bookSystem.Utils;
import java.util.Random;
public class RandomStringUtils {
public static String getRandomString(int length){
String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
Random random=new Random();
StringBuffer sb=new StringBuffer();
for(int i=0;i<length;i++){
int number=random.nextInt(62);
sb.append(str.charAt(number));
}
return sb.toString();
}
}
3.hash加密包SHA256Utils,用来生成哈希码
package com.jdbc.bookSystem.Utils;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class SHA256Utils {
/**
* 利用java原生的类实现SHA256加密
* @param str 参数拼接的字符串
* @return
*/
public static String getSHA256(String str) {
MessageDigest messageDigest;
String encodeStr = "";
try {
messageDigest = MessageDigest.getInstance("SHA-256");
messageDigest.update(str.getBytes("UTF-8"));
encodeStr = byte2Hex(messageDigest.digest());
} catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
e.printStackTrace();
}
return encodeStr;
}
/**
* 将byte转为16进制
*
* @param bytes
* @return
*/
private static String byte2Hex(byte[] bytes) {
StringBuilder sb = new StringBuilder();
String temp = null;
for (byte aByte : bytes) {
temp = Integer.toHexString(aByte & 0xFF);
if (temp.length() == 1) {
// 1得到一位的进行补0操作
sb.append("0");
}
sb.append(temp);
}
return sb.toString();
}
}
4.Model实体类
package com.jdbc.bookSystem.Model;
public class Book {
private long id;
private String bookname;
private String author;
private double price;
private long readerId;
public Book(){
}
public Book(long id, String bookname, String author, double price, long readerId) {
this.id = id;
this.bookname = bookname;
this.author = author;
this.price = price;
this.readerId = readerId;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getBookname() {
return bookname;
}
public void setBookname(String bookname) {
this.bookname = bookname;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public long getReaderId() {
return readerId;
}
public void setReaderId(long readerId) {
this.readerId = readerId;
}
@Override
public String toString() {
return "Book{" +
"id=" + id +
", bookname='" + bookname + '\'' +
", author='" + author + '\'' +
", price=" + price +
", readerId=" + readerId +
'}';
}
}
package com.jdbc.bookSystem.Model;
public class Reader {
private long id;
private String username;
private String salt;
private String hash;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSalt() {
return salt;
}
public void setSalt(String salt) {
this.salt = salt;
}
public String getHash() {
return hash;
}
public void setHash(String hash) {
this.hash = hash;
}
public Reader(long id, String username, String salt, String hash) {
this.id = id;
this.username = username;
this.salt = salt;
this.hash = hash;
}
}
5.dao层,对数据库操作
package com.jdbc.bookSystem.Dao;
import com.jdbc.bookSystem.Model.Reader;
import com.jdbc.bookSystem.Utils.Utils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* @author zyh
* @items
* @create 2021/7/27
*/
public class ReaderDao {
//插入数据
public boolean insert(Reader reader) {
Connection connection = null;
PreparedStatement preparedStatement = null;
//1.获取连接
try {
connection = Utils.connection();
//2.定义SQL语句
String sql = "insert into reader values(null,?,?,?)";
//3.预编译SQL
preparedStatement = connection.prepareStatement(sql);
//4.处理占位符
//Reader reader1 = new Reader();
preparedStatement.setString(1, reader.getUsername());
preparedStatement.setString(2, reader.getSalt());
preparedStatement.setString(3, reader.getHash());
//4.执行诗SQL
int execute = preparedStatement.executeUpdate();
if (execute==1) {
return true;
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {//5.关闭资源
preparedStatement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return false;
}
//查找
public Reader select(String username){
try {
Connection connection = Utils.connection();
String sql="select*from reader where username=?";
//预编译SQL
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//填充占位符
preparedStatement.setString(1,username);
//执行SQL
ResultSet resultSet = preparedStatement.executeQuery();
//判断返回集
while (resultSet.next()){
//获取查询到的值,reader对象获取
Reader reader = new Reader();
reader.setId(resultSet.getInt("id"));
reader.setUsername(resultSet.getString("username"));
reader.setHash(resultSet.getString("hash"));
reader.setSalt(resultSet.getString("salt"));
return reader;
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}
6.控制层
package com.jdbc.bookSystem.Controller;
import com.jdbc.bookSystem.Dao.ReaderDao;
import com.jdbc.bookSystem.Model.Reader;
import com.jdbc.bookSystem.Utils.RandomStringUtils;
import com.jdbc.bookSystem.Utils.SHA256Utils;
import java.util.Scanner;
/**
* @author zyh
* @items
* @create 2021/7/27
*/
public class ReaderControllr {
private Scanner scanner = new Scanner(System.in);
private ReaderDao readerDao=new ReaderDao();
/**
* 注册
*/
public void logon() {
Reader reader = new Reader();
System.out.println("输入用户名:");
reader.setUsername(scanner.next());
//String username = scanner.next();
System.out.println("请输入密码:");
String pwd=scanner.next();
//使用工具类生成16位字符串的随机数即盐值
String salt = RandomStringUtils.getRandomString(16);
//把输出的明文密码和随机字符串拼接生成哈希盐码,(称为注册密码—不太稳妥)
String Hashpassword= SHA256Utils.getSHA256(pwd+salt);
//调用Reader对象,给用户直和密码赋值
reader.setHash(Hashpassword);
reader.setSalt(salt);
if (!readerDao.insert(reader)){
System.out.println("注册成功");
throw new RuntimeException("注册失败");
}
}
/**]
* 登录
*/
public boolean login(){
System.out.println("输入用户名:");
String username = scanner.next();
System.out.println("请输入密码:");
String pwd=scanner.next();
//创建ReaderDao对象,调用查找方法
Reader selectReader=readerDao.select(username);
//把输入的明码和查找得到的盐值拼接生成哈希码,成为输入密码
String inputhash=SHA256Utils.getSHA256(pwd+selectReader.getSalt());
//如果输入密码与所查得到的哈希码(注册密码)相相等,则登录成功
if (inputhash.equals(selectReader.getHash())){
System.out.println("登陆成功");
return true;
}else {
System.out.println("登陆失败");
return false;
}
}
}
7.实现类
package com.jdbc.bookSystem.View;
import com.jdbc.bookSystem.Controller.ReaderControllr;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
ReaderControllr readerControllr = new ReaderControllr();
System.out.println("******欢迎来到图书管理系统*******");
Scanner scanner = new Scanner(System.in);
System.out.println("请选择你要进行的操作:1.登录 2.注册");
System.out.println("请输入数字:");
int falg=scanner.nextInt();
switch(falg){
case 1:
boolean loginFlog=readerControllr.login();
if (loginFlog){
break;
}else{
}
break;
case 2:
readerControllr.logon();
break;
}
}
}
未完待续.......