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 都被拦截器拦截