Fileter过滤器
一、介绍
-
Filter是JavaWeb三大组件之一:Servlet、Listener、Filter
-
作用:拦截请求,过滤响应(权限检查、事务管理
-
权限检查:
- 例如在admin目录下的资源(HTML、JPG…)必须是管理员才能访问
- 进行xml设置拦截
- 使用步骤
-
编写一个类实现 Filter 接口
-
实现过滤方法doFilter()
-
到web.xml中进行配置拦截路径
-
二、Filter的生命周期
- FilterConfig类
- 每次创建Filter时,也会同时创建一个FilterConfig类,包含了Filter配置文件的信息
- FilterChain多个过滤器
三、工作原理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AM0cu7va-1658976978664)(https://s2.loli.net/2022/07/28/Fs4chPE3rnTx9Of.png)]
-
Filter过滤器的三种匹配方法
- 精准匹配
- 目录匹配
- 后缀名匹配
使用举例:
public class ManagerFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
Filter.super.init(filterConfig);
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//类型转换,为了使用session
HttpServletRequest httpServletRequest= (HttpServletRequest) servletRequest;
Object username = httpServletRequest.getSession().getAttribute("username");
if (username==null)//如果没有登录,强制跳转回登录页面
httpServletRequest.getRequestDispatcher("/login/index.html").forward(servletRequest,servletResponse);
else //如果登录成功,放行
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
Filter.super.destroy();
}
}