目录
一、Filter快速入门
二、Filter的执行流程
三、Filter使用细节
3.1 Filter拦截路径配置
3.2 过滤器链
四、案例——登录验证
package com.itheima.web.fiter;
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 {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
//判断访问资源路径是否和登录注册相关
String[] urls = {"/login.jsp","/imgs/","/css/","/loginServlet","/register.jsp","/register","/checkCodeServlet"};
HttpServletRequest req = (HttpServletRequest) request;
//获取当前访问的资源路径
String url = req.getRequestURL().toString();
//循环判断iter
for (String u : urls) {
if (url.contains(u)){
//找到了
//放行
chain.doFilter(request, response);
return;
}
}
//1.判断session中是否有user对象
HttpSession session = req.getSession();
Object user = session.getAttribute("user");
//2.判断user是否为Null
if (user != null){
//登陆过
//放行
chain.doFilter(request, response);
}else{
//没有登录,存储提示信息,拦截,并跳转到登陆界面
req.setAttribute("login_msg", "您尚未登录!");
req.getRequestDispatcher("/login.jsp").forward(request, response);
}
}
public void init(FilterConfig config) throws ServletException {
}
public void destroy() {
}
}