Struts 2: исключение метода из проверки только с помощью перехватчика defaultStack

#struts2 #interceptor #interceptorstack

#struts2 #перехватчик #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>
  

Но он пропускает как bankingAuthenticator перехватчик, так и проверку.

Комментарии:

1. Правильно; если вы указываете interceptor-ref для одного действия, вы должны указать все перехватчики для этого действия! Вы должны добавить свое решение в качестве ответа, а затем принять его, чтобы будущие посетители могли извлечь выгоду из вашей работы 🙂

2. в чем разница в коде, который вы написали выше, и в том, который вы написали в ответе… Можете ли вы сказать мне, что я не понял это должным образом…..

3. @NIVESHSENGAR, разница в том, что имя перехватчика в действии по внесению депозита — «defaultStack» в приведенном выше коде и «secureBanking» в коде в ответе.

4. Не могли бы вы, пожалуйста, сказать мне, что здесь выбрано? Находится ли метод внутри where? Я попробовал, как показано ниже. Но это все еще не исключает <action name="login"> <interceptor-ref name="secureStack"> <param name="workflow.excludeMethods">*</param> </interceptor-ref> <result>login.jsp</result> </action>

Ответ №1:

Я понял это — решение выглядит следующим образом:

 <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>
  

Параметры перехватчика могут быть ограничены конкретными перехватчиками, добавляя имя перехватчика к имени параметра. В этом случае только workflow перехватчик исключит choose метод; другие перехватчики все равно будут запускаться для choose метода действия.

Комментарии:

1. Потрясающе; рад, что вы это поняли.