1.开发Interceptor类

  用户自定义的拦截器一般需要继承AbstractInterceptor类,重写intercept方法

public class UserInterceptor extends AbstractInterceptor{
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
//拿到当前执行的方法名,如果当前方法名不是login,就进行验证
//获取actioncontext对象
ActionContext actionContext = actionInvocation.getInvocationContext();
//获取action的代理对象
ActionProxy proxy = actionInvocation.getProxy();
String methodName = proxy.getMethod();
if(!"login".equals(methodName))
{
//先获取当前登录的用户
Object userInfo = actionContext.getSession().get("userInfo");
if(userInfo == null)
return "input";
else
return actionInvocation.invoke();
}else{
//说明当前用户正在登录
return actionInvocation.invoke();
}
}
}

2.配置拦截器

  配置拦截器栈

        <interceptors>
<interceptor name="userInterceptor" class="com.juaner.login.UserInterceptor"></interceptor>
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="userInterceptor"/>
</interceptor-stack>
</interceptors>

  执行拦截器

<default-interceptor-ref name="myStack"></default-interceptor-ref>

3.拦截器的生命周期

  • 服务器启动时,执行所有拦截器的创建,调用拦截器的init()方法;
  • 用户访问时,首先创建Action实例;
  • 然后执行拦截器的intercept()方法,该方法只有一个参数:ActionInvocation的对象actionInvocation。在该方法中调用actionInvocation.invoke()方法执行下一个拦截器;(类似于过滤器中的filterChain.doFilter()方法);
  • invoke()方法链最后会执行Action的execute()方法;
  • 最后执行拦截器intercept()方法中invoke()后的语句;

  

最新文章

  1. UITabBarController常见代理方法的使用
  2. 黑客们的故事(连载六):IT世界里的理想主义者
  3. include_path详细解析
  4. C语言Makefile文件使用
  5. C#读取Word模板替换相应的字符串(标签)生成新的Word
  6. Xen学习——原理要点归纳总结
  7. 他的第一个NDK的Demo
  8. 浅析=======Struts2之==========valueStack
  9. 6.Java集合总结系列:常见集合类的使用(List/Set/Map)
  10. Jquery插件之ajaxForm ajaxSubmit的理解用法(转)
  11. Java学习笔记-枚举类型
  12. Android的oom详解
  13. OpenCV-Python教程9-平滑图像
  14. java 中,new一个新对象时,是先给成员变量赋上初值后 再来调用类中的构造函数的。
  15. Django1.11.7配置静态文件
  16. Fiddler 会话查找功能
  17. 使用spring的aop对Struts2的Action拦截后出现依赖注入为空问题
  18. awr脚本使用dump导出导入
  19. HDU3452_Bonsai
  20. BZOJ 2286: [Sdoi2011]消耗战 虚树 树形dp 动态规划 dfs序

热门文章

  1. C++——类继承
  2. 使用连接(JOIN)来代替子查询(Sub-Queries) mysql优化系列记录
  3. datagrid实现单行的选择、取消
  4. 项目中的五级地址联动效果(js)
  5. MYSQL 编码方式 ------导入 .sql 文件 报编码错误
  6. http协议简述
  7. Django缓存优化之redis
  8. 【转】android fragment 博客 学习
  9. --专访雷果国: 从1.5K到18K 一个程序员的5年成长之路--
  10. hdu 2473 Junk-Mail Filter (并查集之点的删除)