文章目录
- 一、Filter概念
- 二、Filter快速入门
- 定义类,实现Filter接口,并重写其所有方法
- 三、Filter执行流程
- 四、Filter使用细节
- 1、Filter拦截路径配置
- 2、过滤器链
- 五、案例
一、Filter概念
二、Filter快速入门
定义类,实现Filter接口,并重写其所有方法
package com.itheima.web.filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;@WebFilter("/*")
public class FilterDemo implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {//1. 放行前,对 request数据进行处理System.out.println("1.FilterDemo...");//放行chain.doFilter(request,response);//2. 放行后,对Response 数据进行处理System.out.println("5.FilterDemo...");}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void destroy() {}
}
三、Filter执行流程
四、Filter使用细节
1、Filter拦截路径配置
2、过滤器链
过滤器放行顺序
package com.itheima.web.filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;@WebFilter("/*")
public class FilterDemo implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {//1. 放行前,对 request数据进行处理System.out.println("1.FilterDemo...");//放行chain.doFilter(request,response);//2. 放行后,对Response 数据进行处理System.out.println("5.FilterDemo...");}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void destroy() {}
}
package com.itheima.web.filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;//@WebFilter("/hello.jsp")
@WebFilter("/*")
public class FilterDemo2 implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {//1. 放行前,对 request数据进行处理System.out.println("2.FilterDemo...");//放行chain.doFilter(request,response);//2. 放行后,对Response 数据进行处理System.out.println("4.FilterDemo...");}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void destroy() {}
}
、
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><h1>hello JSP~</h1><%System.out.println("3.hello jsp");%></body>
</html>
五、案例
package com.itheima.web.filter;import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;/*** 登录验证的过滤器*/
@WebFilter("/*")
public class LoginFilter implements Filter {public void init(FilterConfig config) throws ServletException {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {HttpServletRequest req = (HttpServletRequest) request;//判断访问资源路径是否和登录相关String[] urls = {"/login.jsp","/imgs/","/css/","/loginServlet","/register.jsp","/registerServlet","/checkCodeServlet"};//获取当前访问的资源路径String url = req.getRequestURL().toString();//循环判断for (String u : urls) {if (url.contains(u)){//找到了//放行chain.doFilter(request, response);return;}}//1、判断session中是否有userHttpSession session = req.getSession();Object user = session.getAttribute("user");//2、判断user是否为nullif (user != null){//登录过了//放行chain.doFilter(request, response);}else {//没有登录,存储提示信息,拦截调整到登录页面req.setAttribute("login_msg","您尚未登录");req.getRequestDispatcher("/login.jsp").forward(req,response);}}public void destroy() {}
}