ext+struts2 自定义拦截器session超时 无效果

Lyn_0629 2012-07-12 05:44:23
页面是ext用ajax进行数据交互,然后做了一个自定义的session拦截器,debug已经能到SessionInterceptor,但是在跳转的时候确没反应,求解,代码如下:
1.web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">


<!-- session超时定义,单位为分钟 -->
<session-config>
<session-timeout>1</session-timeout>
</session-config>

<!-- 配置struts2的过滤器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
<!--org.apache.struts2.dispatcher.FilterDispatcher-->
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>

<!-- 配置struts2的CleanUp的Filter -->
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ActionContextCleanUp
</filter-class>
</filter>

<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<!-- 配置spring的监听器 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>

<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>

<welcome-file-list>
<welcome-file>/login.jsp</welcome-file>
</welcome-file-list>
</web-app>


2.自定义拦截类SessionInterceptor.java
import java.util.Map;

import login.action.LoginAction;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class SessionInterceptor extends AbstractInterceptor {

private static final long serialVersionUID = 1L;

public String intercept(ActionInvocation actionInvocation) throws Exception {
System.out.println(">>>Session拦截器初始化...");

ActionContext ctx = ActionContext.getContext();
// 获取session
Map<?, ?> session = ctx.getSession();
// 获取拦截器对象
Action action = (Action) actionInvocation.getAction();

// 如果获取的拦截器为 LoginAction,则不进行拦截
if (action instanceof LoginAction) {
return actionInvocation.invoke();
}

if (null == session.get("userId")) {
//此处执行并不进行跳转
return "index";
} else {
return actionInvocation.invoke();
}

}
}


3.struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<include file="struts-default.xml"/>

<package name="authority" extends="struts-default">
<interceptors>
<interceptor name="sessionout" class="common.SessionInterceptor" />
<interceptor-stack name="mydefault">
<interceptor-ref name="sessionout" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>

<default-interceptor-ref name="mydefault" />

<global-results>
<result name="index">/sessionfailure.jsp</result>
</global-results>

<action name="loginAction" class="login.action.LoginAction">
<result name="success">/page/main.jsp</result>
<result name="input">/failure.jsp</result>
</action>

<action name="logOut" class="login.action.LoginAction" method="logOut">
<result name="success">/login.jsp</result>
</action>
</package>

<include file="struts-task.xml"></include>
<include file="struts-daily.xml"></include>
</struts>
...全文
151 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