Struts2攔截器

攔截器
對類的攔截:
package com.chinaosft.intercepor;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.chinasoft.entity.User;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class LoginIntercepor extendsAbstractInterceptor {

@Override
public String intercept(ActionInvocation arg0) throws Exception {
// TODO Auto-generated method stub
//對類的攔截
String result="login";
HttpSession session = ServletActionContext.getRequest().getSession();
User user= (User) session.getAttribute("user");
if(user!=null){
result=arg0.invoke();
}
return result;
}

}

對方法的攔截:
package com.chinaosft.intercepor;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.chinasoft.entity.User;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;

public class SingerMIntercepor extendsMethodFilterInterceptor {

@Override
protected StringdoIntercept(ActionInvocation arg0) throwsException {
// TODO Auto-generated method stub
//對方法的攔截
String result="login";
HttpSession session = ServletActionContext.getRequest().getSession();
User user= (User) session.getAttribute("user");
if(user!=null){
result=arg0.invoke();
}
return result;
}

}

注意區分
<!--動態方法調用開啓 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="musicpackage" namespace="/" extends="struts-default">
<!--定義攔截器 -->
<interceptors>
<!-- 對類的攔截 -->
<interceptor name="loginint" class="com.chinaosft.intercepor.LoginIntercepor"></interceptor>
<!-- 對方法的攔截 -->
<interceptor name="methodint" class="com.chinaosft.intercepor.SingerMIntercepor"></interceptor>
</interceptors>
<!-- 動態方法調用 -->
<action name="singer" class="com.chinaosft.action.SingerAction">
<!-- 綁定攔截器 對整個 ACTION 的攔截-->
<!-- <interceptor-ref name="loginint"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<result name="login">/login.jsp</result> -->
<result name="select">/singer.jsp</result>
<result name="delete" type="redirectAction">
<param name="actionName">singer</param>
<param name="method">selectSinger</param>
</result>
<result name="selectOne">updateSinger.jsp</result>
<result name="update" type="redirectAction">
<param name="actionName">singer</param>
<param name="method">selectSinger</param>
</result>
<result name="add" type="redirectAction">
<param name="actionName">singer</param>
<param name="method">selectSinger</param>
</result>
<!-- 對指定方法的攔截 -->
<interceptor-ref name="methodint">
<param name="includeMethods">deleteSinger</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<result name="login">/login.jsp</result>
</action>
</package>

------------------------------------------------------------------

在一個頁面點擊登錄,登錄成功之後回到當前頁面


核心代碼 (Struts2_Test_3)

//保存訪問的地址(獲取上次訪問的URL鏈接)
String url = ServletActionContext.getRequest().getHeader("Referer");

session.setAttribute("url", url);


public String login(){
//登錄成功後保存登錄信息
HttpSession session = ServletActionContext.getRequest().getSession();
session.setAttribute("user", user);
//判斷是否有之前的頁面
Object url = session.getAttribute("url");
if(url != null){
try {
ServletActionContext.getResponse().sendRedirect(url.toString());
return null;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return "success";
}


點擊一個操作之後需先登錄,登陸後執行點擊的操作,添加核心代碼 (Struts2_Test_4)


package com.chinasoft.intercepor;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.chinasoft.entity.User;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;

public class SingerMIntercepor extends MethodFilterInterceptor {

@Override
protected String doIntercept(ActionInvocation arg0) throws Exception {
// TODO Auto-generated method stub
// 對方法的攔截
String result = "login";

HttpSession session = ServletActionContext.getRequest().getSession();
User user = (User) session.getAttribute("user");
if (user != null) {
result = arg0.invoke();
}else{
//保存訪問的地址
String url = ServletActionContext.getRequest().getRequestURL().toString();
//保存訪問地址的參數
String queryString = ServletActionContext.getRequest().getQueryString();
System.out.println(url);
if(queryString!=null){
System.out.println(queryString);
url += "?"+queryString;
}
session.setAttribute("url", url);
}

return result;
}

}


與Struts2_Test配套使用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章