перехватчик struts2, перенаправляющий дважды к действию - PullRequest
0 голосов
/ 14 февраля 2012

У меня есть logininterceptor, который проверяет объект члена сеанса и, если он пуст, перенаправляет его на страницу входа, в противном случае продолжает действовать.

Каждый блок действий имеет этот перехватчик. Проблема в том, что когда вы вызываете action, он попадает на перехватчик, если это правда, продолжить метод действия, затем возвращать «success» или «input», а затем снова нажимать на перехватчик, чтобы перенаправить выбранное имя результата.

Как я могу предотвратить вызов перехватчика дважды?

Код перехватчика:

public String intercept(ActionInvocation actionInvocation) throws Exception {
        HttpServletRequest request = (HttpServletRequest) actionInvocation.getInvocationContext().get(StrutsStatics.HTTP_REQUEST);
        HttpSession session = request.getSession();

    if (session.getAttribute("member")==null) {

        return Action.LOGIN;
    } else {
        return actionInvocation.invoke();
    }
}

просмотр действия struts.xml:

    <action name="actionName" class="actionClass" method="init">
        <interceptor-ref name="loginStack"/>
        <result name="input">show.jsp</result>
    </action>

1 Ответ

2 голосов
/ 15 февраля 2012

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

Если вы перешлите в JSP какздесь показано, что перехватчик будет не вызываться снова.


Нет необходимости объявлять это для каждого действия - установить стек перехватчика по умолчанию.Для действий, которые не не нуждаются в этом стеке (например, вход в систему), определите ссылку на перехватчик для этого действия, которое не включает этот перехватчик.

...