攔截器采用MethodFilterInterceptor好處就是比較靈活,見文思義就是可以根據(jù)方法來判斷攔截
使用方法:
1.編寫一個類繼承MethodFilterInterceptor
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
import com.wtwd.bos.pojo.User;
public class LoginInterceptor extends MethodFilterInterceptor {
/**
* 登陸攔截器
*/
@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
if(!login) {
return "login";//需要攔截轉(zhuǎn)到登陸頁面
}else {
return invocation.invoke();//放行
}
}
}
2.在Struts.xml里配置攔截器
<interceptors>
<!-- 注冊自定義攔截器 -->
<interceptor name="loginInterceptor" class="com.xx.xx.BOSLoginInterceptor">
<!-- 指定哪些方法不需要攔截 -->
<param name="excludeMethods">login</param>
</interceptor>
<!-- 定義攔截器棧,因為Struts2攔截器只攔截默認棧所以要定義攔截器棧-->
<interceptor-stack name="myStack">
<interceptor-ref name="loginInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myStack"/>
注:舉例一個用戶登陸應(yīng)用場景火脉,通常我們會有攔截用戶是否登陸這個邏輯簿透,如果攔截到未登陸的話需要跳轉(zhuǎn)到登陸頁面抖甘。但是像上面那樣直接返回"login"
的話,Struts2會找不到跳轉(zhuǎn)頁面捌治,所以需要配置下全局結(jié)果集
3.在Struts.xml里配置全局結(jié)果集定義
<!-- 全局結(jié)果集定義 -->
<global-results>
<result name="login">/login.jsp</result>
</global-results>