之前写了一个页面,只有简单的用户名和密码,还写了一个验证码的原理,今天把验证码加入到登录页面中。
首先在jsp里面加上标签用来输入验证码和放验证码图片;
在验证码的servlet中,把随机的验证码用string获取,然后通过session共享数据;
在login的servlet中,获取用户输入的验证码,和session获取的验证码对比,如果一致,再去判断用户名和密码,否则直接提示错误,然后重新跳转页面。
大致思路就是这样,还是很简单的
login修改后的代码:
package com.lzj.servlet;
import com.lzj.DAO.UserDao;
import com.lzj.domain.User;
import javax.activation.DataSource;
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 java.io.IOException;
@WebServlet("/login")
public class login extends HttpServlet {
private static DataSource ds ;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置编码
request.setCharacterEncoding("utf-8");
HttpSession session = request.getSession();
String checkCodeStr = (String) session.getAttribute("checkCodeStr");
session.removeAttribute("checkCodeStr");
String username = request.getParameter("username");
String password = request.getParameter("password");
String checkcodes = request.getParameter("checkcode");
if(checkcodes.equalsIgnoreCase(checkCodeStr)){
User loginUser = new User();
loginUser.setUsername(username);
loginUser.setPassword(password);
UserDao u = new UserDao();
User user = u.login(loginUser);
if(user!=null){
request.setAttribute("username",username);
request.getRequestDispatcher("/loginSuccess").forward(request,response);
}else {
request.setAttribute("LoginError","用户或密码错误");
request.getRequestDispatcher("/Login.jsp").forward(request,response);
}
}else {
request.setAttribute("CheckCodeError","验证码错误");
request.getRequestDispatcher("/Login.jsp").forward(request,response);
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
<%--
Created by IntelliJ IDEA.
User: RetOfe
Date: 2021/4/9
Time: 17:55
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
<script>
window.onload = function () {
//设置图片监听事件
var img = document.getElementById("check");
img.onclick = function () {
var date = new Date().getTime();
img.src = "/login_war_exploded/CheckCode?"+date;
}
//设置超链接
var a = document.getElementById("change");
a.onclick = function () {
a.href = "/login_war_exploded/Login.jsp";
}
}
</script>
</head>
<body>
<form action="/login_war_exploded/login" method="post">
<div class="form-group">
<label for="user_name">用户名:</label>
<input type="text" class="form-control" id="user_name" name="username" placeholder="请输入用户名">
</div>
<div class="form-group">
<label for="exampleInputPassword1">密码:</label>
<input type="password" class="form-control" id="exampleInputPassword1" name="password" placeholder="Password">
</div>
<div class="form-group">
<label for="checktext">验证码:</label>
<input type="text" class="form-control" id="checktext" name="checkcode" placeholder="CheckCode">
<br/>
<img id="check" src="/login_war_exploded/CheckCode">
<a id="change" href="/login_war_exploded/Login.jsp">看不清?换一张</a>
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
${request.CheckCodeError}
${request.LoginError}
</body>
</html>
这次页面写到了jsp页面中,整体差不多的,需要登录页面和验证码具体代码的可以看我之前的文章,介绍的都很清楚。