Les cookies, les sessions et les filtres sont généralement utilisés dans les applications Web. Les cookies et les sessions sont utilisés pour enregistrer certaines données. Les filtres se produisent après que le navigateur envoie une demande et avant qu'une demande spécifique ne soit exécutée en arrière-plan. La raison pour laquelle ces trois éléments sont réunis est qu'ils sont souvent utilisés ensemble, comme certains programmes de connexion.
Le cookie est un mécanisme de navigateur, et la session est un mécanisme de serveur, mais en fait les cookies sont également générés par le serveur, puis renvoyés au navigateur, non générés par le navigateur lui-même. Lorsque le navigateur envoie une requête, s'il dispose d'un cookie valide, il apportera ce cookie avec lui.
La raison pour laquelle les cookies sont utilisés est que le protocole http est à l'origine un protocole sans état, ce qui signifie que via le protocole http lui-même, le serveur ne peut pas déterminer si le navigateur a déjà visité le site.
Le filtre et le servlet sont écrits de la même manière. Lors de l'écriture du code pertinent, vous devez implémenter l'interface Filter et réécrire les méthodes pertinentes. Habituellement, la méthode doFilter est celle qui change le plus. Si le code du filtre doit être efficace après son écriture, il doit être configuré dans web.xml tout comme la configuration du servlet.
Ce qui suit est un exemple de code de connexion simple qui combine cookie, session, servlet et filtre :
Définissez une classe d'entité utilisateur pour agir en tant que données de base de données est utilisé ici pour garantir que seul le mode Singleton est utilisé. il existe un objet Instance :
package models; /** * 用户信息实体类 * * @author tuzongxun123 * */ public class UserModel { private String userName; private String password; // 单例模式,保证只有一个用户对象实例 public static UserModel getInstance() { UserModel user = new UserModel("zhangsan", "123456"); return user; } private UserModel(String userName, String pasword) { this.userName = userName; this.password = pasword; } public String getUserName() { return userName; } public String getPassword() { return password; } }
L'utilisateur se connecte et saisit l'interface index.jsp, et utilise la fonctionnalité jsp dans l'action du formulaire pour obtenir le chemin du projet :
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>cookieAndFilterTest</title> </head> <body> <form action="<%=request.getContextPath() %>/loginServlet" method="post"> userName:<input type="text" name="userName" /></br> password:<input type="password" name="password" /></br> <input type="submit" value="login"/> </form> </body> </html>
La servlet d'arrière-plan correspondante :
package servletTest; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import models.UserModel; public class LoginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String userName = req.getParameter("userName"); String password = req.getParameter("password"); // 模拟数据库数据 UserModel user = UserModel.getInstance(); String dbUserName = user.getUserName(); String dbPassword = user.getPassword(); if (dbUserName.equals(userName) && dbPassword.equals(password)) { // 用户名和密码都匹配,证明登陆成功,设置session和cookie HttpSession session = req.getSession(); session.setAttribute("userName", userName); session.setAttribute("password", password); Cookie cookie = new Cookie("userName", userName); Cookie cookie2 = new Cookie("password", password); // 设置cookie的存储时长 cookie.setMaxAge(60); cookie2.setMaxAge(60); // 把cookie发送给浏览器 resp.addCookie(cookie); resp.addCookie(cookie2); // 转发请求到用户列表 req.getRequestDispatcher("/userList").forward(req, resp); } else { // 转发请求到登陆页面 req.getRequestDispatcher("index.jsp").forward(req, resp); } ; } }
Demande redirigée après connexion ci-dessus :
package servletTest; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import models.UserModel; public class UserListServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { UserModel user = UserModel.getInstance(); //在浏览器中打印出用户列表书数据 resp.getWriter().write( "userName:" + user.getUserName() + "," + "password:" + user.getPassword()); } }
Configuration du projet web.xml :
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <!-- 访问时的项目名称 --> <display-name>cookieAndFilterTest</display-name> <!-- servlet配置 --> <servlet> <servlet-name>login</servlet-name> <servlet-class>servletTest.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/loginServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>userList</servlet-name> <servlet-class>servletTest.UserListServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>userList</servlet-name> <url-pattern>/userList</url-pattern> </servlet-mapping> <!-- 过滤器设置,浏览其发送请求后首先会走这里 --> <filter> <filter-name>loginFilter</filter-name> <filter-class>filterTest.FilterTest</filter-class> </filter> <filter-mapping> <filter-name>loginFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 输入项目名访问的默认页面 --> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
filtre java code :
package filterTest; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import models.UserModel; public class FilterTest implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 登陆请求、初始请求直接放行 HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse resp = (HttpServletResponse) response; String uri = req.getRequestURI(); if ("/cookieAndFilterTest/loginServlet".equals(uri) || "/cookieAndFilterTest/".equals(uri)) { // 放行 chain.doFilter(request, response); return; } // 不是登陆请求的话,判断是否有cookie Cookie[] cookies = req.getCookies(); if (cookies != null && cookies.length > 0) { String userName = null; String password = null; // 判断cookie中的用户名和密码是否和数据库中的一致,如果一致则放行,否则转发请求到登陆页面 for (Cookie cookie : cookies) { if ("userName".equals(cookie.getName())) { userName = cookie.getValue(); } if ("password".equals(cookie.getName())) { password = cookie.getValue(); } } UserModel user = UserModel.getInstance(); if (user.getUserName().equals(userName) && user.getPassword().equals(password)) { chain.doFilter(request, response); return; } else { // 重定向到登陆界面 req.getRequestDispatcher("/index.jsp").forward(req, resp); return; } } else { req.getRequestDispatcher("/index.jsp").forward(req, resp); return; } } @Override public void init(FilterConfig arg0) throws ServletException { } }
Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à tout le monde dans l'apprentissage de la programmation Java.
Pour plus d'articles liés à la combinaison des filtres cookie, session et java pour implémenter le programme de connexion, veuillez faire attention au site Web PHP chinois !