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> * <filter-name>filter的類名</filter-name> * <filter-class>com.aaa.filter.FilterDemo.filter的類名</filter-class> 這里是相對路徑 你自己定義的包名+filter類名 * </filter> * <filter-mapping> * <filter-name>filter的類名</filter-name> <url-pattern> /* </url-pattern> URL在這里設置 需要攔截的路徑 /* 是攔截所有! * </filter-mapping> * * * 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"); } }