struts2 добавление перехватчиков в struts.xml для всех классов действий

Я использовал среду Struts 2 и создал веб-приложение, в котором есть страница входа. У меня три разных Action названные классы Action1, Action2, Action3и различные представления для страниц JSP, которые отображаются при запуске некоторой бизнес-логики в Action классы.

Теперь я хочу проверить, вошел ли пользователь в систему до Action класс выполняет обработку. Итак, я создал перехватчик ниже, который отлично работает.

public String intercept(ActionInvocation invocation) throws Exception 
{
    HttpServletRequest  request  = ServletActionContext.getRequest();
    HttpServletResponse response = ServletActionContext.getResponse();
    HttpSession         session  = request.getSession();

    if(session.isNew())
    {
        response.sendRedirect("Login.action");
    }

    System.out.println("Interceptor Fired");
    String result = invocation.invoke();
    return result;
}

В чем я хочу быть struts.xml вместо добавления перехватчика для всех действий, как показано ниже

<interceptor-ref name="newStack"/>

мой struts.xml файл имеет

<package name="default" extends="struts-default">       
   <interceptors>   
    <interceptor name="printMsgInterceptor" class="LoginInterceptor"></interceptor>
         <interceptor-stack name="newStack">
        <interceptor-ref name="printMsgInterceptor"/>
        <interceptor-ref name="defaultStack" />
         </interceptor-stack>
     </interceptors>

    <action name="actone" class="Action1">
      <result name="success">/success.jsp</result>
      <interceptor-ref name="newStack"/>
    </action>
        <action name="acttwo" class="Action2">
      <result name="success">/success.jsp</result>
      <interceptor-ref name="newStack"/>
    </action>
         <action name="actthree" class="Action3">
      <result name="success">/success.jsp</result>
      <interceptor-ref name="newStack"/>
    </action>
    </package>

Для каждого действия я хочу, чтобы какое-то определение было написано в struts.xml который запускает перехватчик, а не добавление вручную

<interceptor-ref name="newStack"/> 

2 ответа

Решение
<interceptor name="test" class="Full path for LoginInterceptor" />

    <interceptor-stack name="testStack">  
         <interceptor-ref name="test"/>
         <interceptor-ref name="defaultStack"/> //here you are including default stack
    </interceptor-stack> 

</interceptors>  
<default-interceptor-ref name="testStack"></default-interceptor-ref>

Сейчас testStack выполнит для каждого запроса

Использование

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

Если ты не выкладываешь interceptor-ref вручную для каждого действия вы можете использовать default-interceptor-ref перехватывать все действия, которые явно не определены конфигурацией перехватчиков. Посмотрите, Как мы настраиваем Перехватчик, чтобы использоваться с каждым Действием.

Мы можем создать наши собственные именованные стеки и даже объявить новый стек перехватчиков по умолчанию для пакета

<package name="default" extends="struts-default" >
  <interceptors>
       <interceptor-stack name="myStack">
          <interceptor-ref name="timer"/>
          <interceptor-ref name="logger"/>
        <interceptor-ref name="defaultStack"/>
       </interceptor-stack>
  </interceptors>

Однако, если вы скажете, что перехватчик выше работает нормально, я призываю вас быть осторожным с бизнес-логикой, что действие входа не будет выполнено, если оно завершится неудачно при первом выполнении. Вместо проверки нового сеанса вы должны проверить результаты аутентифицированного пользователя и сохранить эти результаты в сеансе, который вы можете проверить в перехватчике. Смотрите этот вопрос для примера.

Пример написания перехватчика, использующего аутентифицированную информацию пользователя, в сеансе вы можете найти здесь.

Другие вопросы по тегам