Struts2会话已过期

Struts2会话已过期,struts2,actioncontext,Struts2,Actioncontext,我正在为我的应用程序使用struts2jquery网格插件。我正在使用interceptor进行会话超时,并在web.xml中配置会话超时,但问题是在会话超时后,它不会进入所需页面,比如login.jsp,我的struts.xml如下所示 .... <interceptors> <interceptor name="SessionCheckInterceptor" class="com.org.SessionCheckInterceptor" />

我正在为我的应用程序使用struts2jquery网格插件。我正在使用interceptor进行会话超时,并在web.xml中配置会话超时,但问题是在会话超时后,它不会进入所需页面,比如login.jsp,我的struts.xml如下所示

....

<interceptors>
        <interceptor name="SessionCheckInterceptor" class="com.org.SessionCheckInterceptor" />
        <interceptor-stack name="testSessionValidationStack">
            <interceptor-ref name="SessionCheckInterceptor" />
            <interceptor-ref name="defaultStack" />
        </interceptor-stack>    
    </interceptors>
...
<action name="mytable" class="com.org.MyTable">
        <interceptor-ref name="testSessionValidationStack"/>    
        <result name="success" type="json"/>            
        <result name="error">messages.jsp</result>
        <result name="sessionexpired">login.jsp</result>
    </action>
...
。。。。
...
messages.jsp
login.jsp
...
我可以在调试时进入拦截器类,但它不会将我重定向到登录页面。请告诉我我的代码有什么问题

我的拦截器方法是

public String intercept(ActionInvocation actionInvocation) throws Exception {
    ActionContext context = actionInvocation.getInvocationContext();
    Map<String, Object> sessionMap = context.getSession();
    log.info(" retrived session..." + sessionMap);
    if (sessionMap == null || sessionMap.isEmpty()
            || sessionMap.get("userName") == null) {
        log.info(" session expired...");

        addActionError(actionInvocation,"Session has been expired,please login again.");
        return "sessionexpired";
    }
    String actionResult = actionInvocation.invoke();
    return actionResult;
}
publicstringintercept(ActionInvocation-ActionInvocation)引发异常{
ActionContext=actionInvocation.getInvocationContext();
Map sessionMap=context.getSession();
log.info(“检索的会话…”+sessionMap);
if(sessionMap==null | | sessionMap.isEmpty()
||sessionMap.get(“用户名”)==null){
log.info(“会话已过期…”);
addActionError(actionInvocation,“会话已过期,请重新登录”);
返回“sessionexpired”;
}
字符串actionResult=actionInvocation.invoke();
返回操作结果;
}

检查您是否可以修改或调整此选项。我想这和你想做的很相似

建议 如果适合您的需要,您也可以在jsp中使用它。它是一个元标记,将其添加到jsp的
head
标记中。当会话超时时,它将自动转发到
sessionexpired.jsp
jsp。

你能向你展示拦截器方法代码吗?我正在用拦截器方法代码编辑我的问题。你为什么不使用像Spring security这样的安全框架?在会话超时时,您将被重定向到哪个页面?@Hugo:如果这是唯一的要求,我不赞成再添加一个API,但如果要求更高,我完全同意您的意见