使用ChatGPT生成登录产品代码
作者:顾翔function validateForm() { …}
<style> body { … }</style>
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>
<title>登录页面</title>
<link rel="stylesheet" href="css/index.css">
<script src="js/index.js" type="text/javascript"></script>
</head>
<body>
<div class="container">
<h2>登录</h2>
<form id="loginForm" onsubmit="return validateLoginForm()">
<div>
<label for="username">用户名:</label>
<input type="text" id=“username” name=“username” placeholder=“输入账号” required>
<div id="usernameError" class="error"></div>
</div>
<div>
<label for="password">密码:</label>
<input type="password" id=“password” name=“password” placeholder=“输入密码” required>
<div id="passwordError" class="error"></div>
</div>
<button type="submit">登录</button>
</form>
</div>
</body>
</html>
function validateLoginForm() {
const username = document.getElementById('username').value;
const password = document.getElementById('password').value;
let isValid = true;
clearErrorMessages(); // 清空所有错误信息
// 用户名简单验证
if (username.trim() === '') {
showError('usernameError', '用户名不能为空');
isValid = false;
}
// 密码简单验证
if (password.trim() === '') {
showError('passwordError', '密码不能为空');
isValid = false;
}
if (isValid) {
// 获取密码并进行SHA-256哈希
let hashedPassword = CryptoJS.SHA256(password).toString(CryptoJS.enc.Base64);
// 这里可以添加登录逻辑,比如发送请求到服务器
console.log('加密后的密码:', hashedPassword);
console.log('登录成功!');
}
return isValid;
}
<!DOCTYPE html>
…
<link rel="stylesheet" href="css/index.css">
<script src="index.js" type="text/javascript"></script>
…
<form id="loginForm" onsubmit="return validateLoginForm()">
<!DOCTYPE html>
…
<link rel="stylesheet" href="css/index.css">
<script src="js/index.js" type="text/javascript"></script>
…
<form id="loginForm" name="loginForm" method="POST" action="jsp/login.jsp" onsubmit="return validateLoginForm();">
<div id="loginError" class="error"></div>
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="java.sql.*, javax.sql.*" %>
<%@ page import="ebusiness.*" %>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="../css/index.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/crypto-js@4.1.1/core.js"></script>
<script src="https://cdn.jsdelivr.net/npm/crypto-js@4.1.1/sha256.js"></script>
<title>登录页面</title>
<script src="../js/index.js" type="text/javascript"></script>
</head>
<body>
<div class="container">
<h2>登录</h2>
<form id="loginForm" method="POST" name="loginForm" action="login.jsp" onsubmit="return validateLoginForm();">
<div>
<label for="username">用户名:</label>
<input type="text" id=“username” name=“username” placeholder=“输入账号” required>
<div id="usernameError" class="error"></div>
</div>
<div>
<label for="password">密码:</label>
<input type="password" id=“password” name=“password” placeholder=“输入密码” required>
<div id="passwordError" class="error"></div>
</div>
<button type="submit">登录</button>
</form>
<div id="loginError" class="error">
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = new User();
user.setUsername(username);
user.setPassword(password);
if (username != null && password != null) {
try {
DBuser mysql = new DBuser();
Connection conn = mysql.connect();
if (mysql.login(conn, user).equals("0"))
out.println("用户名或密码错误");
else
response.sendRedirect("welcome.jsp");
} catch (SQLException e) {
e.printStackTrace();
} finally {
out.println("");
}
}
%>
</div>
</div>
</body>
</html>
public String login(Connection conn, User user) throws SQLException {
String username=user.getUsername();
String password=user.getPassword();
PreparedStatement stmt = null;
ResultSet rs = null;
try {
String queryString = "SELECT * FROM user WHERE username=? AND password=?";
stmt = conn.prepareStatement(queryString);
stmt.setString(1, username);
stmt.setString(2, password);
rs = stmt.executeQuery();
if (!rs.next()) {
return "0";
} else {
return "1";
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return "-1";
}
…
}else{
out.println(mysql.login(conn, user));
Cookie myCookie = new Cookie("username", username);
myCookie.setMaxAge(60 * 60 * 24); // 设置为1天,单位是秒
myCookie.setPath("/");
response.addCookie(myCookie);
response.sendRedirect("welcome.jsp");
}
…
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="ebusiness.CookiesManager" %>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="../css/index.css">
<script src="../js/index.js" type="text/javascript"></script>
<title>系统欢迎您</title>
</head>
<body>
<%
CookiesManager myusername = new CookiesManager("username",response,request);
String currentusername=myusername.getCookie();
if (currentusername==null){
response.sendRedirect("login.jsp");
}else{
%>
<h1>系统欢迎您</h1>
欢迎<%=currentusername%>进入XXX系统
<a href="logout.jsp">登出</a>
<%
}
%>
</body>
</html>
<%@ page contentType="text/html; charset=utf-8" %>
<!DOCTYPE html>
<html>
<head>
<title>欢迎进入</title>
<link rel="stylesheet" href="../css/index.css">
<script src="../js/index.js" type="text/javascript"></script>
</head>
<body>
<%
boolean judeg=false;
String currentusername="";
Cookie[] cookies = request.getCookies(); // 获取所有的cookies
if (cookies != null) {
for (Cookie cookie : cookies) {
String name = cookie.getName(); // 获取cookie的名称
String value = cookie.getValue(); // 获取cookie的值
if (name.equals("username") &&(value!=null)||(value.equals(""))){
judeg=true;
currentusername=value;
}
}
}
if(judeg){
%>
欢迎<%=currentusername%>登录XXXX系统
<a href="logout.jsp">登出</a>
<%
}else{
response.sendRedirect("../login.html");
}
%>
</body>
</html>
response.sendRedirect("../login.html");
response.sendRedirect("login.jsp");
response.sendRedirect("../login.html");
response.sendRedirect("login.jsp");
package ebusiness;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletRequest;
public class CookiesManager {
private HttpServletResponse response;
private HttpServletRequest request;
private String cookies_name;
private String cookies_value;
// 构造函数,接受 cookies 和 response 对象
public CookiesManager(String cookies_name,String cookies_value, HttpServletResponse response,HttpServletRequest request) {
this.cookies_name = cookies_name;
this.cookies_value = cookies_value;
this.response = response;
this.request = request;
}
public CookiesManager(String cookies_name, HttpServletResponse response,HttpServletRequest request) {
this.cookies_name = cookies_name;
this.response = response;
this.request = request;
}
// 设置cookies的方法
public void setCookie() {
if (this.cookies_value != null && !this.cookies_value.isEmpty()) {
// 创建一个新的 Cookie
Cookie myCookie = new Cookie(this.cookies_name, this.cookies_value);
// 设置 Cookie 的有效期为 1 天(单位是秒)
myCookie.setMaxAge(60 * 60 * 24);
// 设置 Cookie 的路径
myCookie.setPath("/");
// 如果使用 HTTPS,确保 Cookie 只通过安全连接发送
myCookie.setSecure(true);
// 防止客户端脚本访问 Cookie
myCookie.setHttpOnly(true);
// 将 Cookie 添加到响应中
response.addCookie(myCookie);
} else {
// 处理cookies为空的情况
System.out.println("cookie is null or empty.");
}
}
// 获取cookies的方法
public String getCookie() {
Cookie[] cookies = this.request.getCookies(); // 获取所有的cookies
if (cookies != null) {
for (Cookie cookie : cookies) {
String name = cookie.getName(); // 获取cookie的名称
String value = cookie.getValue(); // 获取cookie的值
if (name.equals(this.cookies_name) && (value != null) && (!value.isEmpty())){
this.cookies_value=value;
}
}
}
return this.cookies_value;
}
}
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="java.sql.*, ebusiness.DBuser, ebusiness.validateUser, ebusiness.Util, ebusiness.User,ebusiness.CookiesManager" %>
…
CookiesManager ct = new CookiesManager("csrftoken",csrftoken, response,request);
String method = request.getMethod();
if ("get".equalsIgnoreCase(method)) {
ct.setCookie();
}else if("post".equalsIgnoreCase(method)){
…
ct.setCookie();
…
3)修改login.jsp
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="java.sql.*, ebusiness.DBuser, ebusiness.validateUser, ebusiness.Util, ebusiness.User,ebusiness.CookiesManager" %>
…
<%
<%
CookiesManager ct = new CookiesManager("csrftoken",csrftoken, response,request);
String method = request.getMethod();
if ("get".equalsIgnoreCase(method)) {
ct.setCookie();
}else if("post".equalsIgnoreCase(method)){
…
ct.setCookie();
if((csrftoken_cookies.equals(csrftoken_post))&&(csrftoken_cookies!=null)&&(csrftoken_cookies.length() > 0)){
…
CookiesManager myusername = new CookiesManager("username",username, response,request);
myusername.setCookie();
response.sendRedirect("welcome.jsp");
}
…
<%@ page contentType="text/html; charset=utf-8" %><%@ page import="java.sql.*, ebusiness.DBuser, ebusiness.validateUser, ebusiness.Util, ebusiness.User,ebusiness.CookiesManager" %> <meta </metacharset="UTF-8"> <meta </metaname="viewport" content="width=device-width, initial-scale=1.0"> <link </linkrel="stylesheet" type="text/css" href="../css/index.css"/> < </src="../js/index.js" type="text/javascript"> < </src="../js/showerror.js" type="text/javascript"> < </src="https://cdn.jsdelivr.net/npm/crypto-js@4.1.1/core.js"> < </src="https://cdn.jsdelivr.net/npm/crypto-js@4.1.1/sha256.js"><%Util util = new Util();String csrftoken=util.generateRandomString(100);%> 用户注册 <form </formname="myForm" method="POST" action="register.jsp" onsubmit="return validateForm();"> <label </labelfor="username">账号 (5-20位字母或数字): <input </inputtype="text" id="username" name="username" placeholder="输入账号" required> <div </divid="usernameError" class="error"> <label </labelfor="password">密码 (5-30位,包含大小写字母、数字和特殊字符): <input </inputtype="password" id="password" name=“password” placeholder=“输入密码” required> <div </divid="passwordError" class="error">
<label </labelfor="confirmPassword">密码确认:
<input </inputtype="password" id="confirmPassword" name="confirmPassword" placeholder="输入确认密码" required>
<div </divid="confirmPasswordError" class="error">
<label </labelfor="phone">手机号 (中国):
<input </inputtype="tel" id="phone" name="phone" placeholder="输入手机号" required>
<div </divid="phoneError" class="error">
<label </labelfor="email">邮箱:
<input </inputtype="email" id="email" name="email" placeholder="输入邮箱" required>
<div </divid="emailError" class="error">
<button </buttontype="submit">注册
<div </divid="registerError" class="error">
<%
CookiesManager ct = new CookiesManager("csrftoken",csrftoken, response,request);
String method = request.getMethod();
if ("get".equalsIgnoreCase(method)) {
ct.setCookie();
}else if("post".equalsIgnoreCase(method)){
String csrftoken_post = request.getParameter("csrftoken");
String username = request.getParameter("username");
String password = request.getParameter("password");
String phone = request.getParameter("phone");
String email = request.getParameter("email");
String csrftoken_cookies = ct.getCookie();
ct.setCookie();
if((csrftoken_cookies.equals(csrftoken_post))&&(csrftoken_cookies!=null)&&(csrftoken_cookies.length() > 0)){
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setPhone(phone);
user.setEmail(email);
validateUser vu = new validateUser();
String validationResult = vu.validate(user);
if (!validationResult.equals("验证成功")) {
out.print(validationResult);
}else {
try {
DBuser mysql = new DBuser();
Connection conn = mysql.connect();
String info = mysql.insert(conn, user);
if (info.equals("1")) {
response.sendRedirect("login.jsp");
} else {
out.println(info);
}
mysql.disconnect(conn);
} catch (Exception e) {
out.println("数据库错误: " + e.getMessage());
}
}
}else{
response.sendRedirect("login.jsp");
}
}
%>
public String userExists(Connection conn, String username, String email, String phone) throws SQLException {
if (!judgeInfo(conn,"username",username).equals("0"))
return "注册用户的用户名必须唯一";
else if(!judgeInfo(conn,"phone",phone).equals("0"))
return "注册用户的手机必须唯一";
else if(!judgeInfo(conn,"email",email).equals("0"))
return "注册邮箱的手机必须唯一";
else
return "0";
}
try {
DBuser mysql = new DBuser();
Connection conn = mysql.connect();
String info = mysql.insert(conn, user);
if (info.equals("1")) {
out.println("注册成功");
} else {
out.println(info);
}
try {
DBuser mysql = new DBuser();
Connection conn = mysql.connect();
String info = mysql.insert(conn, user);
if (info.equals("1")) {
response.sendRedirect("login.jsp");
} else {
out.println(info);
}
import requests
import unittest
import hashlib
import re
from Util import ClassDB
def hash_password(password):
"""对密码进行SHA256散列"""
return hashlib.sha256(password.encode('utf-8')).hexdigest()
class TestUserRegistration(unittest.TestCase):
# 注册接口的URL
def setUp(self):
self.REGISTER_URL = "http://127.0.0.1:8080/CharGPTEbusiness/jsp/register.jsp"
# 注册接口的URL
self.login_url ="http://127.0.0.1:8080/CharGPTEbusiness/register.jsp"
self.session = requests.Session()
response = self.session.get(self.login_url)
def tearDown(self):
ClassDB.init_db()
def test_valid_username(self):
"""TC1: 测试有效的账号(5-20位字母或数字)"""
…
self.assertIn("
import pytestfrom playwright.sync_api import Pagefrom Util import ClassDBimport time REGISTER_URL = 'http://127.0.0.1:8080/CharGPTEbusiness/jsp/register.jsp'# 测试类class TestUserRegistration: def teardown_class(self): ClassDB.init_db() def test_valid_username(self,page: Page): '''GTC1-账号有效性测试''' … assert page.get_by_role("heading", name="登录") … def test_duplicate_registration(self,page: Page): '''GTC6 – 一个用户重复注册两次:''' … assert page.get_by_role("heading", name="登录") … def test_duplicate_phone(self,page: Page): '''GTC7 – – 不同用户注册,手机号重复:''' … assert page.get_by_role("heading", name="登录") def test_duplicate_email(self,page: Page): '''GTC7 – 不同用户注册,邮件重复:''' … assert page.get_by_role("heading", name="登录") …if __name__ == '__main__': pytest.main(["-sv", "Test_register_GUI.py"])运行TestEbuxiness.py与Test_register_GUI.py,测试通过。
public User(String username,String password) {
this.username = username;
this.password = password;
this.phone = "13611112222";
this.email = "jerry@126.com";
}
public User(String username,String password,String phone,String email) {
this.username = username;
this.password = password;
this.phone = phone;
this.email = email;
}
…
@Test
public void testValidate_Success() {
String username = "validUser";
String phone = "13812345678";
String email = "validuser@example.com";
String password = "751a0f268bba70d0fe70372692d4cd61f11c60183b920857597a103b394ef3eb";
User user = new User(username,password,phone,email);
assertEquals("验证成功", validator.validate(user));
}
@Test
public void testValidate_InvalidUsername() {
String username = "invalid_user@123";
String phone = "13812345678";
String email = "validuser@example.com";
String password = "d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2";
User user = new User(username,password,phone,email);
assertEquals("账号必须是5-20位字母或数字", validator.validate(user));
}
@Test
public void testValidate_InvalidPhone() {
String username = "validUser";
String phone = "123";
String email = "validuser@example.com";
String password = "d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2";
User user = new User(username,password,phone,email);
assertEquals("手机号必须符合中国手机号码格式", validator.validate(user));
}
@Test
public void testValidate_InvalidEmail() {
String username = "validUser";
String phone = "13812345678";
String email = "invalidemail.com";
String password = "d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2";
User user = new User(username,password,phone,email);
assertEquals("Email格式不正确", validator.validate(user));
}
@Test
public void testValidate_InvalidPasswordHash() {
String username = "validUser";
String phone = "13812345678";
String email = "validuser@example.com";
String password = "plainpassword";
User user = new User(username,password,phone,email);
assertEquals("密码应该哈希进行存储", validator.validate(user));
}
…
@Test
public void testInsert_UserExists() {
try {
Connection conn = dbUser.connect();
String username="existingUser";
String password="password";
String phone="13812345678";
String email="existinguser@example.com";
User user = new User(username,password,phone,email);
String result = dbUser.insert(conn, user);
assertEquals("1", result);
result = dbUser.insert(conn, user);
if (!deleteUser(user,conn)) {
System.out.print("删除失败");
}
dbUser.disconnect(conn);
assertEquals("注册用户的用户名必须唯一", result);
} catch (SQLException e) {
e.printStackTrace();
fail("Insert failed");
}
}
@Test
public void testInsert_Success() {
try {
Connection conn = dbUser.connect();
String username="newUser";
String password="password";
String phone="13812345678";
String email="newuser@example.com";
User user = new User(username,password,phone,email);
String result = dbUser.insert(conn, user);
if (!deleteUser(user,conn)) {
System.out.print("删除失败");
}
dbUser.disconnect(conn);
assertEquals("1", result);
} catch (SQLException e) {
e.printStackTrace();
fail("Insert failed");
}
}
package ebusiness;
import java.sql.Connection;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletRequest;
public class register {
private HttpServletResponse response;
private HttpServletRequest request;
public register(HttpServletResponse response,HttpServletRequest request) {
this.response = response;
this.request = request;
}
public String myRegister() {
String username = this.request.getParameter("username");
String password = this.request.getParameter("password");
String phone = this.request.getParameter("phone");
String email = this.request.getParameter("email");
User user = new User(username,password,phone,email);
validateUser ValidateUser = new validateUser();
String validationResult = ValidateUser.validate(user);
if (!validationResult.equals("验证成功")) {
return validationResult;
}else {
try {
DBuser mysql = new DBuser();
Connection conn = mysql.connect();
String info = mysql.insert(conn, user);
if (info.equals("1")) {
this.response.sendRedirect("login.jsp");
} else {
return info;
}
mysql.disconnect(conn);
} catch (Exception e) {
return "数据库错误: " + e.getMessage();
}
}
return "0";
}
}
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="java.sql.*, ebusiness.DBuser, ebusiness.validateUser, ebusiness.Util, ebusiness.User,ebusiness.CookiesManager,ebusiness.register" %>
<!DOCTYPE html>
<html lang="zh-CN">
…
<body>
<%
Util util = new Util();
String csrftoken=util.generateRandomString(100);
%>
…
</form>
<div id="registerError" class="error">
<%
CookiesManager ct = new CookiesManager("csrftoken",csrftoken, response,request);
String method = request.getMethod();
if ("get".equalsIgnoreCase(method)) {
ct.setCookie();
}else if("post".equalsIgnoreCase(method)){
String csrftoken_post = request.getParameter("csrftoken");
String csrftoken_cookies = ct.getCookie();
ct.setCookie();
if((csrftoken_cookies.equals(csrftoken_post))&&(csrftoken_cookies!=null)&&(csrftoken_cookies.length() > 0)){
register myregister = new register(response,request);
%>
<%= myregister.myRegister()%>
<%
}
}
%>
</div>
</div>
</body>
</html>
package ebusiness;
import java.sql.Connection;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletRequest;
public class login {
private HttpServletResponse response;
private HttpServletRequest request;
public login(HttpServletResponse response,HttpServletRequest request) {
this.response = response;
this.request = request;
}
public String myLogin() {
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = new User(username, password);
validateUser ValidateUser = new validateUser();
String validationResult = ValidateUser.validate(user);
if (validationResult.equals("验证成功")) {
try {
DBuser mysql = new DBuser();
Connection conn = mysql.connect();
if (mysql.login(conn, user).equals("0")){
return "用户名或密码错误";
}else{
CookiesManager myusername = new CookiesManager("username",username, response,request);
myusername.setCookie();
response.sendRedirect("welcome.jsp");
}
mysql.disconnect(conn);
} catch (Exception e) {
e.printStackTrace();
}
}else{
return validationResult;
}
return "0";
}
}
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="java.sql.*, ebusiness.DBuser, ebusiness.validateUser, ebusiness.Util, ebusiness.User,ebusiness.CookiesManager,ebusiness.login" %>
…
</form>
<div id="loginError" class="error">
<%
CookiesManager ct = new CookiesManager("csrftoken",csrftoken, response,request);
String method = request.getMethod();
if ("get".equalsIgnoreCase(method)) {
ct.setCookie();
}else if("post".equalsIgnoreCase(method)){
String csrftoken_post = request.getParameter("csrftoken");
String csrftoken_cookies = ct.getCookie();
ct.setCookie();
if((csrftoken_cookies.equals(csrftoken_post))&&(csrftoken_cookies!=null)&&(csrftoken_cookies.length() > 0)){
login mylogin = new login(response,request);
%>
<%= mylogin.myLogin()%>
<%
}
}
%>
</div>
</div>
</body>
</html>