JavaWeb World (ten): simple login and logout

Simple login and logout

DAO implements username and password

First create the table t_user in the database :
t_user
Then implement 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);
	}
}

The above realizes the query test of the user name and password in the background.

Check login in 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>

Store login information in Session

We do n’t want to log in after a long time or other people use other browsers, so we need to save the logged-in user object in the session

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

Just this sentence, and then take it out in JSP:

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

Of course, you can also set attributes such as session survival time, which is omitted here.
Then you need to check the login list display page and add product page, if you do not log in, you cannot access:

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

Logout

Logout is very simple, you can write a Servlet to handle, you can also write Java code in JSP, of course, the latter is simpler:
just add in login.jsp :

<%
	//销毁session
	session.invalidate();
%>

Of course, you need to point the login hyperlink to login.jsp, so when you access login.jsp again , the session content will be cleared.

<div align="center">
	当前登录用户${sessionScope.USER_IN_SESSION.username} 
	<a href="/login.jsp">注销登录</a>
</div>
Published 56 original articles · Like 23 · Visits 20,000+

Guess you like

Origin blog.csdn.net/qq_42650988/article/details/104100925