JDBC—用户登录功能的实现

ops/2024/10/19 9:34:01/

 实现功能:


1、需求:

        模拟用户登录功能


 2、业务描述:

         程序运行时,提供一个输入的入口,可以让用户输入用户名和密码
        用户输入用户名和密码之后,提交信息,java程序收集到用户信息
        java程序连接数据库验证用户名和密码是否合法
        合法显示登录成功
        不合法:显示登录失败


   3、数据的准备:

           在实际开发中,表的设计会使用专业的建模工具,建模工具:PowerDesigner
           使用PD工具进行数据库表的设计

代码如下: 
  

java">import java.sql.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;public class Demo01 {public static void main(String[] args) {//初始化界面Map<String,String> userLoginInfo = initUI();//验证用户名和密码boolean loginSuccess = login(userLoginInfo);//输出最终结果System.out.println(loginSuccess ? "登录成功!":"登录失败!");}/**** @param userLoginInfo 用户登录信息* @return false代表失败  true代表成功*/private static boolean login(Map<String, String> userLoginInfo) {//打标记boolean loginSuccess = false;//定义用户名密码的变量String loginName = userLoginInfo.get("loginName");String loginPwd = userLoginInfo.get("loginPwd");//JDBC代码Connection conn = null;Statement stmt = null;ResultSet rs = null;try {//1.注册驱动Class.forName("com.mysql.jdbc.Driver");//2.获取连接conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode","root","333");//3.获取数据库操作对象stmt = conn.createStatement();//4.执行SQL语句
//          语句1,将变量直接嵌入SQL语句中,或者定义变量
//            String sql = "select * from t_user where loginName = '"+userLoginInfo.get("loginName")+"' and" +
//                    " loginPwd = '"+userLoginInfo.get("loginPwd")+"'";String sql = "select * from t_user where loginName = '"+loginName+"' and" + " loginPwd = '"+loginPwd+"'";//以上正好完成了sql语句的拼接,以下代码的含义是,发送sql语句给DBMS,DBMS进行sql编译//正好将用户提供的"非法信息"编译进去,导致了原来的SQL语句的含义被扭曲rs = stmt.executeQuery(sql);//5.处理结果集if(rs.next()){//登录成功loginSuccess = true;}} catch (Exception e) {e.printStackTrace();}finally {//6.释放资源if (rs != null){try {rs.close();}catch (SQLException e){e.printStackTrace();}}if (stmt != null){try {stmt.close();}catch (SQLException e){e.printStackTrace();}}if (conn != null){try {conn.close();}catch (SQLException e){e.printStackTrace();}}}return loginSuccess;}/** 初始化用户界面* @return   用户输入的用户名和密码等信息* */private static Map<String, String> initUI() {Scanner s = new Scanner(System.in);System.out.println("用户名:");String loginName = s.nextLine();System.out.println("密码:");String loginPwd = s.nextLine();Map<String,String > userLoginInfo = new HashMap<>();userLoginInfo.put("loginName",loginName);userLoginInfo.put("loginPwd",loginPwd);return userLoginInfo;}
}

4、当前程序存在的问题


            用户名:fdda
            密码:fdda ' or'1'='1
            登录成功!
           这种现象被称为SQL注入
    


    5、导致sQL注入的根本原因是什么?


            用户输入的信息中含有sq语句的关键字,并且这些关键字参与sql语句的编译过程
            导致sq1语句的原意被扭曲,进而造成了sql注入。
   


http://www.ppmy.cn/ops/35023.html

相关文章

GitHacker:Git源码泄漏检测工具可恢复整个Git Repo

GitHacker是一个多线程工具&#xff0c;用于检测站点是否存在git源码泄漏&#xff0c;并能够将网站源代码下载到本地。值得一提的是&#xff0c;这个工具会将整个git repo恢复到本地&#xff0c;而不是像[githack]那样&#xff0c;只是简单的恢复到最新版本。如此一来&#xff…

算法训练营day31

一、贪心算法理论基础 在问题的每个决策阶段&#xff0c;都选择当前看起来最优的选择&#xff0c;即贪心地做出局部最优的决策&#xff0c;以期获得全局最优解。 最好用的策略就是举反例&#xff0c;如果想不到反例&#xff0c;那么就试一试贪心吧。 动态规划和贪心的区别 …

MoonBit 周报 Vol.39:新增 JS 后端、插件和构建系统同步支持多后端开发……

MoonBit 更新 新增JavaScript后端 目前MoonBit已新增对JavaScript的支持并带来前所未有的性能提升&#xff0c;在JS后端实现了超出Json5近8倍性能的优势。更详细的介绍可以看一下这篇文章&#xff1a;IDEA研究院编程语言MoonBit发布JavaScript后端&#xff0c;速度提升25倍 …

为什么技术面一般不谈薪资?

我这些年做了很招聘工作&#xff0c;一般都被告知在技术面时不谈论薪资。 其实我一直觉得挺麻烦的&#xff0c;这人不就是我决定要不要吗&#xff1f; 我除了评估技术能力是否合格&#xff0c;再根据开价情况来做决定不就完事吗。每次面完我再等着HR去谈完薪资&#xff0c;然…

基于EWT联合SVD去噪

一、代码原理 &#xff08;1&#xff09;基于EWT-SVD的信号去噪算法原理 经验小波变换&#xff08;Empirical Wavelet Transform&#xff0c;EWT&#xff09;&#xff1a;EWT是一种基于信号局部特征的小波变换方法&#xff0c;能够更好地适应非线性和非平稳信号的特性。奇异值…

与Apollo共创生态:让智驾技术为各行业发展赋能

目录 一、引言 二、Apollo七周年大会主要内容回顾 2.1活动回顾链接 2.2Apollo项目介绍 2.2.1Apollo项目发展介绍 2.2.2实验用车传感器介绍 2.2.3硬件连接概述 2.2.4软件概述 2.3Apollo X 企业自动驾驶解决方案介绍 2.3.1Apollo X 企业自动驾驶解决方案优势 2.3.2 Ap…

golang 基础知识细节回顾

之前学习golang的速度过于快&#xff0c;部分内容有点囫囵吞枣的感觉&#xff0c;写gorm过程中有很多违反我常识的地方&#xff0c;我通过复习去修正了我之前认知错误和遗漏的地方。 itoa itoa自增的作用在编辑error code时候作用很大&#xff0c;之前编辑springboot的error c…

富格林:累积经验阻挠黑幕之手

富格林认为&#xff0c;近年来现货黄金投资市场越发火热&#xff0c;许多投资新手纷纷涌入现货黄金市场中。不过&#xff0c;在这需要提醒大家的是要提防黑幕阻挠我们顺利盈利&#xff0c;选择正规可靠的平台进行开户&#xff0c;这样可以保证投资环境的安全稳定。下面富格林将…