拦截器采用MethodFilterInterceptor好处就是比较灵活,见文思义就是可以根据方法来判断拦截
使用方法:
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";//需要拦截转到登陆页面
}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"/>
注:举例一个用户登陆应用场景,通常我们会有拦截用户是否登陆这个逻辑,如果拦截到未登陆的话需要跳转到登陆页面。但是像上面那样直接返回"login"
的话,Struts2会找不到跳转页面,所以需要配置下全局结果集
3.在Struts.xml里配置全局结果集定义
<!-- 全局结果集定义 -->
<global-results>
<result name="login">/login.jsp</result>
</global-results>
网友评论