攔截器與過濾器的區別以及他們的配置
1、
過濾器,是在java web中,你傳入的request,response提前過濾掉一些資訊,或者提前設定一些引數,然後再傳入servlet或者struts的 action進行業務邏輯,比如過濾掉非法url(不是login.do的地址請求,如果使用者沒有登陸都過濾掉),或者在傳入servlet或者 struts的action前統一設定字符集,或者去除掉一些非法字元
攔截器,是在面向切面程式設計的就是在你的service或者一個方法,前呼叫一個方法,或者在方法後呼叫一個方法比如動態代理就是攔截器的簡單實現,在你呼叫方法前打印出字串(或者做其它業務邏輯的操作),也可以在你呼叫方法後打印出字串,甚至在你丟擲異常的時候做業務邏輯的操作。
攔截器與過濾器的區別:
攔截器是基於java的反射機制的,而過濾器是基於函式回撥。
攔截器不依賴與servlet容器,過濾器依賴與servlet容器。
攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
攔截器可以訪問action上下文、值棧裡的物件,而過濾器不能訪問。
在action的生命週期中,攔截器可以多次被呼叫,而過濾器只能在容器初始化時被呼叫一次
執行順序:過濾前 – 攔截前 – Action處理 – 攔截後 – 過濾後。個人認為過濾是一個橫向的過程,首先把客戶端提交的內容進行過濾(例如未登入使用者不能訪問內部頁面的處理);過濾通過後,攔截器將檢查使用者提交資料的驗證,做一些前期的資料處理,接著把處理後的資料發給對應的Action;Action處理完成返回後,攔截器還可以做其他過程(還沒想到要做啥),再向上返回到過濾器的後續操作。
2、怎麼寫自定義攔截器<!-- 宣告一個為default的攔截器 -->
<package name="default" extends="struts-default">
<interceptors>
<interceptor name="auth" class="com.pb.intercept.AuthIntercepter"></interceptor>
<!-- 定義一個包含許可權檢查的攔截器棧 -->
<interceptor-stack name="mystack">
<interceptor-ref name="auth"/>
<!-- 定義攔截器棧包含defaultstack攔截器棧 -->
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<!-- 配置struts2框架執行時,預設執行自定義攔截器棧 -->
<default-interceptor-ref name="mystack"/>
<global-results>
<!-- 被攔截後調回登入頁面 -->
<result name="login">/login.jsp</result>
</global-results>
</package>
應用到宣告的包下,只要相應包下所有的action就會呼叫自定義的攔截器。
<package name="users" extends="default">
<!-- 登入 -->
<action name="login" class="userAction" method="login">
<result type="redirectAction">list</result>
<result name="input">/login.jsp</result>
</action>
</package>
寫攔截器類:
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.pb.domain.Users;
public class AuthIntercepter extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
Users loginUser=(Users) ActionContext.getContext().getSession().get("loginUser");
// 獲得當前方法名.
//String methodName = invocation.getInvocationContext().getName();
//獲取url,如果是login就是登陸時候響應的直接通過攔截返回方法,進入action中,
if(invocation.getProxy().getActionName().equals("login")){
//返回方法名,進入action
return invocation.invoke();
//如果獲得url不是login可能就是登陸成功了,判斷session中是否為空,不為空就是登陸成功的,
}else if(loginUser!=null){
return invocation.invoke();
//或者是非法url,直接 跳回登陸頁面
}else{
return "login";
}
}
}
3、怎麼編寫過濾器
Web.xml配置,以下欄位放在servlet下
<filter> <filter-name>sessionFilter</filter-name> <filter-class>com.FlyPig.util.filter_session</filter-class> </filter> <filter-mapping> <filter-name>sessionFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
3 import java.io.IOException; 4 5 import javax.servlet.Filter; 6 import javax.servlet.FilterChain; 7 import javax.servlet.FilterConfig; 8 import javax.servlet.ServletException; 9 import javax.servlet.ServletRequest; 10 import javax.servlet.ServletResponse; 11 import javax.servlet.http.HttpServletRequest; 12 import javax.servlet.http.HttpServletResponse; 13 import javax.servlet.http.HttpSession; 14 15 public class filter_session implements Filter { 16 private String encoding; 17 18 public filter_session() { 19 } 20 21 public void init(FilterConfig filterconfig) throws ServletException { 22 encoding = "utf-8"; 23 } 24 25 public void doFilter(ServletRequest servletrequest, 26 ServletResponse servletresponse, FilterChain filterchain) 27 throws IOException, ServletException { 28 servletrequest.setCharacterEncoding(encoding); 29 servletresponse.setCharacterEncoding(encoding); 30 HttpServletRequest req=(HttpServletRequest)servletrequest; 31 HttpSession session=req.getSession(); 32 HttpServletResponse resp=(HttpServletResponse) servletresponse; 33 34 String url=req.getRequestURI(); 35 System.out.println(url); 36 if(!url.equals("/FlyPig")&&!url.equals("/FlyPig/login.jsp")){ 37 if(session.getAttribute("username")==null||session.getAttribute("username")==""){ 38 resp.sendRedirect("login.jsp"); 39 return ; 40 } 41 } 42 43 44 filterchain.doFilter(servletrequest, servletresponse); 45 } 46 47 public void destroy() { 48 } 49 }
並附帶了一個ssh的專案具體攔截器配置就在專案中,大家可以下載下來看一下
相關推薦
攔截器與過濾器的區別以及他們的配置
1、 過濾器,是在java web中,你傳入的request,response提前過濾掉一些資訊,或者提前設定一些引數,然後再傳入servlet或者struts的 action進行業務邏輯,比如過濾掉非法url(不是login.do的地址請求,如果使用者沒有登陸都過濾掉),
關於攔截器與過濾器使用場景、攔截器與過濾器的區別以及配置整理
轉:http://blog.csdn.net/qq_36411874/article/details/53996873 攔截器與過濾器的區別總結: 過濾器在web.xml中配置: (1)因為一開始在過濾器中對映的url-pattern填寫路徑是*.actio
攔截器與過濾器的區別以及兩者的執行順序?
過濾器,是在java web中,你傳入的request,response提前過濾掉一些資訊,或者提前設定一些引數,然後再傳入servlet或者struts的 action進行業務邏輯,比如過濾掉非法url(不是login.do的地址請求,如果使用者沒有登陸都過濾掉),或者在傳入servlet或者 s
攔截器與過濾器的區別
攔截器 過濾器 interceptor filter 攔截器過濾器關鍵詞AOP、代理模式、反射機制、spring 函數回調、servlet、web原理反射機制函數回調容器不依賴servlet依賴servlet作用範圍只能對action請求起作用可以訪問action上下文、值棧裏的對象可以對所有
關於攔截器與過濾器使用場景、攔截器與過濾器的區別整理
body fcm 選擇符 spf java ee 彈性 javaee 定義 asp 過濾器在web.xml中配置: (1)因為一開始在過濾器中映射的url-pattern填寫路徑是*.action。所有的action要經過它的過濾。<url-pattern>*.
談談攔截器與過濾器的區別:
let 函數回調 依賴 servle pos 裏的 AC 截器 被調用 1、攔截器是基於java反射機制的,而過濾器是基於函數回調的。 2、過濾器依賴於servlet容器,而攔截器不依賴於servlet容器。3、攔截器只能對Action請求起作用,而過濾器則可以對幾乎所有請
攔截器和過濾器區別,Struts2與SpringMVC的區別
攔截器和過濾器 1.攔截器是基於java反射機制的,而過濾器是基於函式回撥的; 2.攔截器不依賴於servlet容器,而過濾器依賴於servlet容器; 3.攔截器只能對Action請求起作用,而過濾器則可以對幾乎所有請求起作用; 4.攔截器可以訪問Action上下文、值棧裡的物件,而過
攔截器和過濾器區別
his view uri servlet容器 des owa acc long nlog 比如動態代理就是攔截器的簡單實現, public Object invoke(Object proxy, Method method, Object[] args) throws Th
Spring Boot實戰:攔截器與過濾器
www container extends post 代理 init 切面 請求 一個 一、攔截器與過濾器 在講Spring boot之前,我們先了解一下過濾器和攔截器。這兩者在功能方面很類似,但是在具體技術實現方面,差距還是比較大的。在分析兩者的區別之前,
struct_2攔截器與過濾器
機制 步驟 conf ava 方法 struct 登錄用戶 提交 簡單實現 這個為網上所剪切的知識點,僅為個人學習所用,無其他用途。 過濾器,是在java web中,你傳入的request,response提前過濾掉一些信息,或者提前設置一些參數,然後再傳入servlet或
分享知識-快樂自己:Struts2 攔截器 與 過濾器
攔截器的使用以及配置: package com.gdbd.interceptor; import com.gdbd.pojo.UserInfo; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwor
攔截器和過濾器區別總結
因為過濾器Filter是servlet相關的由serviette容器tomcat管理,而攔截器Interceptor是spring管理,因為web程式執行過程就是先啟動tomcat容器,之後再在容器中呼叫spring那些東西,所以首先我猜測順序是先走Filter過濾器 後進
Struts2中攔截器與過濾器
核心:Struts2的核心就是攔截器,是基於過濾器開發的,所以最好與filter聯動對比學習 攔截器與過濾器的區別 : 1. 攔截器是基於java的反射機制的,而過濾器是基於函式回撥。 2. 攔截
萬字長文帶你徹底學會攔截器與過濾器
## SpringMVC攔截器介紹 ### 什麼是攔截器 **Spring MVC中的攔截器(Interceptor)類似於Servlet中的過濾器(Filter)**,它主要用於攔截使用者請求並作相應的處理。例如通過攔截器可以進行許可權驗證、記錄請求資訊的日誌、判斷使用者是否登入等。 ### 攔
java中攔截器、過濾器與監聽器的區別
一、攔截器 interceptor:java裡的攔截器是動態攔截Action呼叫的物件。它提供了一種機制可以使開發者可以定義在一個action執行的前後執行的程式碼,也可以在一個action執行前阻止其執行,同時也提供了一種可以提取action中可重用部分的
struts2攔截器的執行原理以及攔截器和過濾器的區別
struts2攔截器的執行原理: 注意:struts2.1.3以後的版中下邊這張圖中的FilterDispatcher已經改為StrutsPrepareAndExecuteFilter 1.首先伺服器接受請求,首先載入web.xml,通過核心控制器Stru
filter(過濾器)與攔截器(AOP)區別
攔截器和過濾器的區別: 1、攔截器是基於java的反射機制,過濾器是基於java的函式回撥 2、攔截器不依賴於servlet容器,而過濾器依賴於servlet容器 3、攔截器只能對action請求起作用,過濾器幾乎對所有的請求起作用 4、攔截器可以訪問action上下文,值棧裡的物
過濾器(Filter)與攔截器(Interceptor)的區別
https class 作用 lan intercept 依賴 攔截器 www. clas 1 、攔截器是基於java的反射機制的,而過濾器是基於函數回調。 2 、攔截器不依賴與servlet容器,過濾器依賴與servlet容器。 3 、攔截器只能對action請求起作
攔截器和過濾器的區別
str span line 實現 沒有 內部 不依賴 resp left 攔截器和過濾器都可以用來實現橫切關註功能,其區別主要在於: 1、攔截器是基於java反射機制的,而過濾器是基於函數回調的。 2、過濾器依賴於servlet容器,而攔截器不依賴於servlet容器。 3
Struts2攔截器和過濾器的區別?
tex ext struts 依賴 上下 生命周期 action 上下文 區別 ①過濾器依賴於Servlet容器,而攔截器不依賴於Servlet容器。 ②Struts2 攔截器只能對Action請求起作用,而過濾器則可以對幾乎所 有請求起作用。 ③攔截器可以訪問 Actio