Java实现数据库验证登录功能 (java登录数据库验证)
在web开发中,验证登录是必不可少的环节之一,而数据库验证是最常用的认证方式。本文将介绍如何使用Java实现基于数据库的验证登录功能。我们将使用Java Web开发框架,结合MySQL数据库实现用户的身份验证。
1. 数据库设计
要实现数据库验证登录功能,首先需要设计一个用户表来存储用户信息,包括用户名和密码。以下是示例用户表的结构:
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
以上是一个基本的用户表定义。在表中,username是用户的登录名,password是加密后的密码,id是主键。
2. Java Web项目搭建
我们将使用Spring Boot开发Web应用,Spring Boot是一种快速开发的Java Web应用开发框架,可以简化了开发过程。在搭建Java Web项目之前,需要确保已安装JDK、Eclipse和Maven。
下面是使用Spring Initializr创建项目的步骤:
1. 打开 Eclipse
2. 选择 File->New->Other,然后选择下列的选项:Spring starter project
3. 填写以下信息:
– Project name: 登录验证
– Group: 输入你的公司名称
– Artifact: 输入项目名称
– Package name: 输入你的项目包名
– Packaging: WAR
– Java Version: 选择你的JDK版本
– Dependencies: 选择Spring Web和MySQL
在创建项目后,打开src/mn/resources/application.properties文件,编辑以下连接数据库的信息:
spring.datasource.url=jdbc:mysql://localhost:3306/login_validation
spring.datasource.username=root
spring.datasource.password=123456
在本例中,我们假设数据库名为login_validation,用户名为root,密码为123456。
3. 创建用户服务并进行身份验证
我们先创建一个UserService类,用来管理用户相关操作:
@Service
public class UserService {
@Autowired
private JdbcTemplate jdbcTemplate;
public boolean userExist(String username, String password) {
String query = “SELECT * FROM users WHERE username=? AND password=?”;
List> users = jdbcTemplate.queryForList(query, new Object[] { username, password });
if (users != null && users.size() != 0) {
return true;
}
return false;
}
}
在userExist方法中,我们通过传递用户名(username)和密码(password)到数据库查询用户记录,如果查询到用户,则返回true,否则返回false。
首先我们可以测试这个方法,确保能正确地进行身份验证。下面是主要代码:
@RestController
@RequestMapping(“/”)
public class MnController {
@Autowired
UserService userService;
@PostMapping(“/login”)
public String login(@RequestBody LoginRequest request) {
if (userService.userExist(request.getUsername(), request.getPassword())) {
return “Success”;
}
return “Fled”;
}
}
这是一个RESTful的API,可以通过发送一个POST请求 /login,传递一个ON格式的参数:
{
“username”: “admin”,
“password”: “password”
}
login方法根据传递的参数调用UserService中的userExist方法进行身份验证,如果成功返回”Success”,否则返回”Fled”。
我们可以使用Postman测试以上功能,发送请求并检查返回值。
4. 前端实现登录页面
在前端,我们要提供一个基于HTML的登录页面,用户可以在该页面中输入用户名和密码并提交到服务器进行身份验证。我们使用Bootstrap实现用户界面快速搭建。
以下是主要的HTML代码:
Login Form
$(“#login-form”).submit(function(event) {
event.preventDefault();
var form = $(this);
var url = form.attr(‘action’);
$.ajax({
type: “POST”,
url: url,
data: form.serialize(),
success: function(data)
{
if (data === “Success”) {
alert(“Login success!”);
} else {
alert(“Invalid username or password.”);
}
},
error: function() {
alert(“Error occurred.”);
}
});
});
当用户提交表单时,通过Ajax发送POST请求到服务器进行身份验证。如果登录成功,则显示一个消息窗口,否则会提示“无效的用户名或密码”。
结论
相关问题拓展阅读:
- 初学 java b1.addActionListener(new ActionListener() { }); 数据库验证登录 代码如何写?求教
- java做的一个登陆界面 怎么连接上数据库来判断是不是用户并登陆
- java登录模块验证出现问题求解答
初学 java b1.addActionListener(new ActionListener() { }); 数据库验证登录 代码如何写?求教
再写一个SQL查询类 将填入的用户名传入该类在数据库中查询密码
然后将填入的密码和查询到的密码比较即可
匹配则登录
下载个组件:sqljdbc4.jar ,具体用法百度一下
加入 引用语句
import java.sql.*;
对按钮的事件处理代码如下:
b1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent Event)
{
public Connection conn=null;
public Statement stmt=null;
public ResultSet rs=null;
private String url=”jdbc: //StuManage 是数据库的名称
private String driver=”com.microsoft.sqlserver.jdbc.SQLServerDriver”;
private String user=”sa”; //数据库的用户名
private String password=”123″; //数据库链接密码
try{
Class.forName(driver);
}catch(Exception e){
e.printStackTrace();
System.out.println(“数据库加载驱动出了问题!!”);
}
try {
conn=DriverManager.getConnection(url,user,password);
} catch (Exception e) {
e.printStackTrace();
System.out.println(“数据库链接出了问题!!”);
}
try {
String sSQL=”select * from User where name='”+jt.getText()+“’ and pwd='”+jp.getText()+“'”; rs=stmt.executeQuery(sSQL);
if(rs.next()){
System.out.println(“验证成功!”);
}
else{
System.out.println(“验证失败!”);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
java做的一个登陆界面 怎么连接上数据库来判断是不是用户并登陆
看起来不难啊,棚孝晌你意思之需要实现一个登陆而已吧? 其实你用户都之需要存一张表中,链锋加一个标记就好了,比如学生是1,老师是2,管理员慎激是3,登陆以后你只需要在session存入然后就可以在页面中判断他的身份了
一个最简单的方法。。将三张表合成一张表巧伏磨,里面加个字段SorTorA,值为:学生/教师/管理员之一孝斗,查询数据库的时候顺便把SorTorA的值传给登陆后台判断是什么厅灶就进什么界面
通过你写的信息 我说一下自己的想法
首先 输入用户名,密码 然后你要到三个表中进行信息验证,也就是说 你要在进行验证之前就知道了 输入用户名的身份:1.在输入界面 设置一个单项选择 让用户选择 身份,核闭从而确定困尘 在哪一个表中去进行验证。
2.通过用户名来进行限制,比如汪氏禅在用户名中以00,01,02来进行标注,以此来进行身份区分,从而到不同的表中进行验证
提交数据之后在后台判断啊
java登录模块验证出现问题求解答
前期准备
首先要先明确有个大体的思路,要实现什么样的功能,了解完成整个模块要运用到哪些方面的知识,以及从做的过程中去发现自己的不足。技术方面的进步大都都需要从实践中出来的。
功能:用户注册功能+系统登录功能+生成验证码
知识:窗体设计、数据库设计、JavaBean封装属性、JDBC实现对数据库的连接、验证码(包括彩色验证码)生成技术,还有就些比如像使用正则表达式校验用户注册信息、随机获得字符串、对文本可用字符数的控制等
设计的模块预览图:
彩色验证码预览图:
所用数据库:MySQL
数据库设计
创建一个数据库db_database01,其中包含一个表格tb_user,用来保存用户的注册的数据。
其中包含4个字段
id int(11)
username varchar(15)
password varchar(20)
email varchar(45)
MySQL语句可以这样设计:
create schema db_database01;
use db_database01;
create table tb_user(
id int(11) not null auto_increment primary key,
username varchar(15) not null,
password varchar(20) not null,
email varchar(45) not null
);
insert into tb_user values(1,”lixiyu”,”lixiyu”,);
这样把lixiyu作为用户名。
select语句检查一下所建立的表格:
编写JavaBean封装用户属性
package com.lixiyu.model;
public class User {
private int id;// 编号
private String username;// 用户名
private String password;// 密码
private String email;// 电子邮箱
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
编写JDBC工具类
将与数据库操作相关的代码放置在DBConfig接口和DBHelper类中
DBConfig接口用于保存数据库、用户名和密码信息
代码:
package com.lixiyu.util;
public interface DBConfig {
String databaseName = “db_database01”;// 数据库名称
String username = “root”;// 数据库用户名
String password = “lixiyu”;// 数据库密码
}
为简化JDBC开发,DBHelper使用了了Commons DbUtil组合。
DBHelper类继承了DBConfig接口,该类中包含4种方法:
(1)getConnection()方法:获得数据库连接,使用MySQL数据源来简化编程,避免因加载数据库驱动而发生异常。
(2)exists()方法:判断输入的用户名是否存在。
(3)check()方法:当用户输入用户名和密码,查询使用check()方法是否正确。
(4)save()方法:用户输入合法注册信息后,,将信息进行保存。
详细代码:
package com.lixiyu.util;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.apache.commons.lang.StringEscapeUtils;
import com.lixiyu.model.User;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
public class DBHelper implements DBConfig {
/*
* 使用MySQL数据源获得数据库连接对象
*
* @return:MySQL连接对象,如果获得失败返回null
*/
public static Connection getConnection() {
MysqlDataSource mds = new MysqlDataSource();// 创建MySQL数据源
mds.setDatabaseName(databaseName);// 设置数据库名称
mds.setUser(username);// 设置数据库用户名
mds.setPassword(password);// 设置数据库密码
try {
return mds.getConnection();// 获得连接
} catch (SQLException e) {
e.printStackTrace();
}
return null;// 如果获取失败就返回null
}
/*
* 判断指定用户名的用户是否存在
*
* @return:如果存在返回true,不存在或者查询失败返回false
*/
public static boolean exists(String username) {
QueryRunner runner = new QueryRunner();// 创建QueryRunner对象
String sql = “select id from tb_user where username = ‘” + username + “‘;”;// 定义查询语句
Connection conn = getConnection();// 获得连接
ResultSetHandler> rsh = new ColumnListHandler();// 创建结果集处理类
try {
List result = runner.query(conn, sql, rsh);// 获得查询结果
if (result.size() > 0) {// 如果列表中存在数据
return true;// 返回true
} else {// 如果列表中没有数据
return false;// 返回false
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtils.closeQuietly(conn);// 关闭连接
}
return false;// 如果发生异常返回false
}
/*
* 验证用户名和密码是否正确 使用Commons Lang组件转义字符串避免SQL注入
*
* @return:如果正确返回true,错误返回false
*/
public static boolean check(String username, char password) {
username = StringEscapeUtils.escapeSql(username);// 将用户输入的用户名转义
QueryRunner runner = new QueryRunner();// 创建QueryRunner对象
String sql = “select password from tb_user where username = ‘” + username + “‘;”;// 定义查询语句
Connection conn = getConnection();// 获得连接
ResultSetHandler rsh = new ScalarHandler();// 创建结果集处理类
try {
String result = (String) runner.query(conn, sql, rsh);// 获得查询结果
char queryPassword = result.toCharArray();// 将查询到得密码转换成字符数组
if (Arrays.equals(password, queryPassword)) {// 如果密码相同则返回true
Arrays.fill(password, ‘0’);// 清空传入的密码
Arrays.fill(queryPassword, ‘0’);// 清空查询的密码
return true;
} else {// 如果密码不同则返回false
Arrays.fill(password, ‘0’);// 清空传入的密码
Arrays.fill(queryPassword, ‘0’);// 清空查询的密码
return false;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtils.closeQuietly(conn);// 关闭连接
}
return false;// 如果发生异常返回false
}
/*
* 保存用户输入的注册信息
*
* @return:如果保存成功返回true,保存失败返回false
*/
public static boolean save(User user) {
QueryRunner runner = new QueryRunner();// 创建QueryRunner对象
String sql = “insert into tb_user (username, password, email) values (?, ?, ?);”;// 定义查询语句
Connection conn = getConnection();// 获得连接
Object params = { user.getUsername(), user.getPassword(), user.getEmail() };// 获得传递的参数
try {
int result = runner.update(conn, sql, params);// 保存用户
if (result > 0) {// 如果保存成功返回true
return true;
} else {// 如果保存失败返回false
return false;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtils.closeQuietly(conn);// 关闭连接
}
return false;// 如果发生异常返回false
}
}
系统登录
1.1窗体设计
使用BoxLayout布局,将控件排列方式设置从上至下:
复制代码代码如下:
contentPane.setLayout(new BoxLayout(contentPane,BoxLayout.PAGE_AXIS));
窗体使用了标签、文本域、密码域和按钮等控件
实现代码:
public class login extends JFrame{
private static final long serialVersionUID =L;
private JPanel contentPane;
private JTextField usernameTextField;
private JPasswordField passwordField;
private JTextField validateTextField;
private String randomText;
public static void main(String args){
try {
UIManager.setLookAndFeel(“com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel”);
} catch (Throwable e) {
e.printStackTrace();
}
EventQueue.invokeLater(new Runnable(){
public void run(){
try{
login frame=new login();
frame.setVisible(true);
}catch(Exception e){
e.printStackTrace();
}
}
});
}
public login(){
setTitle(“系统登录”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPane=new JPanel();
setContentPane(contentPane);
contentPane.setLayout(new BoxLayout(contentPane,BoxLayout.PAGE_AXIS));
JPanel usernamePanel=new JPanel();
contentPane.add(usernamePanel);
JLabel usernameLable=new JLabel(“\u7528\u6237\u540D\uFF1A”);
usernameLable.setFont(new Font(“微软雅黑”, Font.PLAIN, 15));
usernamePanel.add(usernameLable);
usernameTextField=new JTextField();
usernameTextField.setFont(new Font(“微软雅黑”, Font.PLAIN, 15));
usernamePanel.add(usernameTextField);
usernameTextField.setColumns(10);
JPanel passwordPanel = new JPanel();
contentPane.add(passwordPanel);
JLabel passwordLabel = new JLabel(“\u5BC6 \u7801\uFF1A”);
passwordLabel.setFont(new Font(“微软雅黑”, Font.PLAIN, 15));
passwordPanel.add(passwordLabel);
passwordField = new JPasswordField();
passwordField.setColumns(10);
passwordField.setFont(new Font(“微软雅黑”, Font.PLAIN, 15));
passwordPanel.add(passwordField);
JPanel validatePanel = new JPanel();
contentPane.add(validatePanel);
JLabel validateLabel = new JLabel(“\u9A8C\u8BC1\u7801\uFF1A”);
validateLabel.setFont(new Font(“微软雅黑”, Font.PLAIN, 15));
validatePanel.add(validateLabel);
validateTextField = new JTextField();
validateTextField.setFont(new Font(“微软雅黑”, Font.PLAIN, 15));
validatePanel.add(validateTextField);
validateTextField.setColumns(5);
randomText = RandomStringUtils.randomAlphanumeric(4);
CAPTCHALabel label = new CAPTCHALabel(randomText);//随机验证码
label.setFont(new Font(“微软雅黑”, Font.PLAIN, 15));
validatePanel.add(label);
JPanel buttonPanel=new JPanel();
contentPane.add(buttonPanel);
JButton submitButton=new JButton(“登录”);
submitButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
do_submitButton_actionPerformed(e);
}
});
submitButton.setFont(new Font(“微软雅黑”, Font.PLAIN, 15));
buttonPanel.add(submitButton);
JButton cancelButton=new JButton(“退出”);
cancelButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
do_cancelButton_actionPerformed(e);
}
});
cancelButton.setFont(new Font(“微软雅黑”,Font.PLAIN,15));
buttonPanel.add(cancelButton);
pack();// 自动调整窗体大小
setLocation(com.lixiyu.util.SwingUtil.centreContainer(getSize()));// 让窗体居中显示
}
窗体居中显示:
public class SwingUtil {
/*
* 根据容器的大小,计算居中显示时左上角坐标
*
* @return 容器左上角坐标
*/
public static Point centreContainer(Dimension size) {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();// 获得屏幕大小
int x = (screenSize.width – size.width) / 2;// 计算左上角的x坐标
int y = (screenSize.height – size.height) / 2;// 计算左上角的y坐标
return new Point(x, y);// 返回左上角坐标
}
}
1.2获取及绘制验证码
public class CAPTCHALabel extends JLabel {
private static final long serialVersionUID =793615L;
private String text;// 用于保存生成验证图片的字符串
public CAPTCHALabel(String text) {
this.text = text;
setPreferredSize(new Dimension(60, 36));// 设置标签的大小
}
@Override
public void paint(Graphics g) {
super.paint(g);// 调用父类的构造方法
g.setFont(new Font(“微软雅黑”, Font.PLAIN, 16));// 设置字体
g.drawString(text, 5, 25);// 绘制字符串
}
}
*彩色验证码:
public class ColorfulCAPTCHALabel extends JLabel {
private static final long serialVersionUID =793615L;
private String text;// 用于保存生成验证图片的字符串
private Color colors = { Color.BLACK, Color.BLUE, Color.CYAN, Color.DARK_GRAY, Color.GRAY, Color.GREEN, Color.LIGHT_GRAY, Color.MAGENTA, Color.ORANGE,
Color.PINK, Color.RED, Color.WHITE, Color.YELLOW };// 定义画笔颜色数组
public ColorfulCAPTCHALabel(String text) {
this.text = text;
setPreferredSize(new Dimension(60, 36));// 设置标签的大小
}
@Override
public void paint(Graphics g) {
super.paint(g);// 调用父类的构造方法
g.setFont(new Font(“微软雅黑”, Font.PLAIN, 16));// 设置字体
for (int i = 0; i
g.setColor(colors);
g.drawString(“” + text.charAt(i), 5 + i * 13, 25);// 绘制字符串
}
}
关于java登录数据库验证的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。