Javax.Servet 包中提供了一个 FilterCofig 接口,它与 ServletConfig 接口相似,用于在过滤器初始化期间向其传递信息。FilterConfig 接口由容器实现,容器将它作为参数传入过滤器的 init() 方法中。通过 filterConfig 对象就可以获得 Filter 的初始化参数。在 FilterConfig 接口中,定义了 4 个方法,如下表。
返回值类型
方法
描述
String
getInitParameter(String name)
根据初始化参数名 name,返回对应的初始化参数值。
Enumeration
getInitParameterNames()
返回过滤器的所有初始化参数名的枚举集合。
ServletContext
getServletContext()
返回 Servlet 上下文对象的引用。
String
getFilterName()
返回过滤器的名称。
示例
在 net.biancheng.www.filter 包中,创建名称为 BlackListFilter 的类,代码如下。
package net.biancheng.www.filter;
import javax.servlet.*;
import java.io.IOException;
import java.util.Enumeration;
/**
* 黑名单过滤器
*
* @author 编程帮 www.biancheng.net
*/
public class BlackListFilter implements Filter {
private FilterConfig fConfig;
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
response.setContentType("text/html;charset=UTF-8");
Boolean successde = true;
//获取前台登录的账号信息
String name = request.getParameter("username");
//获取过滤器中的初始化参数
Enumeration
//判断前台登录账号是否为空
if (name == null || "".equals(name)) {
response.getWriter().write("用户名不能为空");
} else {
//登录账号不为空,循环遍历黑名单
while (blackListNames.hasMoreElements()) {
//若登录账号是黑名单账号则不允许登录
if (fConfig.getInitParameter(blackListNames.nextElement()).equals(name)) {
successde = false;
}
}
if (successde) {
chain.doFilter(request, response);
} else {
response.getWriter().write("
温馨提示:您的存在风险,暂时不能为您提供服务
\n");}
}
}
public void init(FilterConfig fConfig) throws ServletException {
this.fConfig = fConfig;
}
}
在 net.biancheng.www.servlet 包中,创建名称为 LoginServlet 的类,代码如下。
package net.biancheng.www.servlet;
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;
/**
* @author 编程帮 www.biancheng.net
*/
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("
编程帮www.biancheng.net 欢迎您
");}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
在 web.xml 中配置过滤器以及初始化参数,代码如下。
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">
在 WebContent 目录下创建 login.html,代码如下。
启动 Tomcat,在浏览器地址栏中输入“http://localhost:8080/filterDemo/login.html”,结果如下。
如下图,填写表单信息。
点击提交按钮,结果如下图。
返回登录页,填写表单信息,如下图。
点击提交按钮,结果如下图。