`

Struts2(10):Struts2的监听器与验权小例

阅读更多

Struts2的监听器:

在xwork-2.0.7.jar包下,在com.opensymphony.xwork2.interceptor包下有个PreResultListener接口,自定义的监听器需实现此接口。

 

1,首先写一个自定义的Struts2监听器

 

MyListener.java

package com.test.listener;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.PreResultListener;

public class MyListener implements PreResultListener {

	public void beforeResult(ActionInvocation invocation, String resultCode) {
		System.out.println("result ="+resultCode);
	}

}

 

2,再在自定义的方法拦截器中调用此监听器,如下所示

package com.interceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
import com.test.listener.MyListener;

public class MyMethodInterceptor extends MethodFilterInterceptor {

	protected String doIntercept(ActionInvocation invocation) throws Exception {
		System.out.println("before myMethodFilterInterceptor....");
		invocation.addPreResultListener(new MyListener());
		String invoked = invocation.invoke();
		System.out.println("after myMethodFilterInterceptor....");
		return invoked;
	}
}

  

 执行的顺序是:
 1,先执行拦截器中的方法,如doIntercept。
 2,在拦截器中调用invocation.invoke()来执行目标action中的validate验证方法。
 3,如果validate验证成功,就执行execute方法或其它自定义的方法。
      执行完后,则执行监听器类的beforeResult方法,并且其resultCode参数是success。
      如果validate验证失败,则执行监听器类的beforeResult方法,并且其resultCode参数是input。
 4,监听器中的方法执行完后,则返回到拦截器中的方法继续完成剩下的部分。

以上就是监听器的简单编写与流程介绍。

 

-------------------------------------------------------------------------------

验权小例:假设用户需先登录login.jsp页面输入登录用户信息,输入完成后,自动跳转到register.jsp页面填写注册信息,如果用户直接访问register.jsp页面输入信息,则在提交时,就跳转到login.jsp页面要求用户输入登录信息。即不允许用户直接访问register.jsp页面输入注册信息。

1,首先编写拦截器AuthInterceptor.java

package com.interceptor;

import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class AuthInterceptor implements Interceptor {

	public void destroy() {
	}

	public void init() {
	}

	public String intercept(ActionInvocation invocation) throws Exception {
		//取出session
		Map session = invocation.getInvocationContext().getSession();
		//判断user值是否为空,如果为空,就跳转到 login.jsp页面
		if(session.get("user") == null){
			return Action.LOGIN;
		}else{
			invocation.invoke();
		}
		return null;
	}

}

 2,填写struts2.xml配置文件

<interceptor name="authInterceptor" class="com.interceptor.AuthInterceptor"></interceptor>
<action name="login" class="com.test.action.LoginAction">
	<result name="input">/login.jsp</result> <!--input标签表示,如果action中validate方法的FieldError中有值,就会跳转到input标签指定的JSP页面-->
	<result name="success">/register.jsp</result>
	<result name="failer">/login.jsp</result>
</action>
<global-results>
	<!-- 定义全局常量,对应的AuthInterceptor.java类的Action.LOGIN常量, type="redirect"表示重定向-->	
	<result name="login" type="redirect">/login.jsp</result>	
</global-results>

<action name="login" class="com.test.action.LoginAction">
	<result name="input">/login.jsp</result>
	<!--login输入成功,就跳转到/register.jsp页面  -->
	<result name="success">/register.jsp</result>
	<result name="failer">/login.jsp</result>
</action>
<action name="register" class="com.test.action.RegisterAction" >
	<interceptor-ref name="authInterceptor"></interceptor-ref>
	<result name="success">/success.jsp</result>
	<result name="input">/register.jsp</result>	
</action>

 
3,在LoginAction.java类中应设置SESSION的值

public String execute() {
		Map map = ActionContext.getContext().getSession();
		//随便放置一个valid字符串
		map.put("user", "valid");
		if("hello".equals(this.getUsername().trim()) && "world".equals(this.getPassword().trim())){
			return "success";
		}else{
			this.addFieldError("username", "username or password error");
			return "failer";
		}
	}

 

 

用户在login.jsp页面输入登录信息后,跳转到LoginAction中,在此action中,将valid字符串放入session的user变量中,使user不为空,根据struts.xml的配置,login.jsp页面输入完成后,会自动跳转到register.jsp页面,用户在register.jsp页面输入完成点击提交,会跳转到RegisterAction,在此action中会判断session中的user是否为空,如果不为空,则继续流程,否则重新跳转到login.jsp页面。

分享到:
评论

相关推荐

    Struts2的监听器的使用

    在Struts2中,监听器是用于监控特定事件并执行相应操作的重要组件。下面我们将深入探讨Struts2监听器的使用及其在实际开发中的作用。 首先,了解监听器在Web应用中的基本概念。监听器是Servlet容器(如Tomcat)中的...

    STRUTS:listener监听器

    ### STRUTS:Listener监听器详解 #### 一、引言 在Java Web开发中,监听器(Listener)是十分重要的组成部分,它们主要用于监听特定事件的发生,并执行相应的处理逻辑。Struts框架作为早期流行的MVC架构之一,充分...

    struts2 Https 配置

    在"28_Struts2ImgCode"这个文件名中,虽然没有实际的文件内容,但我们可以推测它可能包含了与Struts2和图像验证码相关的代码示例。在HTTPS环境中,如果涉及到图片验证码,需要注意的是,验证码图片也需要通过HTTPS...

    struts2+cas单点登陆例子

    2. **配置web.xml**:在项目的`web.xml`文件中,我们需要配置CAS过滤器和监听器,它们负责拦截请求,处理CAS的票据验证。过滤器会检查用户是否已经通过CAS验证,如果没有,则重定向到CAS服务器的登录页面。 3. **...

    Struts2教程DOC版

    本教程将逐步引导你了解并实践这些核心概念,从创建第一个Struts2项目,到配置Action、编写拦截器、处理表单提交、实现文件上传,再到利用Tiles进行页面布局,一步步深化对Struts2的理解。无论你是初学者还是有经验...

    javascript中读取Struts2标签datetimepicker的值.doc

    在Web开发中,特别是涉及到日期时间选择的情况下,如何在客户端(JavaScript)与服务器端(如Struts2框架)之间有效地交互和处理日期时间数据是非常重要的。本文将详细介绍如何在JavaScript中读取Struts2中的`s:...

    struts2拦截器及监听器示例demo

    默认登录页面 http://localhost:8080/Struts_ljq ...登录成功页面有add,delete,modify方法,配置有不同拦截,在后台看拦截信息。...有全局拦截器配置和方法拦截,及监听器简单运用, 仅新手学习demo

    MyClipse6.0\Struts2,Spring与Hibernate整合应用,学生成绩管理系统

    - **实现WEB层**:配置Struts2的过滤器和Spring监听器,编写Action类并注入Service层的bean,设置Struts2的配置文件和JSP页面。 5. **数据库设计** - 学生信息表(xsb):包含学号(XH)、姓名(XM)、性别(XB)...

    struts2整合fileupload

    Struts2是一个强大的MVC框架,而FileUpload则是一个处理文件上传的库,通常与Struts2结合使用,以提供更完善的文件上传功能。在本项目中,我们看到Struts2还整合了Freemarker作为视图模板引擎,使得前后端数据交互...

    flex与struts2整合

    配置包括定义Flex的上下文监听器、消息代理Servlet等,这些都是Flex与Struts2之间通信的关键组件。 #### 三、深入理解整合原理 整合Flex与Struts2不仅仅是在项目中简单地添加几个库或配置文件。更重要的是理解两者...

    struts2教程我在培训时用的

    - **自定义结果监听器**:在Action执行后,监听其返回的结果,并进行相应的操作。 **4.3 文件上传和下载** - **实现文件上传**:利用Struts2的文件上传特性,可以在表单中添加文件上传控件。 - **实现文件下载**:...

    搭建struts2的jar包

    4. **配置web.xml**:这是Servlet容器的配置文件,需要配置Struts2的过滤器和监听器。 5. **编写Action类**:Action类是业务逻辑的入口点,继承自Struts2的ActionSupport类。 6. **创建配置文件**:编写struts.xml...

    Struts2漏洞2.0.xx升级为Struts-2.5.12步骤

    查看官方文档,确认并更新任何必要的配置元素,如过滤器和监听器。 **6. 更新Struts配置** 检查所有的`.struts.xml`配置文件,确保它们与新版本兼容。可能需要更新或删除不再支持的配置选项。 **7. 修复动作类和...

    struts2所有包和配置文件

    这是每个Java Web应用的标准部署描述符,用于配置应用程序的基本设置,比如Servlet、过滤器和监听器。在Struts2中,`web.xml`通常会包含Struts2的前端控制器Servlet,即`org.apache.struts2.dispatcher.ng.filter....

    struts2必备的包和配置文件

    2. `web.xml`:这是Servlet容器的部署描述符,用于配置过滤器和监听器。在Struts2中,你需要配置`StrutsPrepareAndExecuteFilter`来拦截HTTP请求并交给Struts2框架处理。 在实际开发中,可能还需要根据需求添加其他...

    Struts2属性文件详解

    该属性用于指定加载Struts 2配置文件的配置文件管理器,默认值为`org.apache.struts2.config.DefaultConfiguration`,这是Struts 2默认的配置文件管理器。若需要实现自定义的配置管理器,则需创建一个实现了`...

    Struts2 tiles操作例子

    在探讨“Struts2 tiles操作例子”这一主题时,我们首先需要理解Struts2框架以及tiles插件在其中扮演的角色。Struts2是Apache软件基金会赞助的一个开源Web应用框架,它基于MVC(Model-View-Controller)设计模式,...

    struts2+dojo实现例子

    在这个例子中,可能使用了Dojo的`dojoContentPane`或者`dijit.form.Form`等组件,配合`dojo.connect`或`dojo.on`监听用户交互事件,然后使用`xhr`方法与后台Struts2 Action进行通信。 Struts2与Dojo的集成通常涉及...

    Struts2与extjs整合例子

    同时,要配置拦截器,以实现Struts2的核心功能,如模型驱动、文件上传等。 3. **ExtJS集成**:在前端,你需要引入ExtJS库,并创建视图组件,如Grid、Form、Panel等。通过Ajax请求与Struts2 Action进行通信,获取...

    struts2 开发依赖的所有jar包

    为了确保项目能够成功运行,开发者需要正确地配置这些jar包,包括将它们添加到构建路径、设置web.xml中的过滤器和监听器,以及可能需要的额外配置文件如struts.xml。同时,了解每个jar包的功能和用途,可以帮助...

Global site tag (gtag.js) - Google Analytics