配置Struts2默認的攔截器
首先struts2攔截器的類,要繼承AbstractInterceptor類。
package com.huaat.weibo.interceptor;
import org.apache.log4j.Logger;
import com.huaat.common.utils.web.Struts2Utils;
import com.huaat.weibo.vo.UserInfo;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
/**
* 攔截器
* @author jing.yue
* @version 2012/07/17 1.0.0
*/
public class UserInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = -5653729083843893528L;
// log4j日志
private static final Logger logger = Logger.getLogger(UserInterceptor.class);
@Override
public void init() {
// TODO Auto-generated method stub
logger.debug("init UserInterceptor...");
}
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
// TODO Auto-generated method stub
UserInfo userInfo = (UserInfo) Struts2Utils.getSession().getAttribute("user");
//沒有登錄, 則跳轉到登錄頁面
if(userInfo == null) {
return "login";
}
return actionInvocation.invoke();
}
}
struts2的xml的配置如下:
<package name="weibo" extends="struts-default">
<interceptors>
<!-- 先定義攔截器 -->
<interceptor name="userInterceptor" class="com.huaat.weibo.interceptor.UserInterceptor">
<!-- 指定系統初始化給攔截器的參數
<param name="hello">你好</param> -->
</interceptor>
<!-- 加到自己設置的攔截器棧里邊去 -->
<interceptor-stack name="userStack">
<interceptor-ref name="userInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 改變系統默認的攔截器,改成自己的默認攔截器,并且一個系統只能有一個默認的攔截器,這樣這個攔截器棧會默認應用到所有的Action上去 -->
<default-interceptor-ref name="userStack"></default-interceptor-ref>
<global-results>
<result name="error">/error.jsp</result>
<result name="login">/jsp/weibo/login.jsp</result>
</global-results>
<!-- 具體包配置 -->
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="error"/>
</global-exception-mappings>
</package>
如果需要使用攔截器,則package的extends屬性要繼承攔截器的package。
下面是使用這個攔截器的struts2的xml文件:
<struts>
<package name="awardcondition" extends="weibo" namespace="/">
<action name="awardConditionInfo" class="awardConditionInfoAction">
<result name="success">/list.jsp</result>
</action>
</package>
</struts>
一旦在某個包下定義了默認攔截器棧,在該包下的所有 action 都會使用此攔截器棧。對于那些不想使用些攔截器棧的 action ,則應該將它放置在其它的包下。 這樣攔截器就可以使用了!
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!