- 浏览: 118807 次
- 性别:
- 来自: 福建
文章分类
最新评论
-
wenbing2610:
其实用Struts实现图片上传比用Servlet实现容易多了。 ...
Struts2文件上传深入FileUploadInterceptor -
i_feng:
public class uploadImageAction ...
Struts2文件上传深入FileUploadInterceptor -
wenbing2610:
...
ognl.MethodFailedException
Struts2为一个Action自动注入的各种功能都是通过各种拦截器实施上去的。
在<action>中使用<interceptor-ref>元素引用拦截器或拦截器栈,
在struts-default.xml文件中查看和了解默认包中的默认拦截器栈的配置。
在<package>中使用<interceptors>元素配置<interceptor>或<interceptor-stack>
在<package>中使用<default-interceptor-ref >元素为该包中的所有action配置默认拦截器 ,每个包只能指定一个默认拦截器。
一旦为某个action显式指定了某个拦截器,则所属包中定义的默认拦截器将不起作用。
ServletConfig拦截器用于调用HttpServletRequestAware、HttpServletResponseAware等接口的方法。
自定义一个进行性能统计或权限判断的拦截器,自定义拦截器要实现com.opensymphony.xwork2.interceptor.Interceptor接口。如何实现拦截器只对某些方法起作用,而对其他方法不起作用。
借助AnnotationWorkflowInterceptor用注解方式实现拦截器的功能
@Before
@BeforeResult
@After
关于自定义的拦截器,可以参看ClearSessionInterceptor和TokenInterceptor这两个拦截器的代码。
如果要在一个action上施加多个拦截器,需要多个interceptor-ref,索性定义一个拦截器组,在action中只用一个interceptor-ref来引用这个组即可。
如果没有为某个Action配置<intercept-ref/> ,那么则使用默认的拦截器组defaultStack 。一旦为某个Action配置了<intercept-ref/>,那么将不再有默认的defaultStack配置了,例如,一个实验例子是Action实现了ServletRequestAware,当增加一个自己的intercept后,在Action内部调用Request对象就不成了,只要再把ServletConfig这个拦截器配置到Action中,就又可以了。
去掉ServletConfigInterceptor拦截器,相应的Servlet API对象不再被注入到Action中。为了看到去掉ServletConfigInterceptor的效果,可以先随便指定struts2自带的一个其他的拦截器,然后再换成ServletConfigInterceptor看两种情况下的运行区别。 Struts2中的每个拦截器分别Action注入某一项功能,在Action中引用这个拦截器,Action就有了这项功能,不引入该拦截器,则没有该项功能。
ActionInvocation有一个invokeActionOnly方法,可以跳过其他Interceptor,直接去调用action,比用filter好哦。
写自己的struts2拦截器时,可以继承AbstractInterceptor,或者继承MethodFilterInterceptor(excludeMethods参数中如果有多个方法,方法之间用逗号分隔)。
用下面的代码实现一个PerformanceStatisticsInterceptor
public String intercept(ActionInvocation invocation) throws Exception {
long startTime = System.currentTimeMillis();
String result = invocation.invoke();
long endTime = System.currentTimeMillis();
System.out.println(invocation.getInvocationContext().getName() + ":" + (endTime-startTime));
return result;
}
其中,invocation.getInvocationContext().getName()方法返回的是action在配置文件中的映射名称。由于配置了自己的拦截器后,又还要使用defaultStack这个拦截器栈,那么就再配置一个自己的拦截器栈,包含自己的拦截器和defaultStack栈,在Action中引用自己的这个栈。
权限检查拦截器的代码:
package cn.itcast.struts2demo3.web.struts2.interceptors;
public String intercept(ActionInvocation invocation) throws Exception {
HttpSession session = ServletActionContext.getRequest().getSession();
Object user = session.getAttribute("user");
if(user == null){
return "login";
}
return invocation.invoke();
}
讲解权限控制的拦截器时,ServletActionContext.getRequest().getSession().getAttribute(“user”)方式,还可以用ActionContext.getContext().getSession().get(“user”)方式判断用户是否登录,这个暂时不宜在这里引出讲解。权限验证失败后的登录页面放在commons目录中,并且将登录的result视图配置为全局视图。最后要分析当前权限拦截器以及网上一些权限判断的网站的问题用注解方式实现拦截器功能,可以看AnnotationWorkflowInterceptor的api帮助文档,或者看guides文档中讲解的注解配置方式。
发表评论
-
CSS样式表的overflow属性
2015-01-02 19:22 28一、滚动条样式overflow ... -
jrebel运用
2014-07-13 22:00 1194JRebel热部署 ... -
JPA执行原生SQL截断Char类型问题
2014-05-24 21:39 1187在JPA的API中执行原生 ... -
JPA基本数据类型映射
2014-05-24 21:06 3908/** ... -
spring定时器配置
2014-03-18 21:36 696创建测试类: ... -
The Struts dispatcher cannot be found
2013-11-03 18:48 657运行环境:struts2环境中访 ... -
JasperException
2013-09-15 20:41 1018JasperException异常: ... -
equal symbol expected
2013-09-15 20:08 1198equal symbol ... -
Hibernate主键生成器
2013-09-12 21:11 793... -
Criterion和Criteria
2013-09-08 16:00 1955Hibernate Criter ... -
getHibernateTemplate用法
2013-09-08 15:02 588HibernateTemplate提供的方法 ... -
JS中页面跳转
2013-09-08 14:01 658<html><head><t ... -
GridPanel详解
2013-03-10 10:45 10421、Ext.grid.GridPanel ... -
tomcat内存溢出
2013-03-04 20:26 727在使用Java程序从数据库中查询大量的数据或 ... -
History Object
2013-01-07 21:06 759history 对象是window 对象的另一个子 ... -
Write to programmer
2012-12-29 20:16 861很多的java初级程序员对自己没有一个明确的方 ... -
EL语言
2012-09-27 22:08 897EL的前世今生: ... -
JSTL标签的使用
2012-09-27 22:00 820JSP 标准标记库( Standard Tag Library ... -
使用IBATIS防止sql注入
2012-08-26 21:17 1620对于ibaits参数引用可以使用#和$两 ... -
IBATIS动态SQL标签用法
2012-08-26 21:04 12651、动态SQL片段通过SQL片 ...
相关推荐
2. **拦截器链**:在Struts2中,多个拦截器可以形成一个拦截器链,每个拦截器按照定义的顺序依次执行。如果所有拦截器都允许Action执行,那么Action的结果将被传递到下一个拦截器,直到整个链执行完毕。 ### 二、...
在Struts2中,拦截器(Interceptors)扮演着核心角色,增强了框架的功能和灵活性。这篇文章将深入探讨Struts2拦截器的概念、工作原理以及如何在实际应用中使用它们。 **一、什么是Struts2拦截器** 拦截器是基于AOP...
Struts2拦截器(Interceptor) Struts2拦截器(Interceptor)
拦截器是Struts2框架的核心特性之一,它们扮演着处理请求、增强功能和实现业务逻辑的角色。在Struts2中,拦截器就像过滤器一样工作,通过链式调用在动作执行前后进行预处理和后处理。 首先,我们来理解一下拦截器的...
### Struts2拦截器详解 #### 一、Struts2拦截器概述 Struts2框架作为Java Web开发中的一种流行框架,其核心组件之一便是**拦截器**。拦截器不仅在Struts2中扮演着重要角色,更是整个框架灵活性与扩展性的基石。...
在Struts2中,拦截器(Interceptor)扮演着核心角色,它们允许开发者在Action执行前后插入自定义的逻辑,如日志、权限检查、事务管理等。现在我们将深入探讨Struts2的拦截器机制及其实例应用。 ### 一、Struts2拦截...
在这个“Struts2拦截器实现权限控制demo”中,我们将深入探讨如何利用拦截器来实现细粒度的用户权限管理。 首先,我们需要了解Struts2中的拦截器工作原理。拦截器是基于Java的动态代理模式实现的,它们按照配置的...
### Struts2拦截器的使用方法 #### 一、Struts2拦截器概述 Struts2框架中的拦截器(Interceptor)是一种重要的机制,用于在Action执行前后进行一系列处理,比如参数验证、数据预处理等。它能够帮助开发者更加灵活...
当请求到达控制器时,Struts2会依次调用这个栈中的拦截器,每个拦截器都有机会处理请求,然后决定是否将请求传递给下一个拦截器或直接返回响应。 创建一个简单的Struts2拦截器,你需要遵循以下步骤: 1. 创建拦截...
Struts2拦截器.ppt Struts2拦截器.ppt Struts2拦截器.ppt
拦截器是Struts2框架的核心组成部分,它们在请求处理流程中起到了关键的作用。在本文中,我们将深入探讨Struts2拦截器的工作原理。 ### 一、拦截器概念 拦截器是基于Java的动态代理机制实现的,它允许我们在Action...
拦截器是Struts2框架的一个重要组成部分,能够帮助开发者实现一些在请求处理前后执行的通用逻辑,如日志记录、权限验证、数据校验等。在本场景中,我们将探讨如何使用Struts2拦截器来实现对不文明字迹或者敏感词汇的...
拦截器是Struts2框架的核心组件之一,它允许开发者在动作执行前后插入自定义逻辑,实现如权限验证、日志记录、性能优化等多种功能。在"Struts2 拦截器注解"这个主题中,我们将深入探讨如何利用注解来简化拦截器的...
这篇博客“Struts2 拦截器的执行顺序(二十九)”可能探讨了Struts2拦截器链的工作原理和它们的执行顺序,这对于理解Struts2的内部机制至关重要。 首先,让我们深入理解Struts2的拦截器。拦截器是在Action调用前后...
这篇博客“struts2 拦截器实现登录控制”显然会探讨如何利用拦截器来实现用户登录验证,从而保护应用程序的受保护资源。 首先,我们了解下Struts2拦截器的工作原理。拦截器是基于AOP(面向切面编程)的概念,它位于...
### Struts2 拦截器与验证框架详解 #### 一、Struts2概述 Struts2是一个基于Java的企业级Web应用开发框架,它继承了Struts1的优点,并在此基础上进行了很多改进,使得开发更加灵活高效。Struts2的核心是拦截器...
在Struts2中,拦截器扮演着至关重要的角色,它们是实现MVC(Model-View-Controller)架构的关键组件之一。拦截器允许开发者在动作执行前后插入自定义逻辑,比如日志记录、权限检查、数据验证等,而无需修改核心业务...