好好利用Struts2拦截器

  继续学习SSH项目,当前完成了用户注册、登录、查看调查,新建调查几个简单的功能,为了程序的健壮性,比如当我们查看调查,新建调查的时候,就应该判断用户是否登陆过,如果没有登录的,则让其进行登录,然后再进行其他操作。

  这样的话,利用struts的拦截器来实现是非常方便的。因为struts2中,到达action之前是先进入拦截器中的。所以可以在拦截器中进行判断,下面上部分代码:

  

/**
 * 登录拦截器,实现对用户登录的拦截操作
 * @author Bubble
 */
@SuppressWarnings("serial")

public class LoginInterceptor implements Interceptor {

	@Override
	public void destroy() {

	}

	@Override
	public void init() {

	}

	@Override
	public String intercept(ActionInvocation arg0) throws Exception {
		@SuppressWarnings("rawtypes")
		BaseAction action = (BaseAction) arg0.getAction() ;
		//如果 action 为登录或者注册 action 的话,则放行
		if(action instanceof LoginAction ||
				action instanceof RegAction){
			return arg0.invoke() ;
		}
		//其他Action则校验 是否登录
		else{
			User user = (User) arg0.getInvocationContext().getSession().get("user") ;
			if(user == null){
				//user 为空,则去登录
				return "login" ;
			}else{
				//放行
				if(action instanceof UserAware){
					((UserAware) action).setUser(user);
				}
				return arg0.invoke() ;
			}
		}
	}

}

  然后记得修改 struts.xml文件

<!-- 自定义拦截器 -->
		<interceptors>
			<!-- 注册用户登录拦截器 -->
			<interceptor name="loginInterceptor" class="com.ysp.surveypark.struts2.LoginInterceptor" />
			<interceptor-stack name="myLoginStack">
				<interceptor-ref name="loginInterceptor"/>
				<interceptor-ref name="defaultStack"/>
			</interceptor-stack>
		</interceptors>

		<!-- 使用自定义拦截器栈 -->
		<default-interceptor-ref name="myLoginStack"/>

		<!-- 配置全局 login页面 -->
		<global-results>
			<result name="login">/index.jsp</result>
		</global-results>

  同样,很多时候,我们需要获取登录用户的session,比如,查看调查,新建调查。每次都要从session中获取user对象,这样可以让其 action 实现 sessionAware 接口,然后获得 对应的session,但是如果这样的话,就会分别在其方法上获取。代码就重复了,所以可以同样利用 拦截器原理,代码同上:可以让需要获取 user session的action实现对应的UserAware,UserAware接口中有一个 setUser(User user)方法,在拦截器中判断传过来的 action 是否实现了 UserAware接口,如果实现了,则调用setUser(User user)方法设置 user.这样的话,就很简洁明了了

时间: 2024-10-08 10:58:29

好好利用Struts2拦截器的相关文章

Struts2拦截器概述

--------------------siwuxie095 Struts2 拦截器概述 1.Struts2 框架封装的很多功能都在 Struts2 的拦截器中 2.Struts2 框架中有很多拦截器,但这些拦截器不是每次 都执行,只有默认拦截器才会每次都执行 3.Struts2 默认拦截器的位置 「注意:默认拦截器中也有很多拦截器」 4.拦截器的执行 在 Action 对象创建之后,在 Action 方法执行之前 [made by siwuxie095]

笔记:Struts2 拦截器

配置拦截器 Struts.xml 配置文件中,使用<interceptor-/>来定义拦截器,有属性 name 表示拦截器的名称,class 表示拦截器的具体首先类,可以使用<param-/>子元素来配置拦截器的参数,配置示例: <package name="包名称" extends="抽象包名称"> <interceptors> <interceptor name="拦截器名称" class

Struts2 拦截器与Spring AOP的区别

在学习Spring AOP技术的同时,发现其实与以前做过的拦截器的功能很类似,于是开始抱着这两者之间有什么关系的问题进行深入研究. 我们知道struts2使用拦截器主要是用来处理用户的请求,OGNL的使用,表单验证 等. 而spring的拦截器,主要体现在AOP的事务管理方面,还有比如一些错误或者异常的日志的显示 也是通过配置spring的log拦截器来实现的. Struts的拦截器是针对Struts的,比如SSH项目都会去使用AOP ,如果是单纯的STRUTS项目 自然使用Struts本身的拦

【SSH2(实践篇)】--Struts2拦截器精解

上篇博客对Struts2的体系结构做了初步的了解,Struts2是以WebWork作为处理核心,并采用拦截器的机制来处理用户的请求,同时它还集成了Struts1丰富的标签库.另外上篇博客还对Struts2的配置使用进行了初步的介绍,下面将会集中讨论Struts2的拦截器. 一.拦截器 1.拦截器小介 拦截器的功能类似于web.xml文件中的Filter,能对用户的请求进行拦截,通过拦截用户的请求来实现对页面的控制.拦截器是在Struts-core-2.2.3.jar中进行配置的,原始的拦截器是在

Struts2 拦截器

一.Struts2拦截器原理: Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表,最后一个一个地调用列表中的拦截器. 比如:应用要求用户登陆,且必须为指定用户名才可以查看系统中某个视图资源:否则,系统直接转入登陆页面.对于上面的需求,可以在每个Action的执行实际处理逻辑之前,先执行权限检查逻辑,但这种做法不利于代码复用.因为大部分Action里的权限检查代码都大同小异,故将这些权

Struts2拦截器的使用 (详解)

这位仁兄的写的不错,我照抄过来了:http://www.blogjava.net/i369/articles/162407.html 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack,如下(这里我是引用了struts2自带的checkbox拦截器):<interceptor-ref name="checkbox">  <param name=&q

Struts2拦截器详解

作者:禅楼望月 1. Struts2内置拦截器 Struts2内置了大量的拦截器,如下图: 图片来自:刘水镜的博客:菜鸟学SSH(四)--Struts2拦截器 这些拦截器以name-class的形式配置在struts-default.xml中: <interceptor name="alias" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/> <interceptor n

转载 - Struts2 拦截器详细配置过程

出处:http://www.blogjava.net/zzzlyr/archive/2009/10/12/297998.html Struts2 拦截器详细配置过程 1:所有拦截器的超级接口Interceptor ,Action去实现这个接口; Interceptor 它其中有三个方法(init(),destroy() ,interceptor()): Init()方法:在服务器起动的时候加载一次,并且只加载一次; Destroy()方法:当拦截器销毁时执行的方法; Interceptor()方

Struts2拦截器总结&lt;转&gt;

由于项目中在登录跳转到其他应用程序模块的时候有用到拦截器,因此查看了一下相关资料. 原文地址:http://blog.csdn.net/sendfeng/article/details/4248120 Struts2拦截器总结: 一.编写拦截器 1.  实现接口com.opensymphony.xwork2.Intercepter(或继承com.opensymphony.xwork2.AbstractInterceptor) 2.  在interceptor方法中加入如下代码: public S