登录拦截器(自定义拦截器)清除动作参数

时间:2015-07-08 04:07:26

标签: java struts2 struts2-interceptors

这是拦截器代码: -

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();
    }

}
}

调用任何特定的Action时,都会调用Interceptor。但Action的参数变为null。如果没有拦截器运行代码,那么它的工作正常。我尝试从很多方面解决这个问题,但找不到任何解决方案。

1 个答案:

答案 0 :(得分:0)

当你想使用Interceptor时,你需要将它添加到defaultStack或你的customStack,而你最有可能只使用Interceptor进行操作。这意味着任何其他Interceptor都没有为该动作调用运行,甚至不是参数拦截器,它负责在动作中设置参数。

错误:

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