Filter(过滤器)
文章目录
1、Filter 的基本作用
过滤器是对于访问资源请求的控制
2、Filter 的基本使用
注解 @WebFilter("/*")
这个表示对于所偶遇的请求都进行拦截
在实际的开发中,可以设置具体对于什么样的请求进行拦截
@WebFilter("/*")
public class FilterDemo implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("Filter...");
// 放行
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
3、Filter 的执行流程
在放行之前,放行之后都会执行一定的代码;
4、Filter 执行需要注意的细节
4.1、拦截路径的配置
@WebFilter("/*")
拦截资源的路径,不是浏览器访问资源的路径;
4.2、拦截路链(过滤器链)
多个过滤器之间的执行逻辑
5、案例小结 - 登录验证
@WebFilter("/*")
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig config) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpServletRequest req = (HttpServletRequest) request;
// 判断 session 中是否存在 user
HttpSession session = req.getSession();
Object user = session.getAttribute("user");
if (user != null) {
// 放行
chain.doFilter(request, response);
} else {
req.setAttribute("logib_msg", "你没有登录过");
// 跳转到登录页面
req.getRequestDispatcher("/login.jsp").forward(req, response);
}
}
@Override
public void destroy() {
}
}
在放行的时候,需要将前端的部分资源也要放行,不然会出现前端界面无法显示;
6、小结
通过 Filter 可以对于想要访问服务器资源的请求进行控制,在放行前以及放行后都可以写一定的运行逻辑;一定程度上,减轻了服务器的压力,使得系统的稳定性得到了提升;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!