Javax.Servet 包中提供了一个 FilterCofig 接口,它与 ServletConfig 接口相似,用于在过滤器初始化期间向其传递信息。
FilterConfig 接口由容器实现,容器将它作为参数传入过滤器的 init() 方法中。通过 filterConfig 对象就可以获得 Filter 的初始化参数。
在 FilterConfig 接口中,定义了 4 个方法,如下表。
返回值类型 | 方法 | 描述 |
---|---|---|
String | getInitParameter(String name) | 根据初始化参数名 name,返回对应的初始化参数值。 |
Enumeration | getInitParameterNames() | 返回过滤器的所有初始化参数名的枚举集合。 |
ServletContext | getServletContext() | 返回 Servlet 上下文对象的引用。 |
String | getFilterName() | 返回过滤器的名称。 |
示例
创建名称为 BlackListFilter 的类,代码如下。
package swadian.servlet.filter;
import javax.servlet.DispatcherType;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import java.io.IOException;
import java.util.Enumeration;
/**
* @author swadian
* @date 2022/2/15
* @Version 1.0
*/
@WebFilter(dispatcherTypes = {
DispatcherType.REQUEST,
DispatcherType.FORWARD,
DispatcherType.INCLUDE,
DispatcherType.ERROR
},
urlPatterns = {"/LoginServlet"},
initParams = {// 黑名单配置
@WebInitParam(name = "blackList1", value = "mike"),
@WebInitParam(name = "blackList2", value = "bob"),
})
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<String> blackListNames = fConfig.getInitParameterNames();
//判断前台登录账号是否为空
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("<h3 align=\"center\" style=\"font-family:arial;color:red;\">温馨提示:您的账号存在风险,暂时不能为您提供服务! </h3>\n");
}
}
}
@Override
public void destroy() {
}
public void init(FilterConfig fConfig) {
this.fConfig = fConfig;
}
}
创建名称为 LoginServlet 的类,代码如下。
package swadian.servlet.filter;
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 swadian
* @date 2022/2/14
* @Version 1.0
*/
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
//设置向页面输出的格式与编码
response.getWriter().write("<h3>LoginServlet 欢迎您 !</h3>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
doGet(request, response);
}
}
启动 Tomcat,在浏览器地址栏中输入“http://localhost:8080/web/LoginServlet?username=bob”,结果如下。// 被过滤器拦截
附:web.xml 中配置过滤器以及初始化参数,配置方式代码如下。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<filter>
<filter-name>BlackListFilter</filter-name>
<filter-class>swadian.servlet.filter.BlackListFilter</filter-class>
<init-param>
<param-name>blackList1</param-name>
<param-value>bob</param-value>
</init-param>
<init-param>
<param-name>blackList2</param-name>
<param-value>mike</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>BlackListFilter</filter-name>
<url-pattern>/LoginServlet</url-pattern>
</filter-mapping>
</web-app>