在配置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>