1、 struts.xml配置文件
<package name="allStruts" extends="struts-default,json-default"><!--
拦截器 开始--><interceptors><!--
定义拦截器
--><!--
加入自己设置的拦截器栈里面去
--><interceptor-stack name="defaultAll">
<interceptor-ref name="isLogin"></interceptor-ref>
<interceptor-ref name="exception"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
<interceptor name="isLogin" class="com.filter.CheckLoginFilter" >//引用自己的自定义拦截器见4
</interceptor>
<interceptor name="exception" class="com.filter.CheckLoginFilter"></interceptor>
</interceptors><!--
改变系统默认的拦截器,改变自己的默认拦截器,并且一个系统只能有一个默认的拦截器,这样这个拦截器栈就会默认应用到所有的action上去
--><default-interceptor-ref name="defaultAll"></default-interceptor-ref>
<global-results>
<result name="login">/login.jsp</result>
</global-results>
<!-- 拦截器结束 -->
</package>
2、在一些中大型的系统中如果仅仅使用一个struts.xml文件,那么该文件会非常大,而且代码混乱不易维护。这个时候就需要分出其他的.xml文件,这样也更能体现模块化的设计模式,这个时候只需要在struts.xml文件中配置一下,如<include file="struts/cfg/struts_goods.xml"/>,这样系统加载的时候就会自动加载struts_goods.xml文件刘,这个文件跟struts.xml文件的格式是一模一样的,
3、全局拦截器(struts.xml的继承)
在1中我们配置的拦截器只对当前包起作用的,这个时候如果需要引用它只需要继承allStruts包就可以了,如<package name="conno" namespace="/" extends="allStruts">
这个时候该package继承allStruts,也就同时引用了它的拦截器
4、自定义拦截器写法
public class CheckLoginFilter extends MethodFilterInterceptor {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void init() {
// TODO Auto-generated method stub
}
@Override
public String doIntercept(ActionInvocation invocation) throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession(true);
CrmUserAcount acount=(CrmUserAcount) session.getAttribute("acount");
if(acount==null){
return "login";
}
return
invocation.invoke();
}
}