天天看點

Java Filter過濾器(idea)

1.配置過濾器

  • xml配置: 在web.xml檔案中寫入配置資訊 配置順序為監聽器-過濾器-servlet
<!--配置過濾器
    filter-name:過濾器名稱
    filter-class:過濾器所在路徑
    init-param:配置config對象參數
    param-name:參數名
    param-value:參數值-->
        <filter>
        <filter-name>filterusers</filter-name>
        <filter-class>com.test5.filterusers</filter-class>
        <init-param>
            <param-name>ip</param-name>
            <param-value>192.168.*.*</param-value>
        </init-param>
        </filter>
 <!--比對過濾器作用範圍url-pattern:作用的url位址-->
    <filter-mapping>
        <filter-name>filterusers</filter-name>
        <url-pattern>/loginfloder/*</url-pattern>
    </filter-mapping>   
           
  • 注釋配置:
/*
* 在過濾器類前使用@WebFilter()注釋
* filterName:名稱
* urlPatterns:過濾器作用url位址
* initParams:初始化參數,以WebInitParam()形式存入
* */
@WebFilter(filterName = "filterusers",urlPatterns ="/loginfloder/*",
        initParams ={@WebInitParam(name="ip",value = "192.168.*.*")} )
           
無論是那種配置方式,過濾器隻需配置一次即可
           

2.過濾器實作方法以及生命周期

  • init(FilterConfig config)方法(初始化階段):初始化過濾器,将配置檔案中的參數配置資訊寫入過濾器,即将config對象中的資訊寫入過濾器,具體操作如下:
  • doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)方法(運作階段): 完成實際的過濾操作,當浏覽器通路的url位址與過濾器映射url位址相比對時,執行該方法,FilterChain對象執行後續操作
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest request=(HttpServletRequest)req;
        HttpServletResponse response=(HttpServletResponse)resp;
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        PrintWriter out=resp.getWriter();
        if(request.getSession().getAttribute("user")==null){
            out.println("<script>if(confirm('請先登入')){window.location.href='/index.jsp'}</script>");
        }
        else{
            chain.doFilter(req, resp);
        }
    }
           
  • destroy()方法(銷毀階段): 在銷毀過濾器之前執行該方法

3.常見問題

  • 過濾器映射的url頁面應該設定為防止緩存,否則在浏覽器加載該頁面時會使下一次通路時直接通路緩存頁面,進而使過濾器失效
<meta charset="UTF-8">
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Expires" content="0">
    <meta http-equiv="Cache-Control" content="no-cache">