package com.aaa.filter;import java.io.IOException;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.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;/** * 一、创建一个filter类 * 1. 就是普通的java类 实现filter * 2.filter 配置 ** *filter的类名 *com.aaa.filter.FilterDemo.filter的类名 这里是相对路径 你自己定义的包名+filter类名 ** * * * requesturi.contains("login.jsp") * contanis 的包含判断 * 如果前面的字符串包含后边的login 就返回true 放行 * 否则就返回false 拦截 */public class LanJieDemo implements Filter { public LanJieDemo() { } public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { /* *filter 过滤器 放行 和拦截 * getSession 是servletRequest 子类的方法需要先进行类型转换,才能使用。 * 使用之前先判断 */ HttpServletRequest req=(HttpServletRequest)request; HttpServletResponse reps=(HttpServletResponse)response; HttpSession session = req.getSession(); Object user = session.getAttribute("u"); if (user!=null) { chain.doFilter(req, reps); }else { //将不需要拦截的资源配置 添加到string数组中 String [] arr= {"login.jsp","UserLoginServlet","register","Register","logout.jsp","Logout"}; //通过req.getrequesturl 获得本次请求的地址 String requestURI = req.getRequestURI(); //定义 Boolean类型变量tag = false boolean tag=false; //foreach 便利我们定义的string数组 里面都是不需要拦截的资源 for (String str : arr) { //如果本次请求的地址在 string数组中 就将tag=true if (requestURI.contains(str)) { tag=true; break; //结束循环! } } //true 就放行 if (tag) { chain.doFilter(req, reps); }else { //进行拦截 回到登录界面! reps.sendRedirect("login.jsp"); } }filter的类名 /* URL在这里设置 需要拦截的路径 /* 是拦截所有! *