`
skylovehero
  • 浏览: 31618 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts2核心拦截器

阅读更多
当struts2经过输入校验阶段(struts2系列---输入校验)后,接着将调用execute()业务逻辑方法。有时我们需要在执行execute()方法之前先进行比如登陆验证之类的判断。只有登陆过的用户才能进行业务操作。这时就需要用到Struts2的拦截器Interceptor。

以下为struts2拦截器用法的简单小结:

1.

struts.xml配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <package name="default" extends="struts-default">

        <interceptors>
       
            <!--定义拦截器-->
            <interceptor name="isLogin" class="com.test.action.interceptor.IsLoginInterceptor"></interceptor>
           
            <!--
            <!-- 自定义拦截器栈-->
            <interceptor-stack name="myStack">
                <interceptor name="isLogin"/>
                <interceptor name="defaultStack"/>
            </interceptor-stack>
            -->
           
        </interceptors>
       
        <!--
        <default-interceptor-ref name="myStack"></default-interceptor-ref>
        -->

        <!--定义全局跳转页-->
        <global-results>
            <result name="login" type="redirect">/login.jsp</result>
        </global-results>

        <action name="updateMessage" class="com.test.action.UserAction">
            <result name="success">/success.jsp</result>
            <result name="input">/index.jsp</result>
            <result name="failure">/index.jsp</result>
            <!--放入上面自定义的拦截器-->
            <interceptor-ref name="isLogin"/>
            <!--放入struts2默认的拦截器栈-->           
            <interceptor-ref name="defaultStack"/>
        </action>

    </package>

</struts>

当执行execute()方法之前被自定义的isLogin拦截器拦截下来进入到IsLoginInterceptor类来进行登陆验证。

IsLoginInterceptor.java:

public class IsLoginInterceptor extends AbstractInterceptor {

@Override
@SuppressWarnings("unchecked")
public String intercept(ActionInvocation invocation) throws Exception
{
  //获得Session对象
  Map session = invocation.getInvocationContext().getSession();
  //判断session中是否有信息
  if(session.get("userid") == null)
  {
   //无信息返回配置文件中<global-results>配置的全局页面
   return Action.LOGIN;
  }
  else
  {
   //有信息继续执行execute()方法
   return invocation.invoke();
  }
}

}

注:defaultStack是每个<action/>默认的拦截器栈。然而当用户在<action>中放入了自定义的拦截器的时候,就必须再显式的放入defaultStack。
struts2之所以能在Action类里能做那么多功能,就是依赖于其默认的拦截器栈里定义的各种拦截器。
用户可以配置自己的拦截器栈作为默认的拦截器栈:
只需将配置中的注释解开,<action/>配置里的<interceptor/>也就无需写了。此时自定义的myStack代替了defaultStack拦截器栈

实际开发中,往往配置多个拦截器栈,配置于不同业务模块的<action/>中。
但是注意默认的拦截器栈只能是一个。


2.方法过滤拦截器

默认情况下我们为某个Action定义了拦截器,则这个拦截器会拦截该Action的所有方法。有些情况下,我们无需拦截所有的方法,此时就需要使用方法过滤拦截器。

方法过滤拦截器使用方法与普通的拦截器没什么区别:

方法过滤拦截器类继承MethodFilterInterceptor,
重写的是doIntercept(ActionInvocation invacation)方法

<action/>配置中:

<!--放入上面自定义的拦截器-->
<interceptor-ref name="isLogin">
    <!-- 指定login和register方法不需要被拦截-->
    <param name="excludeMethods">login,register</param>
    <!-- 指定execute方法需要被拦截-->
    <param name="includeMethods">execute</param>
</interceptor>

分享到:
评论

相关推荐

    一个Struts2的核心拦截器例子

    核心拦截器是Struts2框架的重要组成部分,它们允许开发者在动作执行前后插入自定义逻辑,以实现如日志、权限验证、数据校验等常见功能。下面将详细讲解Struts2的核心拦截器以及如何在项目中使用它们。 1. **Struts2...

    Struts2拦截器及其用法详细说明

    在Struts2中,拦截器(Interceptors)扮演着核心角色,增强了框架的功能和灵活性。这篇文章将深入探讨Struts2拦截器的概念、工作原理以及如何在实际应用中使用它们。 **一、什么是Struts2拦截器** 拦截器是基于AOP...

    struts2 拦截器

    2. **拦截器链**:在Struts2中,多个拦截器可以形成一个拦截器链,每个拦截器按照定义的顺序依次执行。如果所有拦截器都允许Action执行,那么Action的结果将被传递到下一个拦截器,直到整个链执行完毕。 ### 二、...

    struts2学习笔记十(第10讲.Struts2的核心 拦截器)

    本篇将深入探讨Struts2的核心拦截器以及其工作原理。 在Struts2中,拦截器是一个实现了`Interceptor`接口的类,它通过在动作执行前后插入额外的处理逻辑,实现了对请求处理的增强。拦截器链是由多个拦截器按照特定...

    Struts2拦截器源码

    在Struts2框架中,拦截器扮演着至关重要的角色,它们是实现业务逻辑、验证、日志记录等功能的核心组件。下面将详细探讨Struts2拦截器的源码及其工作原理。 首先,理解拦截器的定义:拦截器是AOP(面向切面编程)的...

    struts2 拦截器实例

    在Struts2中,拦截器(Interceptor)扮演着核心角色,它们允许开发者在Action执行前后插入自定义的逻辑,如日志、权限检查、事务管理等。现在我们将深入探讨Struts2的拦截器机制及其实例应用。 ### 一、Struts2拦截...

    Struts2拦截器实现权限控制demo

    在Struts2的核心配置文件`struts.xml`中,我们可以定义拦截器链,指定哪些拦截器应用于哪些Action。 权限控制是web应用中不可或缺的一部分,它可以防止未经授权的用户访问特定资源。在Struts2中,我们可以通过拦截...

    struts2拦截器应用小例子

    在Struts2中,拦截器(Interceptor)扮演着核心角色,它们允许开发者在动作执行前后插入自定义的逻辑,如日志、权限检查、数据验证等。本示例将探讨如何在Struts2中使用拦截器。 首先,我们需要理解Struts2拦截器的...

    详解Struts2拦截器

    通过对Struts2拦截器的深入分析,我们可以看出拦截器不仅是Struts2框架的核心组成部分,也是实现代码重用、提高代码质量的有效手段。理解并合理运用拦截器,对于提升项目的开发效率和代码质量具有重要意义。

    Struts2学习案例(拦截器)

    在本学习案例中,重点在于Struts2的拦截器(Interceptor)功能,这是Struts2的核心特性之一,它允许开发者在Action执行前后进行自定义处理,实现了灵活的业务逻辑控制和增强的功能。 首先,我们来理解一下什么是...

    难经3:Struts2,拦截器拦不住Result?

    标题中的“难经3:...总的来说,解决这个问题需要对Struts2框架有深入的理解,包括其核心接口、拦截器机制以及配置方式。通过逐步排查,定位问题所在,并根据实际情况调整配置或优化代码,通常能有效解决此类问题。

    struts2拦截器

    在Struts2中,拦截器(Interceptor)是核心功能之一,用于增强应用的功能和处理业务逻辑。拦截器是基于AOP(面向切面编程)的概念,可以在动作执行前后插入额外的操作,比如日志记录、权限检查、数据验证等。 标题...

    Struts2 拦截器

    拦截器是Struts2框架的核心特性之一,它们扮演着处理请求、增强功能和实现业务逻辑的角色。在Struts2中,拦截器就像过滤器一样工作,通过链式调用在动作执行前后进行预处理和后处理。 首先,我们来理解一下拦截器的...

    struts2中拦截器的使用

    拦截器是Struts2框架的核心组件之一,它们在Action调用前后执行,提供了诸如日志记录、权限验证、数据校验等额外功能,极大地提高了代码的可复用性和可维护性。 在Struts2中,拦截器的使用主要基于两个方面:配置...

    Struts2的拦截器的小例子程序

    ### Struts2拦截器原理与实战案例解析 #### 一、Struts2拦截器概述 Struts2框架作为Java Web开发中的重要工具之一,其核心优势在于强大的MVC架构支持和丰富的扩展性。其中,拦截器(Interceptor)是Struts2框架的...

    Struts2拦截器源程序

    总结来说,Struts2拦截器是框架的核心部分,它们提供了一种灵活的方式,以实现各种功能,如日志记录、性能监控、权限控制等,同时保持代码的整洁和模块化。通过对`98struts201`文件的深入研究,我们可以更好地掌握...

    struts2.X 拦截器源码

    Struts2.X 拦截器是Apache Struts框架的核心组件之一,它是基于拦截器模式实现的,使得开发者能够方便地扩展和定制应用程序的行为。在Struts2中,拦截器扮演着中间件的角色,它在Action执行前后进行处理,可以进行如...

    Struts2的拦截器的使用详解

    拦截器是Struts2框架的核心组件之一,它是在动作执行前后插入的一段代码,能够对请求进行预处理和后处理。通过定义一系列拦截器并设置它们的执行顺序,你可以实现如日志记录、权限验证、性能监控等通用功能,而无需...

    struts2 Interceptor拦截器

    ### Struts2 Interceptor 拦截器详解 #### 一、概述 在现代Web开发中,特别是基于Java的Web应用程序开发中,Struts2框架因其简洁性和强大的扩展能力而备受青睐。Struts2框架的核心设计理念之一是MVC(Model-View-...

Global site tag (gtag.js) - Google Analytics