Strust2中,加入監聽器來判斷用戶是否在session中存在。
Strust2中,加入監聽器來判斷用戶是否在session中存在。
struts2攔截器流程:
web.xml中,struts2設置攔截*.action ,當用戶訪問某一個action中,會行執行它的默認攔截器再執行action中的方法。
攔截器實現原理:
大部分時候,攔截器方法都是通過代理的方式來調用的。Struts2的攔截器實現相對簡單。當請求達到struts2的 servletDispatcher時,Struts2會查找配置文件,並根據其配置實例相對的攔截器對象,然後串成一個列表(list),最後一個一個調用列表中的攔截器。
第一步:
先寫一個攔截器的類:UserFilter.Java,繼承 AbstractInterceptor,只要實現intercept方法。
首先來說,攔截器不能攔截登陸的action。所以要對LoginAction過濾
Object action = actionInvoction.getAction(); //獲得攔截器對象
//如果獲得的攔截器為Login或者LoginAction,則不進行攔截
if(action instanceof Login || action instanceof LoginAction){
return actionInvocation.invoke();
}
//確認session中用戶是否存在
Map session = actionInvoction.getInvocationContext().getSession();
String login = (String) session.get("admin");
//如果用戶不為空,則退出攔截。否則跳入LOGIN
if(login != null && login.length() > 0){
return actionInvocation.invoke();
} else {
return Action.LOGIN;
}
第二步:在struts.xml中寫入相應的配置信息
在<package 下面寫入攔截器配置
<interceptors>
<interceptor name = "loginFilter" class = "com.woheni.filter.UserFilter"/> 攔截器名、攔截器實現類
一下為定義攔截器棧
<intercepter-stack name="teamwareStack"> 攔截器棧名
<interceptor-ref name="loginFilter"/> 攔截器一 (和攔截器名相同)
<interceptor-ref name="defaultStack"/> 攔截器二 這裏再引用系統的默認攔截器工作
</interceptor-stack>
</interceptors>
<!--定義默認攔截器-->
<default-intercepotr-ref name="teamwarStack"/>
設置全局返回值
<global-results>
<result name="login">/Login.html</result>
</global-results>
對應關系: 定義默認攔截器 --> 攔截器棧名 --> 攔截器一 --> 自定義攔截器名--class路徑
Strust2中,加入監聽器來判斷用戶是否在session中存在。