Java 实现用户登录项目

需求:

在页面中要求输入用户名和密码,并显示验证码。在三项都通过验证后显示登录成功否则登录失败

分析;

  1. 在验证用户名密码之前应该先判断验证码是否通过验证,防止多次连接数据库校验
  2. 可以将用户名密码封装为一个对象传入数据库,并在Dao层定义一个方法用于接收数据库的返回对象。如果对象不为Null则表示登录成功,如果返回值为null则在页面显示用户名或密码错误。
  3. 连接数据库可以用Druid来管理线程池

1. 制作验证码:

@WebServlet("/CheckCode")
public class CheckCode extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {int width = 100;int height = 50;BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);Graphics graphics = image.getGraphics();// 用颜色填充出一块底色为粉红色的长方形graphics.setColor(Color.PINK);graphics.fillRect(0,0,width,height);// 画出长方形的边框graphics.setColor(Color.BLACK);graphics.drawRect(0,0,width-1,height-1);// 生成随机数字取得字符并画出Random wordRandom = new Random();String word = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";StringBuilder stringBuilder = new StringBuilder();for (int i = 1; i <=4 ; i++) {int index = wordRandom.nextInt(word.length()-1);char code = word.charAt(index);stringBuilder.append(code);graphics.drawString(code+" ", width/5*i, height/2);}String checkcode = stringBuilder.toString();// 将验证码发送到session方便以后的验证request.getSession().setAttribute("checkcode_session", checkcode);graphics.setColor(Color.GREEN);// 生成随机点画出10条线for (int i=0; i<10;i++){int x1 = wordRandom.nextInt(width);int x2 = wordRandom.nextInt(width);int y1 = wordRandom.nextInt(height);int y2 = wordRandom.nextInt(height);graphics.drawLine(x1,y1,x2,y2);}ImageIO.write(image,"jpg",response.getOutputStream());}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}
}

2. 定义User类来封装User数据

public class User {private int id;private String username, password;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;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +'}';}
}

定义JDBC工具类

public class JDBCutils{private static DataSource datasource;static{try{Properties properties = new Properties(); // 使用Properties.load()导入druid.properties的流文件InputSteam inputStream = JDBCutils.class.getClassLoader().getResourceAsStream("druid.properties");properties.load(inputSteam);}catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}public DataSource getDataSource(){return datasource;}public Connection getConnection(){return datasource.getConnection();}
}

在Dao层完成数据库的验证

public class Dao {JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCutils.getDataSource());public User login(User login_user){try {String name = login_user.getUsername();String password = login_user.getPassword();String sql = "select * from user where username = ? and password =?";return jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), name, password);} catch (DataAccessException e){e.printStackTrace();return null;}}
}

在完成Dao层后应该可以编写一个Test类来测试SQL语句是否能正常的运行

定义页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>Login</title></head><script>window.onload = function () {document.getElementById("check").onclick = function(){this.src = "/Login/CheckCode?time=" + new Date().getTime();}}</script><style>div{color: red;}
</style><body><form action="/Login/LoginServlet" method="post"><table><tr><td>用户名</td><td><input type="text" name="username"></td></tr><tr><td>密码</td><td><input type="password" name="password"></td></tr><tr><td>验证码</td><td><input type="text" name="checkcode"></td></tr><tr><td colspan="2"><img id="check" src="/Login/CheckCode" > </td></tr><tr><td colspan="2"><input type="submit" value="登录"></td></tr></table></form><div><%=request.getAttribute("checkcode_error")==null?" ":request.getAttribute("checkcode_error")%></div><div><%=request.getAttribute("login_error")==null?" ":request.getAttribute("login_error")%></div></body>
</html>

完成LoginServlet

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");// 获取参数HttpSession session = request.getSession();String username = request.getParameter("username");String password = request.getParameter("password");String checkcode = request.getParameter("checkcode");// 获得从CheckCode发送来的session信息String checkcode_session =(String) session.getAttribute("checkcode_session");// 移除session信息保证每次的验证码不会重复session.removeAttribute("checkcode_session");if (checkcode_session!=null && checkcode_session.equalsIgnoreCase(checkcode)){User loguser = new User();loguser.setUsername(username);loguser.setPassword(password);Dao dao = new Dao();User user = dao.login(loguser);if (user!=null){session.setAttribute("user", username);response.sendRedirect(request.getContextPath() + "/success.jsp");}else{request.setAttribute("login_error", "用户名或密码错误");request.getRequestDispatcher("/index.jsp").forward(request,response);}}else{// 如果不一致存储信息到requestrequest.setAttribute("checkcode_error", "验证码错误");request.getRequestDispatcher("/index.jsp").forward(request,response);}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}
}

