ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Struts2的拦截器

2019-09-08 11:08:32  阅读:126  来源: 互联网

标签:拦截器 自定义 Struts2 调用 拦截 执行 方法


简介

拦截器是struts2的核心组成部分,可以动态拦截Action调用的对象,类似于Servlet中的过滤器,拦截器是AOP的的一种实现策略,可插拔式的,可以任意的组合Action提供的附加功能,而不需要修改Action的代码。
通常情况下,拦截器都是以代理方式调用的,他在一个action执行前后拦截,围绕action和result的执行而执行。
拦截器以链式执行,对真正要执行的方法(execute())进行拦截。首先执行action配置的拦截器,在action和result执行之后,拦截器会再次执行(与之前调用的顺序相反),在此链式执行的过程中,每一个拦截器在执行execute()方法前都可以直接返回。

拦截器的配置

<!-- 声明拦截器 -->
<interceptors>
			<interceptor name="privilege" class="cn.itcast.interceptor.PrivilegeInterceptor"/>
			<interceptor-stack name="myStack">
				<interceptor-ref name="defaultStack"/>
				<interceptor-ref name="privilege"/>
			</interceptor-stack>
		</interceptors>

在上述代码中,定义一个拦截器myStack,在myStcak栈中,除了引用一个自定义的拦截器privilege外,还引用了一个内置的拦截器栈defaultStack,这个拦截器栈是必须要引入的。

自定义拦截器

需要自定义拦截器,就要直接或间接的实现Interceptor接口。
该接口提供了三个方法:

  • void init():在拦截器被创建后立即被调用,他在拦截的生命周期内只被调用一次。可以在该方法中对相关资源进行必要的初始化
  • void destory():与init方法相对应,在拦截器实例被销毁之前,将调用该方法来释放与拦截器相关的资源。在拦截的生命周期内只被调用一次。
  • String intercept():该方法是拦截器的核心方法,用来添加真正执行拦截器工作的代码,实现具体的拦截器操作。他返回一个字符串作为逻辑视图,系统根据返回的字符串跳转到对应的视图资源。每拦截一个动作请求,该方法就会被调用一次。
    自定义的拦截器常用的一种方式是继承抽象拦截器类AbstractIntercepter。该类实现了Interceptor接口,并且提供了destory方法和intercept方法的空实现。

权限控制:

public class PrivilegeInterceptor extends AbstractInterceptor {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		// TODO Auto-generated method stub
		ActionContext context = invocation.getInvocationContext();
		Object user = context.getSession().get("user");
		if(user!=null) {
			return invocation.invoke();
		}else {
			context.put("msg", "请先登录");
			return Action.LOGIN;
		}
	}

}

标签:拦截器,自定义,Struts2,调用,拦截,执行,方法
来源: https://blog.csdn.net/qq_37054816/article/details/100169396

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有