filter-本身的理解

在配置filter中的攔截功能時候 ,咱們在web.xml中進行配置文件。filter過濾文件有系統本身帶有的,還有就是咱們手寫的filter文件。網頁調用servlter的時候,咱們能夠在此以前調用filter文件進行過濾而後在執行active裏面的方法java

1.要想一個類文件成爲一個過濾器文件,着該類實現java.selver.filter的接口。web

建立filter類要分爲兩個步驟api

  創建filter處理類 服務器

     FilterConfig能夠獲取部署描述符文件(web.xml)中分配的過濾器初始化參數。session

     FilterConfig對象提供對servlet環境及web.xml文件中指派的過濾器名的訪問。app

FilterConfig對象具備一個getInitParameter方法,它可以訪問部署描述符文件(web.xml)中分配的過濾器初始化參數。jsp

web.xml文件配置Filterthis

 

實現接口的3個方法編碼

《在此要看filter的api裏面的方法》url

 

1.1 init(FilterConfig filterConfid);

  (服務器剛剛啓動是會建立實例,這   個方法獲得調用)這個方法能夠讀取web.xml中的servlet過濾的初始化參數

 

1.2 doFilter(ServletResquest request,ServletReaponse reponse,FilterChain chain);

   ServletResquest 是接口 要用httpServletResquest的接口繼承的  而   chain.toFilter();//chain.doFilter(request, response);  請求迴轉的方法

1.3 destroy();

下面是直接到頁面

//res.sendRedirect("../failure.jsp");

下面這個是經過讀取Filter文件進行跳轉

//res.getRequestDispatcher(login).forward(request, response);

實例

 

package com.ljq.servlet;

 

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.HttpSession;

 

public class AuthorityFilter implements Filter {

    private FilterConfig config;

   

    // 實現初始化方法

    public void init(FilterConfig config) {

        this.config = config;

    }

 

    // 實現銷燬方法

    public void destroy() {

        this.config = null;

    }

 

    // 執行過濾的核心方法

    public void doFilter(ServletRequest request, ServletResponse response,

            FilterChain chain) throws IOException, ServletException {

        // 獲取該Filter的配置參數

        String encoding = config.getInitParameter("encoding");

        String login = config.getInitParameter("login");

       

        // 設置request編碼用的字符集

        request.setCharacterEncoding(encoding);

        HttpServletRequest req = (HttpServletRequest) request;

       //獲取session對象

        HttpSession session = req.getSession();

        // 獲取客戶請求的路徑

        String requestPath = req.getServletPath();

       

       

        // 若是session範圍的user爲null,即代表沒有登陸

        // 且用戶請求的既不是登陸頁面,也不是處理登陸的頁面

        if (session.getAttribute("username") == null

                && !requestPath.endsWith(login)) {

            // forward到登陸頁面

            request.setAttribute("A", "您尚未登陸");

            request.getRequestDispatcher

(login).forward(request, response);

        }

        // 放行請求

        else {

            chain.doFilter(request, response);

        }

    }

}

 

Web.xml的實體類

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <!-- 定義Filter -->

    <filter>

        <filter-name>authority</filter-name>

        <filter-class>com.ljq.servlet.AuthorityFilter</filter-class>

        <!-- 下面3個init-param元素配置了3個參數 -->

        <init-param>

            <param-name>encoding</param-name>

            <param-value>UTF-8</param-value>

        </init-param>

        <init-param>

            <param-name>login</param-name>

            <param-value>/login.jsp</param-value>

        </init-param>

    </filter>

    <filter-mapping>

        <filter-name>authority</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

 

 

    <welcome-file-list>

        <welcome-file>index.jsp</welcome-file>

    </welcome-file-list>

</web-app>

文件是讀取web.xml裏面的<init-param></init-param>裏面的屬性  param-name獲得value的值

也能夠這樣子的格式

下面只有一個過濾文件

<filter> 

 

    <!-- Filter 的名字 --> 

 

    <filter-name>security</filter-name> 

 

    <!-- Filter 的實現類 --> 

 

<filter-class> test.filter.SecurityFilter</filter-class>

 

</filter> 

 

<!-- 定義Filter 攔截地址 --> 

 

<filter-mapping> 

 

    <!-- Filter 的名字 --> 

 

    <filter-name> security </filter-name> 

 

    <!-- Filter 負責攔截的URL --> 

 

    <url-pattern>/security/*</url-pattern> 

 

</filter-mapping>

相關文章
相關標籤/搜索