struts2拦截器可以拦截一些请求,比如用户没登陆就想访问某个页面,比如用户没有某个页面的访问权限,却发送访问请求,这些都是要被拦截下来的,基于这些需求,我研究了一下struts2的拦截器。
要使用拦截器,首先需要在struts.xml中配置,配置文件如下:
/WEB-INF/index/index.jsp
mResult
/WEB-INF/index/index.jsp
mResult
值得注意的是,定义的拦截器栈名和interceptor-stack的name必须保持一致。
注意:
<default-interceptor-ref name="publicLoginStack"/>
这段代码的作用是在整个package中的所有action,不管有没有写调用拦截器的这段代码:
<interceptor-ref name="publicLoginStack" />
都会默认调用拦截器,所以当有多个action时,需要手动添加上面这句代码,并且删除掉
<default-interceptor-ref name="publicLoginStack"/>
。
配置好了后,我们需要写一个interceptor类,来处理用户访问的请求(允许访问还是不允许等),这个类即上面<interceptor>的 class属性中的LoginInterceptor.java:
com.arche.alderman.Interceptor;
com.arche.alderman.constant.RequestInteractionString;
com.arche.alderman.constant.ServerCommonString;
com.arche.alderman.mvc.pub.vo.UserLoginInfo;
com.opensymphony.xwork2.ActionInvocation;
;
java.util.Map;
LoginInterceptor {
String intercept(ActionInvocation actionInvocation) Exception {
String name = actionInvocation.getInvocationContext().getName();
(name.equals()) {
actionInvocation.invoke();
} {
Map session = actionInvocation.getInvocationContext().getSession();
(== session || session.isEmpty()) {
ServerCommonString.;
} {
UserLoginInfo userLoginInfo = (UserLoginInfo) session.get(RequestInteractionString.);
(== userLoginInfo){
ServerCommonString.;
}{
(!= userLoginInfo.getUserId() || != userLoginInfo.getUserName() || != userLoginInfo.getUserType()) {
actionInvocation.invoke();
} {
ServerCommonString.;
}
}
}
}
}
}
需要特别注意的是,这个类要继承AbstractInterceptor类,然后重写interceptor()方法。
大概就是这些,挺简单的!