Перехватчик входа в систему (пользовательский перехватчик), очищающий параметры действия

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

public class LoginInterceptor extends AbstractInterceptor implements
    StrutsStatics {
/**
 * 
 */
private static final long serialVersionUID = 1L;

@Override
public String intercept(ActionInvocation invocation) throws Exception {
    ActionContext context = invocation.getInvocationContext();
    HttpServletRequest request = (HttpServletRequest) context
            .get(HTTP_REQUEST);
    HttpSession session = request.getSession(false);

    String loginId = (String) session
            .getAttribute(Constants.SESSION_ATT_USERID);

    if (loginId == null) {
        return Action.LOGIN;
    } else {
        return invocation.invoke();
    }

}
}

При вызове любого конкретного действия вызывается перехватчик. Но параметры действия становятся нулевыми. Если запустить код без перехватчика, то он работает нормально. Я пытался решить эту проблему разными способами, но не нашел решения.


person jitin gambhir    schedule 08.07.2015    source источник


Ответы (1)


Если вы хотите использовать перехватчик, вам нужно ДОБАВИТЬ его в стек по умолчанию или в собственный стек, хотя вы, скорее всего, использовали ТОЛЬКО этот перехватчик для своего действия. Это означает, что никакой другой перехватчик не работает для этого вызова действия, даже перехватчик параметров, который отвечает за установку параметров в действии.

Неправильно:

<action name="foo" class="org.foo.bar.foobarAction">

    <interceptor-ref name="myLoginInterceptor"/>

    <result>success.jsp</result>
</action>

Верно:

<action name="foo" class="org.foo.bar.foobarAction">

    <interceptor-ref name="myLoginInterceptor"/>
    <interceptor-ref name="defaultStack"/>

    <result>success.jsp</result>
</action>
person Andrea Ligios    schedule 08.07.2015
comment
Лол, приятель :) это был выстрел в темноте, теперь вам нужно опубликовать более подробную информацию, иначе ваш вопрос останется без ответа - person Andrea Ligios; 09.07.2015