1.寫一個Action類 UserManagerAction extends ActionSupport
package com.jsu.struts2.action;
import com.opensymphony.xwork2.ActionSupport;
public class UserManagerAction extends ActionSupport {
public String update() {
System.out.println("update.....");
return SUCCESS;
}
public String select() {
System.out.println("select.....");
return SUCCESS;
}
public String del() {
System.out.println("del.....");
return SUCCESS;
}
public String modify() {
System.out.println("modify.....");
return SUCCESS;
}
}
2.在攔截器中寫一個類MethodDemoInterceptor extends MethodFilterInterceptor
package com.jsu.struts2.interceptor;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
public class MethodDemoInterceptor extends MethodFilterInterceptor {
/*實現攔截邏輯*/
@Override
public String doIntercept(ActionInvocation invocation) throws Exception {
ActionContext ctx = invocation.getInvocationContext();
String flag =(String)ctx.getContext().getSession().get("flag");
if("ok".equals(flag)){
System.out.println("已經登錄、、、");
return invocation.invoke();
}else{
ctx.put("err_msg", "你還沒有登錄,請登錄、、、");
return "error";
}
}
}
3.在錯誤頁面error.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head> </head>
<body>
Error ${err_msg} <br>
</body>
</html>
4.在struts.xml文件中配置
<struts>
<package name="loginDemo" namespace="/" extends="struts-default">
<interceptor name="methodFilter" class="com.jsu.struts2.interceptor.MethodDemoInterceptor"> </interceptor>
<!-- 定義全局的Result -->
<global-results>
<result name="error">/error.jsp</result>
</global-results>
<action name="login" class="com.jsu.struts2.action.LoginAction">
<interceptor-ref name="defaultStack"></interceptor-ref>
<result>/index.jsp</result>
</action>
<action name="manager" class="com.jsu.struts2.action.UserManagerAction">
<interceptor-ref name="methodFilter">
<!-- 不需要攔截的方法 -->
<param name="excludeMethods">select</param>
<!-- 需要攔截的方法 -->
param name="includeMethods">update,del,modify</param>
</interceptor-ref>
<result>/index.jsp</result>
</action>
</package>
</struts>
5.在地址欄發請求
1.http://localhost:8080/struts2_04/manager!select.action 沒有被攔截,直接跳轉到index.jsp
2.http://localhost:8080/struts2_04/manager!update.action 或者modify 或者 del 都被攔截器攔截