java中的Struts2攔截器詳解
最近在學(xué)習(xí)struts的攔截器,現(xiàn)在來總結(jié)一下。
1、攔截器是什么?
攔截器相當(dāng)于過濾器:就是將不想要的去掉,想要的留下。攔截器抽象出一部分代碼可以用來完善原來的action。同時(shí)可以減輕代碼冗余,提高重用率。通俗地講就是一張網(wǎng),過濾掉不需要的沙子,留下水。
2、攔截器的作用:
攔截器可以構(gòu)成特定的功能。比如權(quán)限認(rèn)證、日志記錄和登陸判斷。
3、攔截器的原理:

其每一個(gè)Action請求都在攔截器中,每一個(gè)action可以將操作轉(zhuǎn)交給下面的攔截器,也可以直接退出到界面上。
4、定義攔截器:
(1)自定義一個(gè)實(shí)現(xiàn)Interceptor接口(不過我初學(xué)者一般直接實(shí)現(xiàn)框架中的Interceptor)
(2)在struts.xml中注冊定義的攔截器
(3)可以需要的action中引用攔截器
Interceptor接口聲明了三個(gè)方法
public interface Interceptor extends Serializable {
void destroy();
void init();
String intercept(ActionInvocation invocation) throws Exception;
}
Init方法是在action作用之前調(diào)用,就是開始給爛機(jī)器的初始化操作。
Destory方法在攔截器被垃圾回收之前調(diào)用,用來回收init方法初始化的資源。
interceptor方法是攔截器的主要操作。如果需要調(diào)用后續(xù)的Action或者攔截器,只需要在該方法中調(diào)用invocation.invoke()方法即可,在該方法調(diào)用的前后可以插入Action調(diào)用前后攔截器需要做的方法。
現(xiàn)在對用戶登錄進(jìn)行攔截,代碼如下:
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("在action執(zhí)行之前");
ActionContext actionContext=invocation.getInvocationContext();
Map<String,Object> session=actionContext.getSession();
Object currentUser=session.get("currentUser");
String result=null;
if(currentUser!=null){
result=invocation.invoke();
}else{
HttpServletRequest request=(HttpServletRequest)invocation.getInvocationContext().get(ServletActionContext.HTTP_REQUEST);
request.setAttribute("error", "請先登錄");
result="error";
}
System.out.println("result+"+result);
System.out.println("在action執(zhí)行之后");
return result;
}
注冊攔截器:
<interceptors>
<interceptor name="myInterceptor"
class="com.fangchao.interceptor.MyInterceptor"></interceptor>
<interceptor name="loginInterceptor"
class="com.fangchao.interceptor.LoginInterceptor"></interceptor>
<interceptor-stack name="myStack">
<interceptor-ref name="loginInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
上述代碼中的interceptor-stack是個(gè)攔截器棧。到目前為止,就是在下面引用時(shí),比較方便。一般來講,每個(gè)action都會使用defaultStack。
攔截器參數(shù):
配置參數(shù):
- excludeMethods:過濾掉不使用攔截器的方法
- includeMethods:使用攔截器的方法。
有兩種配置方式:
<interceptor-ref name="validation"> <param name="excludeMethods">myValidationExcudeMethod</param> </interceptor-ref> <interceptor-ref name="workflow"> <param name="excludeMethods">myWorkflowExcludeMethod</param> </interceptor-ref>
或者
<interceptor-ref name="defaultStack"> <param name="validation.excludeMethods">myValidationExcludeMethod</param> <param name="workflow.excludeMethods">myWorkflowExcludeMethod</param> </interceptor-ref>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java kafka寫入數(shù)據(jù)到HDFS問題
這篇文章主要介紹了java kafka寫入數(shù)據(jù)到HDFS問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
關(guān)于SpringBoot攔截器攔截靜態(tài)資源的問題
這篇文章主要介紹了關(guān)于SpringBoot攔截器攔截靜態(tài)資源的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
詳解Springboot快速搭建跨域API接口的步驟(idea社區(qū)版2023.1.4+apache-maven-3.9.
這篇文章主要介紹了Springboot快速搭建跨域API接口(idea社區(qū)版2023.1.4+apache-maven-3.9.3-bin),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07

