jsp中的过滤器

一、过滤器

import org.apache.commons.lang3.StringUtils;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;

/**
 * 过滤器的生命周期
 * 1、初始化
 * 当容器第一次加载该过滤器时,init() 方法将被调用。该类在这个方法中包含了一个指向 Filter Config 对象的引用。
 * 2、过滤
 * 过滤器的大多数时间都消耗在这里。doFilter方法被容器调用,同时传入分别指向这个请求/响应链中的 Servlet Request、Servlet Response 和 Filter Chain 对象的引用。
 * 然后过滤器就有机会处理请求,将处理任务传递给链中的下一个资源(通过调用 Filter Chain 对象引用上的 doFilter方法),之后在处理控制权返回该过滤器时处理响应。
 * 3、析构
 * 容器紧跟在垃圾收集之前调用 destroy()方法,以便能够执行任何必需的清理代码。
 * **/

public class myFilter implements Filter {
    //该方法由Web容器调用以向过滤器指示它正在停用服务。
    public void destroy() {
    }
    //由于是在链末端的客户端请求,所以每当通过链路传递请求/响应对时,容器就会调用此方法。
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        String ipAddress = req.getRemoteAddr();
        //获得IP 与 时间
        System.out.println("IP " + ipAddress + ", Time " + new Date().toString());
        /**
         * 他的作用是将请求转发给过滤器链上下一个对象。这里的下一个指的是下一个filter,
         * 如果没有filter那就是你请求的资源。 一般filter都是一个链,web.xml 里面配置了几个就有几个,一个一个的连在一起。
         * chain.doFilter(req, resp);
         */
        //可以用来解决登录问题
        if(((HttpServletRequest)req).getSession().getAttribute("username")!=null){
            //用户已经登录 转向下一个过滤器
            chain.doFilter(req,resp);
        }else{
            //用户未登录
            //获取位置
            String url=((HttpServletRequest)req).getRequestURI();
            //限制他的位置
            if(!StringUtils.endsWith(url, "login.jsp")){
                //继续请求
                chain.doFilter(req,resp);
            }else{
                //转到登录地址
                ((HttpServletResponse)resp).sendRedirect(((HttpServletRequest) req).getContextPath()+"/login.jsp");
            }
        }
    }
    //该方法由Web容器调用,向过滤器指示它正在投入使用。
    public void init(FilterConfig config) throws ServletException {
        //获取web.xml中的配置参数
        String urls=config.getInitParameter("urls");
        System.out.println("filter init");
        System.out.println(urls);

    }

}

二、xml的配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <!--filter 一般放在最顶端-->
    <filter>
        <filter-name>myFilter</filter-name>
        <filter-class>myFilter</filter-class>
        <init-param>
            <!--使用这个方法获取参数config.getInitParameter("urls")-->
            <param-name>urls</param-name>
            <param-value>HAHAHAHHAHAHAHAHAH</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>myFilter</filter-name>
        <!--表示对所有的jsp都加过滤器-->
        <url-pattern>/*</url-pattern>
    </filter-mapping>

猜你喜欢

转载自blog.csdn.net/scbiaosdo/article/details/81393067
今日推荐