Struts2 常用拦截器

转自:http://neil-jh.javaeye.com/blog/197882

Struts2 XWork )提供的拦截器的功能说明:

 

拦截器

名字

说明

Alias Interceptor

alias

在不同请求之间将请求参数在不同名字件转换,请求内容不变

Chaining Interceptor

chain

让前一个 Action 的属性可以被后一个 Action 访问,现在和 chain 类型的 result<result type=”chain”> )结合使用。

Checkbox Interceptor

checkbox

添加了 checkbox 自动处理代码,将没有选中的 checkbox 的内容设定为 false ,而 html 默认情况下不提交没有选中的 checkbox

Cookies Interceptor

cookies

使用配置的 name,value 来是指 cookies

Conversion Error Interceptor

conversionError

将错误从 ActionContext 中添加到 Action 的属性字段中。

Create Session Interceptor

createSession

自动的创建 HttpSession ,用来为需要使用到 HttpSession 的拦截器服务。

Debugging Interceptor

debugging

提供不同的调试用的页面来展现内部的数据状况。

Execute and Wait Interceptor

execAndWait

在后台执行 Action ,同时将用户带到一个中间的等待页面。

Exception Interceptor

exception

将异常定位到一个画面

File Upload Interceptor

fileUpload

提供文件上传功能

I18n Interceptor

i18n

记录用户选择的 locale

Logger Interceptor

logger

输出 Action 的名字

Message Store Interceptor

store

存储或者访问实现 ValidationAware 接口的 Action 类出现的消息,错误,字段错误等。

Model Driven Interceptor

model-driven

如果一个类实现了 ModelDriven ,将 getModel 得到的结果放在 Value Stack 中。

Scoped Model Driven

scoped-model-driven

如果一个 Action 实现了 ScopedModelDriven ,则这个拦截器会从相应的 Scope 中取出 model 调用 ActionsetModel 方法将其放入 Action 内部。

Parameters Interceptor

params

将请求中的参数设置到 Action 中去。

Prepare Interceptor

prepare

如果 Acton 实现了 Preparable ,则该拦截器调用 Action 类的 prepare 方法。

Scope Interceptor

scope

Action 状态存入 sessionapplication 的简单方法。

Servlet Config Interceptor

servletConfig

提供访问 HttpServletRequestHttpServletResponse 的方法,以 Map 的方式访问。

Static Parameters Interceptor

staticParams

struts.xml 文件中将 <action> 中的 <param> 中的内容设置到对应的 Action 中。

Roles Interceptor

roles

确定用户是否具有 JAAS 指定的 Role ,否则不予执行。

Timer Interceptor

timer

输出 Action 执行的时间

Token Interceptor

token

通过 Token 来避免双击

Token Session Interceptor

tokenSession

Token Interceptor 一样,不过双击的时候把请求的数据存储在 Session

Validation Interceptor

validation

使用 action-validation.xml 文件中定义的内容校验提交的数据。

Workflow Interceptor

workflow

调用 Actionvalidate 方法,一旦有错误返回,重新定位到 INPUT 画面

Parameter Filter Interceptor

N/A

从参数列表中删除不必要的参数

Profiling Interceptor

profiling

通过参数激活 profile

 

另外 AbstractInterceptor 提供了一个简单的 Interceptor 的实现,这个实现为:

public abstract class AbstractInterceptor implements Interceptor {

 

     public void init() {

    }

   

    public void destroy() {

    }

 

 

    public abstract String intercept(ActionInvocation invocation) throws Exception;

}

在不需要编写 initdestroy 方法的时候,只需要从 AbstractInterceptor 继承而来,实现 intercept 方法即可。

 

我们尝试编写一个 Session 过滤用的拦截器,该拦截器查看用户 Session 中是否存在特定的属性( LOGIN 属性)如果不存在,中止后续操作定位到 LOGIN ,否则执行原定操作,代码为:

public class CheckLoginInterceptor extends AbstractInterceptor {

    public static final String LOGIN_KEY = "LOGIN";

    public static final String LOGIN_PAGE = "global.login";

 

     public String intercept(ActionInvocation actionInvocation) throws Exception {

 

        System.out.println("begin check login interceptor!");

        // LoginAction 不做该项拦截

        Object action = actionInvocation.getAction();

        if (action instanceof LoginAction) {

            System.out.println("exit check login, because this is login action.");

            return actionInvocation.invoke();

        }

 

        // 确认 Session 中是否存在 LOGIN

        Map session = actionInvocation.getInvocationContext().getSession();

        String login = (String) session.get(LOGIN_KEY);

        if (login != null && login.length() > 0) {

            // 存在的情况下进行后续操作。

            System.out.println("already login!");

            return actionInvocation.invoke();

        } else {

             // 否则终止后续操作,返回 LOGIN

            System.out.println("no login, forward login page!");

            return LOGIN_PAGE;

        }

    }

}

 

注册拦截器

<interceptors>

            <interceptor

name="login" 

class="com.jpleasure.teamware.util.CheckLoginInterceptor"/>

            <interceptor-stack name="teamwareStack">

                <interceptor-ref name="login"/>

                <interceptor-ref name="defaultStack"/>

            </interceptor-stack>

</interceptors>

 

将上述拦截器设定为默认拦截器:

<default-interceptor-ref name="teamwareStack"/>

这样在后续同一个 package 内部的所有 Action 执行之前都会被 login 拦截。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值