Filter
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.demo.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/main.jsp</url-pattern>
</filter-mapping>
</web-app>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>main.jsp</title>
</head>
<body>
<h1>登录成功,欢迎${sessionScope.userName}使用!</h1>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>login.jsp</title>
</head>
<body>
<form action="login" method="post">
用户名:<input type="text" name="userName"/> <br>
密 码:<input type="password" name="password"/> <br>
<input type="submit" value="登录" />
</form>
</body>
</html>
package com.demo;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name="LoginServlet", urlPatterns = "/login")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String userName = req.getParameter("username");
System.out.println("接收到的用户名:" + userName);
String password = req.getParameter("password");
System.out.println("接收到的密码:" + password);
// 使用固定的用户名和密码来进行登录的校验
if("admin".equals(userName) && "123456".equals(password)) {
System.out.println("登陆成功,欢迎使用");
// 存储用户名信息
req.getSession().setAttribute("userName", userName);
resp.sendRedirect("main.jsp");
} else {
System.out.println("用户名或密码错误!请重新输入。。。");
req.getRequestDispatcher("login.jsp").forward(req, resp);
}
}
}
package com.demo;
import jakarta.servlet.*;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import java.io.IOException;
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 实现对用户访问主页面的过滤操作,也就是只有用户登录后才能访问主页面,否则一律拦截
// 判断session是否有用户名信息,若没有则进行拦截,否则放行
HttpServletRequest request = (HttpServletRequest) servletRequest;
// 获取session对象
HttpSession session = request.getSession();
Object userName = session.getAttribute("userName");
// 获取servlet的请求路径
String servletPath = request.getServletPath();
// 若没有登录,则回到登录页面
if (null == userName && servletPath.contains("login")) {
servletRequest.getRequestDispatcher("login.jsp").forward(servletRequest, servletResponse);
} else {
// 已经登录,则放行
filterChain.doFilter(servletRequest, servletResponse);
}
}
@Override
public void destroy() {
}
}
Filter接口
FilterConfig接口
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("init");
System.out.println("获取到的过滤器名称为:" + filterConfig.getFilterName());
String userName = filterConfig.getInitParameter("userName");
System.out.println("获取到执行初始化参数的数值为:" + userName);
Enumeration<String> initParameterNames = filterConfig.getInitParameterNames();
while (initParameterNames.hasMoreElements()) {
String s = initParameterNames.nextElement();
System.out.println("获取到的初始化参数名为:" + s);
}
ServletContext servletContext = filterConfig.getServletContext();
System.out.println("获取到的上下文对象是:" + servletContext);
}
