热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysqljdbc不同权限用户登录_Demo_JDBC_实现一个用户登陆的功能并改进sql的注入问题...

图解如何使用JDBC实现一个用户登陆的功能1、新建一个JavaProject项目2、新建一个User类对应MySQL中的users表packagecom.soar.entity;i

图解如何使用JDBC实现一个用户登陆的功能

f91b0a51bab7d648e3adbb2faa05506c.png

1、新建一个Java Project项目

2、新建一个User类对应MySQL中的users表

15794dcc02ff19c59ea00595b44deb7b.png

package com.soar.entity;

import java.util.Date;

public class User {

private int id;

private String name;

private String password;

private String email;

private Date birthday;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

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;

}

public Date getBirthday() {

return birthday;

}

public void setBirthday(Date birthday) {

this.birthday = birthday;

}

@Override

public String toString() {

return "User [id=" + id + ", name=" + name + ", password=" + password + ", email=" + email + ", birthday="

+ birthday + "]";

}

}

3、新建一个DBUtils类

package com.soar.util;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.ResourceBundle;

public class DBUtils {

private static String driverClass;

private static String url;

private static String user;

private static String password;

static{

ResourceBundle rb = ResourceBundle.getBundle("dbinfo");

//给上面四个变量赋值

driverClass = rb.getString("driverClass");

url = rb.getString("url");

user = rb.getString("user");

password = rb.getString("password");

try {

Class.forName(driverClass);

} catch (Exception e) {

e.printStackTrace();

}

}

//得到连接

public static Connection getConnection() throws Exception{

return DriverManager.getConnection(url, user, password);

}

//关闭资源

public static void closeAll(ResultSet rs,Statement stmt,Connection conn){

if(rs!=null){

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}

rs = null;

}

if(stmt!=null){

try {

stmt.close();

} catch (SQLException e) {

e.printStackTrace();

}

stmt = null;

}

if(conn!=null){

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

conn = null;

}

}

}

4、创建一个properties的配置文件和DBUtils类进行关联

007892a24ce67bce2a11d74bff06fd5c.png

注意:不用加分号

5、创建一个DoLogin类

package com.soar.service;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.Statement;

import com.soar.entity.User;

import com.soar.util.DBUtils;

public class DoLogin {

/**

* 根据用户名和密码查询用户对象信息

*@param name

*@param pwd

*@return u

*/

public User findUser(String name, String pwd){

Connection conn = null;

Statement stmt = null;

ResultSet rs = null;

User u = null;

try {

conn = DBUtils.getConnection(); //得到连接对象

stmt = conn.createStatement(); //得到执行sql语句的对象

rs = stmt.executeQuery("SELECT * FROM users WHERE NAME='"+name+"' AND PASSWORD='"+pwd+"'"); //执行sql语句

if(rs.next()){

u = new User();

u.setId(rs.getInt(1));

u.setName(rs.getString(2));

u.setPassword(rs.getString(3));

u.setEmail(rs.getString(4));

u.setBirthday(rs.getDate(5));

}

} catch (Exception e) {

e.printStackTrace();

}finally{

DBUtils.closeAll(rs, stmt, conn);

}

return u;

}

}

注意事项:在调用executeQuery()方法时,括号中的sql语句应该在SQLyog中写完后复制到MyEclipse中,因为如果在ME中写sql语句即使写错了,编译器也不会报错。

6、创建一个Login类

package com.soar.client;

import java.util.Scanner;

import com.soar.entity.User;

import com.soar.service.DoLogin;

public class Login {

public static void main(String[] args) {

Scanner input = new Scanner(System.in);

System.out.println("请输入用户名:");

String name = input.nextLine();

System.out.println("请输入密码:");

String pwd = input.nextLine();

DoLogin dl = new DoLogin();

User user = dl.findUser(name, pwd); //调用查询用户的方法

if(user!=null){

System.out.println("欢迎你:"+user.getName());

}else{

System.out.println("用户名和密码错误!");

}

}

}

7、运行Login类

MySQL中的数据表

3ad42d6f000b92c525ebb1377e3f7346.png

Console中输入正确的信息

f0a1fb4fcac29a919564c83447d3fa5a.png

Console中输入错误的信息

ea19445793d173a4e526a7417ed896d7.png

8、在 DoLogin类中程序代码不完善,存在sql注入问题

当任意输入一个用户名后,在输入密码时填写如下语句会把

所有的数据库信息都调出来

请输入用户名:

sdaf

请输入密码:

fdsa ' or '1'='1

13c82ce32bcd2a9d14d732fccc11239b.png

bc0986e751b28a0fd9b1312de7c4f432.png

解决方法:使用preparedStatement来代替Statement

preparedStatement:预编译对象, 是Statement对象的子类。

特点:

性能要高

会把sql语句先编译

sql语句中的参数会发生变化,过滤掉用户输入的关键字。

f456cdb6b21a41ba17e3f47c4488daff.png

fedb97620de9e5e2e96d13ceaccab02d.png

改进后的DoLogin类代码:

package com.soar.service;

import java.sql.Connection;

import java.sql.ResultSet;

import com.mysql.jdbc.PreparedStatement;

import com.soar.entity.User;

import com.soar.util.DBUtils;

public class DoLogin {

/**

* 根据用户名和密码查询用户对象信息

*@param name

*@param pwd

*@return u

*/

public User findUser(String name, String pwd){

Connection conn = null;

PreparedStatement stmt = null;

ResultSet rs = null;

User u = null;

try {

conn = DBUtils.getConnection(); //得到连接对象

String sql = "SELECT * FROM users WHERE NAME=? AND PASSWORD=?";

stmt = (PreparedStatement) conn.prepareStatement(sql); //得到执行sql语句的对象

//给?赋值

stmt.setString(1, name);

stmt.setString(2, pwd);

rs = stmt.executeQuery(); //执行sql语句

if(rs.next()){

u = new User();

u.setId(rs.getInt(1));

u.setName(rs.getString(2));

u.setPassword(rs.getString(3));

u.setEmail(rs.getString(4));

u.setBirthday(rs.getDate(5));

}

} catch (Exception e) {

e.printStackTrace();

}finally{

DBUtils.closeAll(rs, stmt, conn);

}

return u;

}

}

aa5f6b03578e11f0dfbd2bf3356c0d59.png



推荐阅读
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
author-avatar
LeonaL_1巛980
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有