今天领导布置任务需要为struts2配置一个全局的拦截器,作用是拦截url请求但不拦截ajax请求,对所有的url请求进行session失效判断。session失效时间的配置在web.xml中
<session-config>
<session-timeout>30</session-timeout>
</session-config>
首先创建全局的拦截器文件struts-interceptor.xml,在文件中创建全局的拦截器和全局的resault,代码如下。
<?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>
<package name="interceptor-default" extends="json-default">
<!-- 全局的拦截器 -->
<interceptors>
<interceptor name="sessionItcpt"
class="com.hlyd.s1.struts.iterceptor.SessionIterceptor">
</interceptor>
<!-- 自定义拦截器栈 -->
<interceptor-stack name="mySessionStack">
<interceptor-ref name="sessionItcpt"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 将自定义拦截器栈设置默认的拦截器 -->
<default-interceptor-ref name="mySessionStack"></default-interceptor-ref>
<!-- 定义全局的resault -->
<global-results>
<result name="json" type="velocity">/pages/json.vm</result>
<result name="login" type="redirectAction">
<param name="actionName">login</param>
<param name="namespace">/auth</param>
</result>
</global-results>
</package>
</struts>
下边就是使用定义好的全局拦截器了,在其struts的配置文件中extends这个配置文件就可以了。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"classpath:struts-2.1.dtd">
<struts>
<package name="auth" namespace="/auth" extends="interceptor-default">
<action name="index" class="authAction" method="index">
<result name="success" type="velocity">/pages/login.vm</result>
</action>
<action name="login" class="authAction" method="login">
<result name="success" type="redirect">/portal/frame.action</result>
<result name="errorMsg" type="velocity">/pages/login.vm</result>
</action>
</package>
</struts>