Servlet中的Filter 過濾器的簡單使用!


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");
            }
        }
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM