专业编程基础技术教程

网站首页 > 基础教程 正文

Filter过滤器(filter过滤器java)

ccvgpt 2024-07-30 20:51:45 基础教程 11 ℃

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);
}

Filter过滤器(filter过滤器java)

Tags:

最近发表
标签列表