9.20JavaWeb之FilterConfig接口

FilterConfig的实现方式

由容器实现

FilterConfig的作用

用于在过滤器初始化期间向其传递信息,容器将它作为参数传入过滤器的 init() 方法中。通过 filterConfig 对象就可以获得 Filter 的初始化参数。

FilterConfig接口当中的方法:

返回值类型 方法 描述
String getInitParameter(String name) 根据初始化参数名 name,返回对应的初始化参数值。
Enumeration getInitParameterNames() 返回过滤器的所有初始化参数名的枚举集合。
ServletContext getServletContext() 返回 Servlet 上下文对象的引用。
String getFilterName() 返回过滤器的名称。

Practice

登录html:

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>This is a Login Html</title>
</head>
<body>
 <form action="/HttpServletRequestDemo_war_exploded/LoginNo2" method="post">
     <table border="1" width="80%">
         <tr>
           <td colspan="2" align="center">
            JunkingBoy
           </td>
         </tr>
         <tr>
           <td>
            账号:
           </td>
           <td>
             <input type="text" name="username" />
           </td>
         </tr>
         <tr>
           <td>
            密码:
           </td>
           <td>
             <input type="password" name="password" />
           </td>
         </tr>
         <tr>
           <td colspan="2" align="center">
             <input type="submit" value="提交" />
           </td>
         </tr>
     </table>
 </form>
</body>
</html>

登陆验证的Servlet:

package com.example.HttpServletRequestDemo;

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 java.io.IOException;

/**
* 登录的Servlet类
* @since JDk 1.8
* @date 2021/09/20
* @author Lucifer
*/
@WebServlet(name = "login", value = "/login")
public class LoginServletNo2 extends HttpServlet {
   //设置UID
   private static final long serialVersionUID = 1L;

   //无参构造器
   public LoginServletNo2(){
       super();
  }

   //Get方法
   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //设置响应字符集
       resp.setContentType("text/html;charset=UTF-8");
       //输出内容到控制台
       resp.getWriter().write(
               "<h1 align=\"center\">JunkingBoy Welcome you</h1>"
      );
  }

   //Post
   @Override
   protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       doGet(req, resp);
  }
}

登录验证的过滤器:

package com.example.HttpServletRequestDemo;

import javax.servlet.*;
import java.io.IOException;
import java.util.Enumeration;

/**
* 定义一个实现了Filter接口的过滤器类,用于体验FilterConfig接口的用法
* @since JDk 1.8
* @date 2021/09/20
* @author Lucifer
*/
public class BlackListFilter implements Filter {
   //定义属性
   private FilterConfig fConfig;

   //实现接口当中的方法
   @Override
   public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
       //设置响应字符集
       resp.setContentType("text/html;charset=UTF-8");
       //登录成功的判断
       Boolean success = true;
       //获取前台登录的账号信息
       String name = req.getParameter("username");
       //获取过滤器当中的初始化的参数
       Enumeration<String> blackListName = fConfig.getInitParameterNames();
       //判断前台登录账号是否为空
       if (name == null || "".equals(name)){
           resp.getWriter().write("用户名不能为空!");
      }else {
           //账号不为空,循环遍历是否在黑名单
           while (blackListName.hasMoreElements()){
               //黑名单的账号则不允许登录
               if (fConfig.getInitParameter(blackListName.nextElement()).equals(name)){
                   success = false;
              }
          }
           if (success){
               //交给下一个过滤器
               chain.doFilter(req, resp);
          }else {
               resp.getWriter().write(
                       "<h1 align=\"center\" style=\"font-family:arial;color:red;\">黑名单,不允许登录。</h1>\n"
              );
          }
      }
  }

   //初始化方法
   @Override
   public void init(FilterConfig filterConfig) throws ServletException {
  }
}

 

It's a lonely road!!!