LoginInterceptor.java(自定义拦截器,继承MethodFilterInterceptor抽象类):
package cn.xxx.web.interceptor;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
public class LoginInterceptor extends MethodFilterInterceptor {
//指定不拦截登陆方法. 其他方法都拦截
@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
//1.获得session
Map<String, Object> session = ActionContext.getContext().getSession();
//2.获得登陆标识
Object object = session.get("user");
//3.判断登陆标识是否存在
if(object == null){
//不存在=>没登录=>重定向到登录页面
return "toLogin"; // src/struts.xml配置文件中配置全局结果集 "toLogin"
}else{
//存在=>已经登陆=>放行
return invocation.invoke();
}
}
}
src/struts.xml(Struts2的配置文件,配置自定义拦截器,定制拦截方法,配置全局结果集):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="true"></constant>
<package name="crm" namespace="/" extends="struts-default" >
<interceptors>
<!-- 注册拦截器 -->
<interceptor name="loginInterceptor" class="cn.xxx.web.interceptor.LoginInterceptor"></interceptor>
<!-- 注册拦截器栈 -->
<interceptor-stack name="myStack">
<interceptor-ref name="loginInterceptor">
<param name="excludeMethods">login</param> <!-- 定制拦截方法。指定哪些方法不拦截 -->
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref> <!-- 引入默认的20个拦截器 -->
</interceptor-stack>
</interceptors>
<!-- 指定该包的默认拦截器栈 -->
<default-interceptor-ref name="myStack"></default-interceptor-ref>
<!-- 定义全局结果集,不需要在每个Action中都配置该Result结果 -->
<global-results>
<result name="toLogin" type="redirect" >/login.jsp</result>
</global-results>
<!-- 配置全局异常处理 -->
<global-exception-mappings>
<!-- 如果出现java.lang.RuntimeException异常,就将跳转到名为error的结果 -->
<exception-mapping result="error" exception="java.lang.RuntimeException"></exception-mapping>
</global-exception-mappings>
<action name="CustomerAction_*" class="cn.xxx.web.action.CustomerAction" method="{1}" >
<result name="list" >/jsp/customer/list.jsp</result>
<result name="toList" type="redirectAction">
<param name="actionName">CustomerAction_list</param>
<param name="namespace">/</param>
</result>
</action>
<action name="UserAction_*" class="cn.xxx.web.action.UserAction" method="{1}" >
<result name="toHome" type="redirect" >/index.htm</result>
<result name="error" >/login.jsp</result>
</action>
</package>
</struts>