使用servlet+jdbc+MD5实现用户加密登录
/**
* 分析流程:
* 1、前端页面提交登录请求
* 2、被web.xml拦截,进入到LoginServlet(有两种方式:方式一,在web.xml文件中配置servlet拦截器;方式二,不用在web.xml中配置,直接在类中通过 @WebServlet("/login")注解 //请求路径)
* 3、获取页面输入的用户名和密码
* 4、创建一个工具类,用于生成连接工厂
* 5、调用UserDao层,通过连接工厂连接数据库,根据名字查询用户
* 6、拼接sql语句,set参数,执行预编译,返回结果集
* 7、判断结果集是否存在,如果存在,就return数据
* 8、在LoginServlet中调用dao层后获取到数据,获取session对象,将获取到的数据存储到session对象中
* 9、资源跳转到页面
* 10、跳转到成功页面,显示数据
*/
代码示例:
1、前端页面提交登录请求
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>登录页面</title> </head> <body><form action="login" method="post">用户名:<input name="username" type="text"><br>密 码:<input name="password" type="password"><br><button type="submit">登录</button></form> </body> </html>
2、被web.xml拦截,进入到LoginServlet(有两种方式:方式一,在web.xml文件中配置servlet拦截器;方式二,不用在web.xml中配置,直接在类中通过 @WebServlet("/login")注解 //请求路径)
配置的web.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"><display-name>demo2</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.jsp</welcome-file></welcome-file-list> <servlet><servlet-name>loginServlet</servlet-name> <servlet-class>org.fkjava.Servlet.LoginServlet</servlet-class> </servlet><servlet-mapping><servlet-name>loginServlet</servlet-name><url-pattern>/</url-pattern> //拦截所有的请求</servlet-mapping> </web-app>
3、请求被拦截后跳转到LoginServlet类中,获取页面输入的用户名和密码,调用dao层获取数据,将获取到的数据保存到session对象中,然后重定向,将数据发到成功页面
package org.fkjava.Servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.fkjava.bean.User; import org.fkjava.dao.UserDao; import org.fkjava.util.MD5; /*** Servlet implementation class LoginServlet*/ @WebServlet("/login")//请求路径, 如果配置了@WebServlet注解就不配置web.xml,两者二选一 public class LoginServlet extends HttpServlet {private static final long serialVersionUID = 1L; /*** @see HttpServlet#HttpServlet()*/public LoginServlet() {super();// TODO Auto-generated constructor stub }/*** @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)*/protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {/**设置请求编码*/request.setCharacterEncoding("UTF-8");/**设置响应类型*/response.setContentType("text/html");/**设置响应编码*/response.setCharacterEncoding("UTF-8"); //获取MD5加密对象MD5 pwd = new MD5();//获取输入的用户名和密码String name = request.getParameter("username");String pass = null;try {pass = pwd.getMD5(request.getParameter("password"));} catch (Exception e) {// TODO: handle exceptio e.printStackTrace();} //初始化dao层UserDao userDao = new UserDao();/**调用dao层的获取用户的方法*/try {String user = userDao.findUserByName(name,pass);System.out.println(user);//获取session,将获取到的数据保存到session中HttpSession session = request.getSession();session.setAttribute("user", user);//重定向,跳转到成功页面response.sendRedirect("success.jsp");} catch (Exception e) {// TODO Auto-generated catch block e.printStackTrace();} } }
4、创建一个工具类,用于生成连接工厂,这里需要使用的数据库的驱动jar包mysql-connector-java-5.1.40.jar
package org.fkjava.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class ConnectionFactory {//准备参数private static String url = "jdbc:mysql://127.0.0.1:3306/rqzc_db?useSSL=false";private static String user = "root";private static String password ="";//使用静态代码块加载驱动static{try {/**使用类名加载数据库驱动*/Class.forName("com.mysql.jdbc.Driver");} catch (Exception e) {e.printStackTrace();/**创建运行时异常*/throw new RuntimeException("数据库驱动加载异常!", e); }}/**提供公共、静态的连接数据库的方法*/public static Connection getConnection() throws SQLException{Connection conn = DriverManager.getConnection(url, user, password); return conn; } }
5、创建UserDao类,通过连接工厂获取连接,拼接sql语句,执行预编译(方式sql语句攻击,例如admin' or '1'='1会直接通过),设置参数,执行查询语句返回结果集
package org.fkjava.dao;import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import org.fkjava.jdbc.ConnectionFactory; public class UserDao {public String findUserByName(String name, String pass) throws Exception {/**获取连接,因为连接工厂设置的静态方法,可以指定使用类名调用方法*/Connection conn = ConnectionFactory.getConnection(); /**拼接sql语句*/String sql = "select * from r_employee where username= ? and password = ?"; /**预编译sql语句,这样是为了防止sql语句攻击*/PreparedStatement statement = conn.prepareStatement(sql);/**set参数,1表示第一个参数,2表示第二个参数*/statement.setString(1, name);statement.setString(2, pass);//执行sql语句,返回结果集ResultSet rs = statement.executeQuery();/**判断结果集是否有数据*/if(rs.last()){/**返回用户真实姓名*/return rs.getString("realname");}else{return "查询失败!";} } }
6、如果查询到数据,保存到session对象中,并重定向到成功页面
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>成功页面</title> </head> <body>${sessionScope.user}:登录成功! </body> </html>
7、bean实体类
package org.fkjava.bean; public class User {private String username;private String password;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;} }
8、补充:下面是编码结构示意图:
转载于:https://www.cnblogs.com/guzhou-ing/p/6692838.html
使用servlet+jdbc+MD5实现用户加密登录相关推荐
- JSP+Servlet + JDBC 实现简单的登录验证模块
数据库设计+编码+运行调试 数据库准备: 二话不说,上图 文件组织如下: 首先写出三个JSP页面文件 login.jsp <%@ page language="java" c ...
- Java项目:小蜜蜂扩音器网上商城系统(java+JSP+Servlet+JDBC+Ajax+mysql)
源码获取:博客首页 "资源" 里下载! 一.项目简述 用户功能模块: 用户注册: 用户登录:商品模块:订单模块:后台管理系统功能:管理员模块: 商品模块:订单管理模块 : 二.项目 ...
- jsp mysql servlet_JSP+Servlet+JDBC+mysql实现的学生成绩管理系统
本系统基于JSP+Servlet+Mysql 一个基于JSP+Servlet+Jdbc的学生成绩管理系统.涉及技术少,易于理解,适合JavaWeb初学者学习使用. 难度等级:入门 技术栈 编辑器 Ec ...
- spring 3.x 学习笔记_spring mvc、spring jdbc 实现网站的登录注册功能
使用spring mvc.spring jdbc 实现网站的登录注册功能 1. 据业务模型 创建model 一般实现序列化 2. 用spring 注解(@Repositor ...
- jsp servlet mysql项目_JSP+Servlet+JDBC+mysql实现的个人日记本系统
项目简介 本系统基于JSP+Servlet+Mysql 一个基于JSP+Servlet+Jdbc的个人日记本系统.涉及技术少,易于理解,适合JavaWeb初学者学习使用. 难度等级:入门 技术栈 编辑 ...
- mysql日记本程序_JSP+Servlet+JDBC+mysql实现的个人日记本系统
项目简介 本系统基于JSP+Servlet+Mysql 一个基于JSP+Servlet+Jdbc的个人日记本系统.涉及技术少,易于理解,适合JavaWeb初学者学习使用. 难度等级:入门 技术栈 编辑 ...
- mysql jdbc jsp学生管理系统_JSP+Servlet+JDBC+mysql实现的学生成绩管理系统
项目简介 本系统基于JSP+Servlet+Mysql 一个基于JSP+Servlet+Jdbc的学生成绩管理系统.涉及技术少,易于理解,适合JavaWeb初学者学习使用. 难度等级:入门 技术栈 编 ...
- 支持增删查改的简单Java Web通讯录详细教程【基于Mac OS+IDEA+Servlet+JDBC+Tomcat】
本文将以Web版通讯录的形式介绍一个支持简单增删查改的Java Web项目,软硬件环境基于Macbook Air M2+macOS Ventura 13.1+IntelliJ IDEA 2022,技术 ...
- Web基础之Servlet+JDBC+JSP项目实战记录(一)
Web基础之Servlet+JDBC+JSP项目实战记录(一) 一.项目说明: 通过前面的学习,我们已经对Servlet有了一定的了解:接下来我们要结合数据库和JSP技术一步一步完成一个小型的动态we ...
最新文章
- 树莓派镜像源切换之旅.md
- LongestPalindromeSequence
- go连接mysql数据库
- GP学习(五)—ArcGIS Toolbox Reference dialog box
- maven常用插件配置
- Java面向对象的思想
- 计算机春季高考试题答案,最新春季高考历年真题-天津市春季高考计算机试卷...
- C语言 表白代码(I love you!)
- 浏览器设置阻止第三方Cookie保护自己隐私
- ccs定义的函数不变色_ccs使用问题及解决办法
- hd6630m可以玩lol吗_《LOL》流畅玩!Intel HD620核显性能实测
- python将多张图片合并成一张图片
- el-descriptions引入代码中label不生效问题
- Android 对于外部TF(SD)卡和U盘的读写操作
- 计应java1803_[南开大学]18秋学期(1709、1803、1809)《古代汉语(一)》在线作业 ......
- 测试打印 lua 的 _G 所有显示的字段内容
- ElasticSearch安装、IK、映射、索引管理、搜索管理和集群管理
- zabbix报警功能(邮件报警)---触发器/动作
- Property maxActive is not used in DBCP2, use maxTotal instead. maxTotal default value is 8. You have
- Opencv-图像ROI与ROI操作