登录检查拦截器 (ActionInvocation的理解--转载)

来源:互联网 发布:管家婆软件的优缺点 编辑:程序博客网 时间:2024/06/06 20:04

1.actionInvocation是什么

ActionInvocation就是Action的调用者。ActionInvocation在Action的执行过程中,负责Interceptor、Action和Result等一系列元素的调度。

理解ActionInvocation你需要对Action的调用过程有一个全面的了解:

http://tech.ddvip.com/2009-01/1232090919106049.html

讲的还是很清楚地!

2.ActionInvocation干什么

Interceptor通过ActionInvocation可以完全的改变Action行为:不让它执行、改变返回值、甚至可以细颗粒的操作Action的方法

查看ActionINvocation 的API,他有getActionProxy(),getResultCode();getActionContext();

ActionProxy在action中用来构建执行环境,ActionProxy提供Action执行的时候一切所需要的配置、参数等等,当然,也要有进行Action调用的入口。


public String intercept(ActionInvocation invocation) throws Exception { Map session=invocation.getInvocationContext().getSession();    String  actionName=invocation.getProxy().getActionName();    String  methodName=invocation.getProxy().getMethod();}你写过滤器的时候 有这个方法吧,如果没有你继承extends AbstractInterceptor
示例:
public String intercept(ActionInvocation invocation) throws Exception{
ActionContext  ctx = invocation.getInvocationContext();
//如果请求的action在相应范围内存在,则直接return出intercept方法,调用相应action去执行
for(String action:whiteList){
if(ctx.getName().equals(action)){
return invocation.invoke();
}
}
//如果请求的action不在定义的范围内,则查看是否已经登录,是否有权限做这个action的操作
HttpSession session = ServletActionContext.getRequest().getSession();
if(session.getAttribute("SESSION_ADMIN") == null){
session.setAttribute("sessionErrorMessage","请先登录系统!");
return "loginError";
}
//如果请求的action不在相应范围内,但是已经登录,则直接执行该action请求
return invocation.invoke();
}
0 0
原创粉丝点击