我创建了一个全局拦截器,它将检查会话超时。
<interceptors>
<interceptor class="com.action.SessionChecker" name="sessCheck"> </interceptor>
</interceptors>
<default-interceptor-ref name="sessCheck"></default-interceptor-ref>
`
现在在SessionChecker中我检查会话超时
@Override
public String intercept(ActionInvocation arg0) throws Exception {
String result;
Map<String,Object> session = arg0.getInvocationContext().getSession();
if(session.isEmpty()){
result="session_Timeout";
}
else
result=arg0.invoke();
return result;
}
在每个请求拦截器被调用之前,然后它不会转到该请求的动作类,虽然我得到了相应的请求页面但没有数据。
答案 0 :(得分:2)
配置中的以下行是将会话超时拦截器配置为堆栈中唯一的拦截器,这当然不是您想要的。
<default-interceptor-ref name="sessCheck"></default-interceptor-ref>
相反,您需要定义一个包含您要使用的所有拦截器的堆栈,并将其定义为默认值。
此外,您构建的拦截器实际上并未检测到会话已超时,而只是会话为空。我不确定填充你的会话是什么,但如果在新会话被正确填充之前调用此拦截器,它将被错误地识别为超时。