Java 实现用户登录项目相关推荐

  1. java ee用户登录_EE Servlet 3:使用会话和过滤器开发用户登录

    java ee用户登录 我在上一篇文章中介绍了Application类,您可以在其中设置后端服务. 我添加的一个示例服务是UserService . 该服务将加载包含用户名和密码集的Java用户属性文 ...

  2. java实现用户登录异常统计、锁定及解锁功能

    写在前面 现在很多互联网项目.app等都会有登录异常提醒.登录异常次数限制,基本都是5次异常后就会锁定一定时间的账户,让该账户无法进行登录操作.需要注册用户使用安全验证手段(如动态验证码等),解除锁定 ...

  3. JAVA——创建用户登录界面

    创建用户登录界面 1.新建超市管理系统 File-new-project-java-java project,创建项目名:SupermarketClient. 2.在Supermarket下面创建两个 ...

  4. java实现用户登录注册功能(用集合框架来实现)

    需求:实现用户登录注册功能(用集合框架来实现) 分析: A:需求的类和接口 1.用户类 UserBean 2.用户操作方法接口和实现类 UserDao UserDaoImpl 3.测试类 UserTe ...

  5. Java游戏用户登录注册_Java实现多用户注册登录的幸运抽奖

    本文实例为大家分享了Java实现简单幸运抽奖的具体代码,供大家参考,具体内容如下 代码模块: User类: package test1; public class User { private Str ...

  6. java token_Java用户登录之token验证

    1.场景还原 可能还有很多小伙伴对token概念朦朦胧胧,今天笔者以项目中的用户登录的token验证需求跟大家讲讲其中的来龙去脉,希望能够理清大伙的思路. 2.需求分析 这个需求可能早已是老生常谈,但 ...

  7. 用Java实现用户登录界面

    基本步骤 1.创建一个窗体 2.给按钮加上监听 3.获取界面输入框中的值给监听 4.存储用户信息 5.实现登录注册逻辑 1.创建一个窗体 public void LE(){JFrame jf=new ...

  8. Java游戏用户登录注册_用java类模拟游戏的账号的登陆,注册,退出。 1.没有账号,需要注册。 2.注册完成后方可登...

    展开全部 /** 需求:奖客富翁游戏.62616964757a686964616fe4b893e5b19e31333337386564 菜单为: 1.注册用户信息.填写用户名,密码,电脑随机输出一个4 ...

  9. JAVA:用户登录验证

    思路 用户输入字符类 equals判断是否相等 用if语句判断 代码 import java.util.Scanner; public class denglu {public static void ...

最新文章

  1. iOS开发-观察者模式
  2. 深度学习-TF函数-layers.concatenate用法 numpy数组维度
  3. vue中create 什么触发_vue中eventbus被多次触发(vue中使用eventbus踩过的坑)
  4. MPEG1 Audio介绍
  5. PHP 与Python 读取大文件的区别
  6. OpenGL Lightmap光照贴图的实例
  7. eclipse将java工程转换为java动态web工程(工程转换均可参照)
  8. Codeforces632E Thief in a Shop(NTT + 快速幂)
  9. Ant-Design-Vue和Icon按需加载方案 - JeecgBoot实战
  10. LightBurn(激光切割排版软件)官方中文版V1.0.04 | 激光切割排版软件哪个好
  11. 久其报表软件基本操作指引
  12. python安装opencv出现错误_通过pip安装opencv时出错
  13. 关闭appleid双重认证_Apple ID 被停用如何解决?
  14. 用PS修改PNG格式图标的颜色
  15. 2022年词达人竞赛笔记
  16. 【编译原理】-- 第二章(三)(文法的化简改造、无用产生式、产生式的消除、文法的其他表示方法、例题)
  17. UFT 12 – Top 5 New Features you are going to Love
  18. JavaScript利用Date对象实现倒计时效果
  19. C++ LeetCode简单程序:罗马数字转整数
  20. 一款自用的翻译小工具,开源了

热门文章

  1. 【Java 数据结构】Map和Set
  2. QuTrunk与Paddle结合实践--VQA算法示例
  3. cursor: not-allowed; readonly的升级版,鼠标经过时,显示为禁止图标
  4. 扩展点系列之ApplicationContextAwareProcessor普通类获取Spring Bean - 第433篇
  5. C语言结合VBS脚本编写朗读小工具,做一个能够发音的C语言程序
  6. python面向对象基础-01
  7. 计算机专业的研究方向
  8. BZOJ[1135][POI2009]Lyz 线段树
  9. 机房收费管理系统之退卡
  10. angular项目中使用Primeng