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

猜你喜欢

转载自www.cnblogs.com/ZXF6/p/11099259.html