【SSH】——struts2 拦截器

        Struts 2拦截器是在程序访问某个action或者action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现。

【SSH】——struts2 拦截器_第1张图片


拦截器的工作方式:

Struts2拦截器围绕着Action和Result的执行而执行,当请求Struts2的Action 或返回result时,struts2会查找配置文件,并根据其配置实例化相应的拦截器对象,然后把这些对象串成一个列表,最后一个个的调用列表中的拦截器。其中Struts2的拦截器包括自带拦截器和自定义拦截器。Struts2默认18个拦截器,其他的都是自定义的。下面将通过SSH网上商城的一个实例来学习Struts2拦截器。

自定义拦截器:

后台权限校验拦截器:可以对Action的访问进行拦截,对没有登陆的用户进行拦截,判断的时候就判断session中是否保存了用户的信息。

自定义一个拦截器需要三步:
1 自定义一个实现Interceptor接口的类。
2 在strutx.xml中注册上一步中定义的拦截器。
3 在需要使用的Action中引用上述定义的拦截器

(1)首先创建一个包,命名为interceptor

【SSH】——struts2 拦截器_第2张图片

(2)新建一个类,命名为PrivilegeInterceptor

【SSH】——struts2 拦截器_第3张图片

(3)在PrivilegeInterceptor开始编写代码:对没有登陆的用户进行拦截,并跳转到后台登陆的界面。如何判断用户是否登陆,判断session中是否保存了后台用户的信息,如果有,则说明登陆了,反之,没有登陆。

* 编写一个类实现Interceptor接口.或者继承Interceptor的子类.

<strong><span style="font-size:18px;">package cn.itcast.shop.interceptor;

import org.apache.struts2.ServletActionContext;

import cn.itcast.shop.adminuser.vo.AdminUser;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;

/**
 * 后台权限的拦截器
 * 对没有登陆的用户,不可进行访问
 * @author CXC
 *
 */
public class PrivilegeInterceptor extends MethodFilterInterceptor{

	@Override
	//执行拦截的方法:
	protected String doIntercept(ActionInvocation actionInvocation) throws Exception {
		// 判断session中是否保存了后台用户的信息
		AdminUser existAdminUser=(AdminUser) ServletActionContext.getRequest().getSession().getAttribute("existAdminUser");
		if(existAdminUser == null){
			//没有登陆进行访问
			ActionSupport actionSupport=(ActionSupport) actionInvocation.getAction();
			actionSupport.addActionError("亲,您还没有登陆!没有权限访问!");
			return "loginFail";		
		}else{
			//已经登陆过
			return actionInvocation.invoke();
		}
		
	}

}
</span></strong>
(4)在struts 2中编写代码:定义拦截器:

<strong><span style="font-size:18px;"><!-- 配置自定义拦截器 -->
			<interceptors>
			<interceptor name="privilegeInterceptor" class="cn.itcast.shop.interceptor.PrivilegeInterceptor"/>
			</interceptors></span></strong>

(5)在需要添加拦截的地方引用拦截器或拦截器栈即可,应用拦截器,在后台action中除了后台登陆的action中都需要添加,对拦截器进行配置。

【SSH】——struts2 拦截器_第4张图片


达到的效果:

【SSH】——struts2 拦截器_第5张图片

总结:

Struts2拦截器可以说相当于是个过滤器:就是把不想要的或不想显示的内容给过滤掉。拦截器可以抽象出一部分代码可以用来完善原来的action,同时可以减轻代码冗余,提高重用率。


你可能感兴趣的:(【SSH】——struts2 拦截器)