Struts2让拦截器不能运行某些类

时间:2014-02-11 12:51:07

标签: java struts2

我有一个自定义拦截器。我希望这个拦截器能够在所有动作调用上运行,除了少数几个。我想对此进行编程(为了扩展性/清晰度),而不是使用if / else语句在拦截器的intercept()方法本身中检查操作的名称。

我认为可能会使用Struts2的“排除方法”功能来完成,但我仍然坚持使用具体的细节。我认为我的拦截器需要扩展MethodFilterInterceptor,但它有2个拦截方法,并且API在说出每个应该做的事情上没有多大帮助:

  

protected abstract String doIntercept(ActionInvocation invocation)

      Subclasses must override to implement the interceptor logic.
     

字符串拦截(ActionInvocation调用)

      Override to handle interception

2 个答案:

答案 0 :(得分:3)

你正在考虑相反的方式:

而不是检查Action名称(或更好,instanceOf以检查特定的Action Interface)以查看它是否应该做一些事情,只需告诉Action使用不同的Interceptor Stack

例如,您可以说您的自定义堆栈(包含您的拦截器的堆栈)是默认值(然后应用于所有操作),但ActionA,ActionB和ActionX使用DefaultStack运行...

答案 1 :(得分:1)

  1. 拦截器不应该扩展ActionSupport, yuck 。他们不是行动。
  2. 使用界面或注释标记它应该(或不应该)运行的动作,并在拦截器中检查它。