`

使用Struts2拦截器需要注意的地方

    博客分类:
  • Java
 
阅读更多

今天在写拦截器的时候发现一个貌似属于bug的问题

我使用的版本是2.1.8

 

当访问一个满足拦截器拦截条件的请求时,虽然代码已经执行进入拦截器,并且返回结果也是拦截后改变的跳转结果,但是却没有按照返回结果跳转,而是依旧进入了action。

 

源代码是这样的:

public String intercept(ActionInvocation invocation) throws Exception {
	ActionContext ctx = ActionContext.getContext();
	String result = invocation.invoke();
	Map session = ctx.getSession();
	if ("guest".equals(type)) {
		if (null == session.get("guest")) {
			result = Action.LOGIN;
		}
    } else {
    	if (null == session.get("user")) {
			result = Action.LOGIN;
		}
    }
	return result;
}

 

这里当用户session失效后,跳转的依然是action的指向,而不是我的login指向,这是一个很奇怪的问题

在反复检查后,终于发现,原来是invocation.invoke()在作怪

只要在返回结果前先调用了这个方法,那么无论返回结果改成什么,都不影响action的正常跳转,导致拦截跳转效果失效。

 

最终改动后的有效代码如下:

public String intercept(ActionInvocation invocation) throws Exception {
	ActionContext ctx = ActionContext.getContext();
	String result = "";
	Map session = ctx.getSession();
	if ("guest".equals(type)) {
		if (null == session.get("guest")) {
			result = Action.LOGIN;
		}
    } else {
    	if (null == session.get("user")) {
			result = Action.LOGIN;
		}
    }
	return "".equals(result) ? invocation.invoke() : result;
}

 

分享到:
评论

相关推荐

    struts-menu集成struts2.3.1例子以及注意的地方

    这通常涉及到自定义拦截器或者标签库。 5. **使用`struts-menu`标签**:在JSP页面中,使用`struts-menu`提供的标签来渲染菜单。这些标签会根据配置的数据源生成HTML代码。 6. **注意事项**:集成过程中可能会遇到...

    java Struts2 在拦截器里的跳转问题

    4. **正确使用拦截器顺序**:Struts2 中拦截器的执行顺序很重要。错误处理拦截器应放在较低的优先级,以便在其他拦截器(如认证、权限检查等)之后执行。 5. **日志和异常处理**:确保捕获并适当地记录异常,以帮助...

    struts2Jar

    7. **OGNL表达式语言**:Struts2使用OGNL(Object-Graph Navigation Language)作为默认的表达式语言,方便在Action和视图之间传递数据。 8. **类型转换**:Struts2自动处理HTTP请求参数与Action属性之间的类型转换...

    Struts2升级到2.5.30,问题解决及过程记录

    Struts2使用它进行动态代理,确保新版本的Javassist支持Struts2的新特性和修复。 2. **配置文件的调整**:Struts2的配置文件(如struts.xml)可能会因版本升级而需要调整。例如,新的版本可能会引入新的拦截器或...

    struts2介绍及应用

    - **Interceptor**:拦截器是Struts2中的重要特性,它可以像过滤器一样在Action调用前后执行额外的操作,如日志记录、权限验证、性能监控等。 - **Value Stack**:值栈是Struts2用于存储Action属性和模型对象的...

    Struts2入门案列

    8. ** strut2的安全问题**:`Struts2SecDemo`可能涉及到Struts2的安全实践,如防止XSS、CSRF等攻击,这提醒我们在使用Struts2时需要注意安全配置,及时更新框架以修补已知漏洞。 9. **程序调试**:了解如何设置断点...

    struts2整合hibernate

    可以使用Struts2的拦截器来过滤输入,防止恶意攻击。对于Hibernate,可以启用参数绑定来避免SQL注入。 通过以上步骤,我们可以成功地将Struts2的控制层与Hibernate的数据持久层结合起来,实现Web应用的用户管理及...

    struts2文本编辑器(ckeditor),简单调用不需要多余配置

    6. **与Struts2整合**:为了使CKEditor能与Struts2的文件上传功能结合,你需要配置Struts2的FileUpload拦截器,并创建一个处理上传的Action。记得配置`struts.multipart.saveDir`以指定临时文件存储位置。 7. **...

    Struts2乱码终极解决办法

    - 添加一个名为`struts-cleanup`的过滤器,使用`org.apache.struts2.dispatcher.ActionContextCleanUp`类。 ```xml <filter-name>struts-cleanup <filter-class>org.apache.struts2.dispatcher....

    struts2.zip

    Interceptor(拦截器)是Struts2中的一个重要概念,它们在Action调用前后执行,提供了预处理和后处理的功能。拦截器可以实现诸如登录检查、日志记录、性能监控等通用功能,避免在每个Action中重复编写相同的代码。...

    Struts2国际化Demo

    2. **配置Struts2**:在`struts.xml`配置文件中,我们需要定义一个拦截器栈,其中包含`i18n`拦截器。这个拦截器负责处理用户请求中的语言信息,并将当前语言设置到Action上下文中。 ```xml ... ... ...

    struts2+spring2+ibates

    3、struts.xml中命名空间和拦截器的使用。 4、sqlmapconfig.xml中传入参数和result的设置,只需要将得到的值result映射到有此属性的类对象. 5、JSP/Servlet中获得当前应用的相对路径和绝对路径 JSP中获得当前应用的...

    Struts2 S2-033漏洞分析1

    Struts 2 的体系结构与 Struts 1 的体系结构差别巨大,Struts 2 以 WebWork 为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与 ServletAPI 完全脱离开。 S2-033 漏洞是 Struts 2 中...

    struts-2.3.35相关jar包

    1. **struts2-core.jar**:这是框架的基础,包含了核心控制器、Action、拦截器、结果类型等核心组件。这个包使得开发者可以创建Action类来处理HTTP请求,并定义业务逻辑。 2. **struts2-convention-plugin.jar**:...

    Struts2学习笔记

    - **用途**:在Struts2中,OGNL被广泛用于配置文件、标签库、拦截器等地方。 - **语法**:OGNL使用简单的语法来表示对对象属性的访问和操作。 #### 04 Struts2-Tags - **标签概述**:Struts2提供了丰富的标签库,...

    struts-2.3.32所需jar包

    同时,确保正确配置了所有安全设置,如开启Struts的拦截器来过滤和验证用户输入,以及启用日志记录以便监控任何异常行为。 总的来说,下载并使用“struts-2.3.32所需jar包”是为了确保Struts 2应用程序的安全性和...

    Struts 2 取消 fielderror 系统默认样式

    Struts 2使用FreeMarker模板语言来生成视图层的HTML。你可以通过创建自定义主题来改变fielderror的呈现方式。首先,创建一个新的主题配置文件(如`mytheme.xml`),然后在struts.xml配置文件中指定这个主题。 2. *...

    struts2 无刷新上传图片

    Struts2是Apache软件基金会的开源项目,它是Struts1的升级版,提供了更强大的拦截器、插件架构和Action配置。Struts2的核心是Action类,负责处理用户的请求,并返回相应的结果到视图层。 2. **Ajax 基础** Ajax...

    struts框架图片上传和显示

    这个库提供了`FileUploadInterceptor`拦截器,用于处理上传的文件。在Action类中,我们需要定义一个字段来接收上传的文件,该字段需要使用`@ultipartFileHeader`或`@RequestParam`注解来标记。例如: ```java ...

    [Struts2.0.14.API].Struts2.0.14.API

    5. **Struts2配置**:XML配置文件(struts.xml或struts-default.xml)是定义动作、拦截器栈、结果类型等核心元素的地方。此外,还可以通过注解进行配置,使得代码更加简洁。 6. **Action与ActionMapping**:Action...

Global site tag (gtag.js) - Google Analytics