struts拦截器配置和使用

来源:互联网 发布:ps调色插件 知乎 编辑:程序博客网 时间:2024/05/16 15:11

struts项目需要用到拦截器,用于校验session是否过期以及用户是否已登录,session过期和用户未登录则跳转到登录界面。

首先是在struts的配置文件struts.xml里进行拦截器bean的配置,代码如下

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.objectFactory" value="spring" />
<constant name="struts.devMode" value="false" />
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.configuration.xml.reload" value="true" />
<constant name="struts.i18n.encoding" value="utf-8" />
<constant name="struts.action.excludePattern" value="/services.*"/> 

<package name="sessionOut" extends="struts-default" >
<interceptors>
<interceptor name="sessionout"  class="com.test.SessionIterceptor" />
       <interceptor-stack name="mydefault">
            <interceptor-ref name="defaultStack" />  
            <interceptor-ref name="sessionout" />
       </interceptor-stack>

       </interceptors>

 <!-- 定义全局Result -->  
        <global-results>  
            <!-- 当返回login视图名时,转入/login.jsp页面 -->  
            <result name="login">/back/logon.jsp</result>  
        </global-results>  

</package>

<package name="dept" extends="sessionOut" namespace="/dept">
<action name="deptAction" class="deptAction" method="displayDepts">
<interceptor-ref name="mydefault" /> 
<result name="displayDepts">/listDepts.jsp</result>
</action>
</package>

</struts>

然后编写SessionIterceptor类,代码如下:

@SuppressWarnings("serial")
public class SessionIterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
 try {
 ActionContext ctx = ActionContext.getContext();
 Map session = ctx.getSession();
 Object userName  = session.get("userId").toString();
 
 if (userName != null ) {
 return actionInvocation.invoke();
 } else {
 return Action.LOGIN;
 }
} catch (Exception e) {
return Action.LOGIN;
}
}

}




0 0