JavaWeb世界(十):简单的登录与注销

简单的登录与注销

DAO实现用户名和密码

首先在数据库中创建表 t_user
t_user
然后实现DAO:
User.java:

import lombok.Data;

@Data
public class User {
	private Long id;
	private String username;
	private String password;
}

IUserDAO.java:

import java.util.List;

import com.cherry.shopping.damain.Product;
import com.cherry.shopping.damain.User;

public interface IUserDAO {

	/**
	 * 根据账号其查询该账号对应的用户对象
	 * @param username
	 * @return User
	 */
	User getUserByUsername(String username);
}

UserDAOImpl.java:

import java.sql.ResultSet;
import java.sql.SQLException;

import com.cherry.shopping.damain.User;
import com.cherry.shopping.dao.IUserDAO;
import com.cherry.shopping.template.IResultSetHandler;
import com.cherry.shopping.template.JdbcTemplate;

public class UserDAOImpl implements IUserDAO {

	public User getUserByUsername(String username) {
		String sql = "SELECT * FROM t_user WHERE username = ?";
		
		return JdbcTemplate.query(sql, new IResultSetHandler<User>() {

			public User handle(ResultSet rs) throws SQLException {
				if (rs.next()) {
					User user = new User();
					user.setId(rs.getLong("id"));
					user.setUsername(rs.getString("username"));
					user.setPassword(rs.getString("password"));
					return user;
				}
				return null;
			}
		}, username);
	}
}

UserDAOTest.java:

import org.junit.Test;

import com.alibaba.druid.proxy.jdbc.DatabaseMetaDataProxyImpl;
import com.cherry.shopping.damain.User;
import com.cherry.shopping.dao.IUserDAO;
import com.cherry.shopping.dao.impl.UserDAOImpl;

public class UserDAOTest {

	private IUserDAO dao = new UserDAOImpl();

	@Test
	public void testGetUserByUsername() throws Exception {
		String username = "cherry";
		User user = dao.getUserByUsername(username);
		System.out.println(user);
	}
}

以上实现了后台对用户名密码的查询测试。

在Servlet中检查登录

LoginServlet.java:

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 com.cherry.shopping.damain.User;
import com.cherry.shopping.dao.IUserDAO;
import com.cherry.shopping.dao.impl.UserDAOImpl;

//处理登录请求
@WebServlet("/login")
public class LoginServlet extends HttpServlet {

	private static final long serialVersionUID = 6573993259552838436L;
	private IUserDAO dao;

	public void init() throws ServletException {
		dao = new UserDAOImpl();
	}
	
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		req.setCharacterEncoding("UTF-8");
		//1.接收请求参数
		String username = req.getParameter("username");
		String password = req.getParameter("password");
		//2.调用业务方法,处理请求
		User user = dao.getUserByUsername(username);
		//3控制界面跳转
		if (user == null) {
			req.setAttribute("error", "账号不存在");
			req.getRequestDispatcher("/login.jsp").forward(req, resp);
			return;
		}
		if (!user.getPassword().equals(password)) {
			req.setAttribute("error", "账号或密码不正确");
			req.getRequestDispatcher("/login.jsp").forward(req, resp);
			return;
		}
		resp.sendRedirect("/product");
	}
}

login.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login</title>
</head>
<body>
	<h3>用户登录</h3>
	<span style="color:red">${error}</span>
	<form action="/login" method="POST">
		账号:<input type="text" name="username" required></br>
		密码:<input type="password" name="password" required></br>
		<input type="submit" value="登录">
	</form>
</body>
</html>

将登录信息存入Session

我们不希望隔了很长时间或者其他人利用其他浏览器就可以登录,因此需要将登录用户对象存入session

req.getSession().setAttribute("USER_IN_SESSION", user);

就这一句话即可,然后在 JSP 中取出:

<div align="center">
	当前登录用户${sessionScope.USER_IN_SESSION.username} 
</div>

当然还可以设置session存活时间等属性,这里省略。
然后还需要才列表显示页面和添加商品页面检查登录,若没有登录则无法访问:

//检查是否登录,判断Sesion中是否有对象
Object user = req.getSession().getAttribute("USER_IN_SESSION");
if (user == null) {
	resp.sendRedirect("/login.jsp");
	return;
}

注销

注销很简单,可以单独写一个 Servlet 处理,也可以在 JSP 中写 Java 代码,当然后者更简单:
只需要在 login.jsp 中添加:

扫描二维码关注公众号,回复: 10771216 查看本文章
<%
	//销毁session
	session.invalidate();
%>

当然需要将注销登录的超链接指向 login.jsp 因此当再次访问 login.jsp 的时候,就会清除 session 的内容。

<div align="center">
	当前登录用户${sessionScope.USER_IN_SESSION.username} 
	<a href="/login.jsp">注销登录</a>
</div>
发布了56 篇原创文章 · 获赞 23 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_42650988/article/details/104100925