❶ servlet過濾器問題
當然可抄以了,分別定義兩個java文件,比如:EncodingFilter(解決編碼)和LoginFilter(解決用戶登錄),
但是必須在web.xml里分別指出. 就行了,
注意:LoginFilter最好不使用/*,最好是/LoginFilter/*(LoginFilter也可以是別的).
這樣就好用了,我試也成功了
❷ servlet過濾器有什麼作用,一般用在什麼地方
1.什麼叫過濾器呢?
過濾器就是可以對瀏覽器向jsp,servlet,html等這些web資源發出請求和
伺服器回應給瀏覽器的內容,他可以進行過濾。這個過濾過程中可以攔截瀏覽
器發出的請求和伺服器回應給瀏覽器的內容。攔截之後,就可以進行查看,並且
可以對攔截內容進行提取,或者進行修改。
Servlet過濾器攔截請求和響應,以便查看,提取或操作客戶機和伺服器之間
交換數據。
2.Servlet過濾器的用途:
用戶認證與授權管理:我們開發一個web應用,肯定有不同許可權的用戶,有管理員,有普通用戶。而管理員又可能分為一級管理員,二級管理員,三級管理員。每一級管理員可能又有不同的管理許可權操作,訪問不同的資源。過去我們可能都是在jsp頁面,servlet中加以許可權的控制。通過session,看他是否有這個許可權,如果有,則讓他操作某個資源。這些都是些共性。那麼現在我們就可以把他提取出來。讓他通過過濾器來實現;用戶來訪問一個資源,我們通過過濾器來過濾這個請求,在程序中判斷是否有許可權來訪問這個資源;
有,則讓他去訪問,沒有,就讓他轉到另外一個頁面。這樣通過過濾器就實現了授權管理;
統計web應用的訪問量,和訪問的命中率,報告;
實現web應用的日誌處理功能;
實現數據壓縮功能;
對傳輸的數據進行加密;
實現XML文件的XSLT轉換;
❸ Servlet過濾器
主要用於伺服器和資料庫之間交互的過濾,比如:頁面上不能顯示中文,可以加一個EncodingFilter,幫助轉碼!
請求是客戶端向伺服器request數據,響應是伺服器向客戶端respose數據,他們之間的格式等可能存在差異,所以需要轉換!
❹ 編寫servlet過濾器時下面哪個介面用於調用過濾器連接
Filter簡介
Filter稱濾器Servlet技術實用技術Web發員通Filter技術web伺服器管理所web資源:例Jsp,
Servlet, 靜態圖片文件或靜態 html
文件等進行攔截實現些特殊功能例實現URL級別許可權訪問控制、濾敏詞彙、壓縮響應信息等些高級功能
主要用於用戶請求進行預處理HttpServletResponse進行處理使用Filter完整流程:Filter用戶請求進行預處理接著請求交給Servlet進行處理並響應Filter再伺服器響應進行處理
Filter功能
HttpServletRequest達 Servlet 前攔截客戶HttpServletRequest 根據需要檢查HttpServletRequest修改HttpServletRequest 數據
HttpServletResponse達客戶端前攔截HttpServletResponse 根據需要檢查HttpServletResponse修改HttpServletResponse數據
何藉助Filter實現攔截功能
Filter介面doFilter發員編寫Filter並配置哪web資源進行攔截Web伺服器每調用web資源service前都先調用filterdoFilter該內編寫代碼達目:
調用目標資源前讓段代碼執行
否調用目標資源(即否讓用戶訪問web資源)
web伺服器調用doFilter傳遞filterChain象進filterChain象filter介面重要象提供doFilter發員根據需求決定否調用調用該則web伺服器調用web資源service即web資源訪問否則web資源訪問
Filter發兩步走
編寫java類實現Filter介面並實現其doFilter
web.xml文件編寫filter類進行注冊並設置所能攔截資源
web.xml配置各節點介紹:
指定濾器
用於濾器指定名字該元素內容能空
元素用於指定濾器完整限定類名
元素用於濾器指定初始化參數元素指定參數名字指定參數值
濾器使用FilterConfig介面象訪問初始化參數
元素用於設置 Filter 所負責攔截資源Filter攔截資源通兩種式指定:Servlet 名稱資源訪問請求路徑
元素用於設置filter注冊名稱該值必須元素聲明濾器名字
設置 filter 所攔截請求路徑(濾器關聯URL式)
指定濾器所攔截Servlet名稱
指定濾器所攔截資源 Servlet 容器調用式REQUEST,INCLUDE,FORWARDERROR默認REQUEST用戶設置元素用指定 Filter 資源種調用式進行攔截
元素設置值及其意義
REQUEST:用戶直接訪問頁面Web容器調用濾器目標資源通RequestDispatcherinclude()或forward()訪問該濾器調用
INCLUDE:目標資源通RequestDispatcherinclude()訪問該濾器調用除外該濾器調用
FORWARD:目標資源通RequestDispatcherforward()訪問該濾器調用除外該濾器調用
ERROR:目標資源通聲明式異處理機制調用該濾器調用除外濾器調用
Filter鏈
web應用發編寫Filter些Filter組合起稱Filter鏈
web伺服器根據Filterweb.xml文件注冊順序決定先調用哪Filter第FilterdoFilter調用web伺服器創建代表Filter鏈FilterChain象傳遞給該doFilter發員調用FilterChain象doFilter則web伺服器檢查FilterChain象否filter則調用第2filter沒則調用目標資源
Filter命周期
public void init(FilterConfig filterConfig) throws ServletException;//初始化
我編寫Servlet程序Filter創建銷毀由WEB伺服器負責 web 應用程序啟web 伺服器創建Filter 實例象並調用其init讀取web.xml配置完象初始化功能續用戶請求作攔截准備工作(filter象創建init執行)發員通init參數獲代表前filter配置信息FilterConfig象
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException;//攔截請求
完實際濾操作客戶請求訪問與濾器關聯URL候Servlet濾器先執行doFilterFilterChain參數用於訪問續濾器
public void destroy();//銷毀
Filter象創建駐留內存web應用移除或伺服器停止才銷毀Web容器卸載 Filter 象前調用該Filter命周期僅執行釋放濾器使用資源
FilterConfig介面
用戶配置filter使用filter配置些初始化參數web容器實例化Filter象調用其init封裝filter初始化參數filterConfig象傳遞進發員編寫filter通filterConfig象獲內容:
String getFilterName();//filter名稱
String getInitParameter(String name);//返部署描述指定名稱初始化參數值存返null.
Enumeration getInitParameterNames();//返濾器所初始化參數名字枚舉集合
public ServletContext getServletContext();//返Servlet文象引用
Filter使用案例
使用Filter驗證用戶登錄安全控制
前段間參與維護項目用戶退系統再址欄訪問歷史根據url仍能夠進入系統響應頁面我檢查發現請求未進行濾驗證用戶登錄添加filter搞定問題
先web.xml配置
SessionFilter
com.action.login.SessionFilter
logonStrings
/project/index.jsp;login.do
includeStrings
.do;.jsp
redirectPath
/index.jsp
disabletestfilter
N
SessionFilter
/*
接著編寫FilterServlet
package com.action.login;
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.HttpServletResponseWrapper;
/**
* 判斷用戶否登錄,未登錄則退系統
*/
public class SessionFilter implements Filter {
public FilterConfig config;
public void destroy() {
this.config = null;
}
public static boolean isContains(String container, String[] regx) {
boolean result = false;
for (int i = 0; i < regx.length; i++) {
if (container.indexOf(regx[i]) != -1) {
return true;
}
}
return result;
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest hrequest = (HttpServletRequest)request;
HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper((HttpServletResponse) response);
String logonStrings = config.getInitParameter("logonStrings"); // 登錄登陸頁面
String includeStrings = config.getInitParameter("includeStrings"); // 濾資源綴參數
String redirectPath = hrequest.getContextPath() + config.getInitParameter("redirectPath");// 沒登陸轉向頁面
String disabletestfilter = config.getInitParameter("disabletestfilter");// 濾器否效
if (disabletestfilter.toUpperCase().equals("Y")) { // 濾效
chain.doFilter(request, response);
return;
}
String[] logonList = logonStrings.split(";");
String[] includeList = includeStrings.split(";");
if (!this.isContains(hrequest.getRequestURI(), includeList)) {// 指定濾參數綴進行濾
chain.doFilter(request, response);
return;
}
if (this.isContains(hrequest.getRequestURI(), logonList)) {// 登錄頁面進行濾
chain.doFilter(request, response);
return;
}
String user = ( String ) hrequest.getSession().getAttribute("useronly");//判斷用戶否登錄
if (user == null) {
wrapper.sendRedirect(redirectPath);
return;
}else {
chain.doFilter(request, response);
return;
}
}
public void init(FilterConfig filterConfig) throws ServletException {
config = filterConfig;
}
}
既完用戶所請求均要經Filter進行驗證用戶登錄
防止文亂碼濾器
項目使用spring框架前台JSP頁面Java代碼使用同字元集進行編碼候現表單提交數據或者傳/載文名稱文件現亂碼問題使用濾器
encoding
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceEncoding
false
encoding
/*
-
❺ 關於servlet過濾器的問題
向下是指向下一個過濾器,因為可能同時擁有多個過濾器,一個過濾器結束後需要傳給下一個過濾器,直到運行完所有的過濾器。
❻ 我寫的servlet過濾器有問題大家看看這是怎麼了謝謝
你的url-pattern應該是*或者*.jsp了吧,反正過濾器包含了index.jsp,每次訪問都經過這個過濾器,然後
if(session.getAttribute("user")==null){一直成立,所以瀏覽器一直在訪問這個index.jsp,每次都被重定向到index.jsp,就出現了你說的那種情況。
你現在有兩種方式解決這個問題
1、url-pattern改改,反正就是不讓包含index.jsp
2、改filter的代碼,
if(session.getAttribute("user")==null){
這個判斷加一個條件if(session.getAttribute("user")==null && !"/index.jsp".equals(從request獲取的URI)){,//反正就這意思,具體訪問那個index.jsp的URI放那就行了,你可以先列印出來看看是什麼
你可以把你web.xml的filter配置粘貼出來看看
❼ servlet怎麼使用多個過濾器
只需要一個過濾器,過濾所有URL,在filter類中做如下操作:代碼參考,相信你會懂的。
publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,
FilterChainchain)throwsIOException,ServletException{
HttpServletRequestreq=(HttpServletRequest)request;
Stringuri=((HttpServletRequest)request).getRequestURI();
List<String>urilist=newArrayList<String>();
urilist.add("/UserLoginReg/DoRegisterServlet");
urilist.add("/UserLoginReg/UserManageServlet");
urilist.add("/UserLoginReg/FindUserServlet");
if(urilist.contains(uri)==true){
HttpSessionsession=req.getSession(true);
//從session里取的用戶名信息
UserBeanuser=(UserBean)session.getAttribute("userall");
//判斷如果沒有取到用戶信息,就跳轉到登陸頁面
if(user==null){
//跳轉到登陸頁面
request.setAttribute("info","請先登錄");
req.getRequestDispatcher("WEB-INF/jsp/login.jsp").forward(request,
response);
}else{
//已經登陸,繼續此次請求
chain.doFilter(request,response);
}
}else{
//已經登陸,繼續此次請求
chain.doFilter(request,response);
}
}
❽ 編寫servlet過濾器是,哪個介面用於調用過濾器鏈中下一個過濾器
1、首先要明確攔截器、濾器
1.1 攔截器:
攔截器AOP(Aspect-Oriented Programming)用於某或欄位訪問前進行攔截前或加入某些操作攔截AOP種實現策略
Webwork文文檔解釋——攔截器態攔截Action調用象提供種機制使發者定義action執行前執行代碼action執行前阻止其執行同提供種提取action重用部式
談攔截器詞家應該知道——攔截器鏈(Interceptor ChainStruts 2稱攔截器棧 Interceptor Stack)攔截器鏈攔截器按定順序聯結條鏈訪問攔截或欄位攔截器鏈攔截器按其前定義順序調用
1.2. 攔截器實現原理:
部候攔截器都通代理式調用Struts 2攔截器實現相簡單請求達Struts 2ServletDispatcherStruts 2查找配置文件並根據其配置實例化相攔截器象串列表(list)調用列表攔截器
1.3 濾器
濾器程序先於與相關servlet或JSP頁面運行伺服器濾器附加或servlet或JSP頁面並且檢查進入些資源請求信息濾器作選擇:
①規式調用資源(即調用servlet或JSP頁面)
②利用修改請求信息調用資源
③調用資源發送響應客戶機前其進行修改
④阻止該資源調用代轉其資源返特定狀態代碼或替換輸
1.4 Servlet濾器基本原理
Servlet作濾器使用客戶請求進行處理處理完交給濾器處理客戶請求濾鏈逐處理直請求發送目標止例某網站提交修改注冊信息網頁用戶填寫完修改信息並提交伺服器進行處理需要做兩項工作:判斷客戶端否效;提交數據進行統編碼兩項工作由兩濾器組濾鏈進行處理濾器處理功提交數據發送終目標;濾器處理功視圖派發指定錯誤頁面
-
❾ 編寫servlet過濾器,下面哪個介面用於調用過濾器鏈中下一個過濾器
一個filter必須實現javax。servlet。Filter介面定義的三...個過濾器的過濾條件時該請求就會交給這個過濾器