下面是我在 struts.xml 中定义的拦截器和全局结果
 <package name="auth_basic" extends="struts-default,tiles-default">
<interceptors>
        <interceptor name="nlogin" class="interceptors.LoginInterceptor"/>
        <interceptor-stack name="loginStack">
            <interceptor-ref name="nlogin"/>
            <interceptor-ref name="defaultStack"/>
        </interceptor-stack>
    </interceptors>
    <default-interceptor-ref name="loginStack"/>
    <global-results>
        <result name="login" type="redirectAction">gotostart</result>
        <result name="input" type="redirectAction">gotostart</result>
    </global-results>
.
.
.
</package>
上面的配置工作正常,但是当我使用结果chain而不是redirectAction它时,它会给出 java.lang.StackOverflowError
此外,当我使用tiles而不是链时,它也会抛出 java.lang.StackOverflowError
我不能在 global-results 中使用 action-chaining 吗?
下面是我的拦截器代码。另外,我想强调结果类型 redirectAction 工作正常,只有瓷砖和链会产生问题。
public String intercept(ActionInvocation ai) throws Exception {
    try {
        if (ai.getInvocationContext().getSession().get("user") == null) {
            System.out.println("Session Expired/Invalid");
            Object action = ai.getAction();
            if (action instanceof ValidationAware) {
                ((ValidationAware) action).addActionError("Unauthorized access. Please Login first");
            }
            return "login";
        }
        return ai.invoke();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return ai.invoke();
}
edited to include more code from struts.xml
 <package name="default" extends="struts-default,tiles-default,json-default">
    <default-action-ref name="gotostart"/>
    <global-results>
        <result name="input" type="tiles">tiles-home</result>
    </global-results>
<action name="gotostart" class="actions.IndexAction" method="start">
        <result name="success" type="tiles">tiles-home</result>
        <result name="input" type="tiles">tiles-home</result>
    </action>
</package>