Struts 2:从defaultStack拦截器中排除验证方法

Jen*_*rer 4 struts2 interceptor interceptorstack

我希望能够在Struts 2中禁用一个动作的表单验证,但是其余的拦截器堆栈仍然可以运行.

我有一个拦截器,它检查用户是否已登录,我总是希望执行,但对于某些操作(例如输入信息),我不希望validate调用该操作.

我试过做类似以下的事情:

<interceptors>

    <interceptor name="bankingAuthenticator"
        class="csc309.a4.banking.BankUserAuthenticator"/>

    <interceptor-stack name="secureBanking">
        <interceptor-ref name="bankingAuthenticator"/>
        <interceptor-ref name="defaultStack"/>
    </interceptor-stack>

</interceptors>

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

<action name="Deposit!*" method="{1}" class="csc309.a4.banking.Deposit">
    <result name="success">/banking/Deposit.jsp</result>
    <interceptor-ref name="defaultStack">
        <param name="workflow.excludeMethods">choose</param>
    </interceptor-ref>
</action>
Run Code Online (Sandbox Code Playgroud)

但它在bankingAuthenticator拦截器和验证上都会跳过.

Jen*_*rer 5

我想通了 - 解决方案看起来像这样:

<action name="Deposit!*" method="{1}" class="csc309.a4.banking.Deposit">
    <result name="success">/banking/Deposit.jsp</result>
    <interceptor-ref name="secureBanking">
        <param name="workflow.excludeMethods">choose</param>
    </interceptor-ref>
</action>
Run Code Online (Sandbox Code Playgroud)

通过将拦截器名称添加到参数名称,可以将拦截器参数限制为特定拦截器.在这种情况下,只有workflow拦截器会排除该choose方法; 其他拦截器仍将触发choose动作方法.