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 {
}
}