一:首先新建拦截器类,实现AbstractInterceptor类
package cn.itcast.interceptor;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionProxy;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class UserCheckInterceptor extends AbstractInterceptor{
/**
* 拦截器业务处理方法
*/
public String intercept(ActionInvocation invocation) throws Exception {
// 拿到当前执行的方法名:判断,只有当前方法名不是login,就进行验证(验证若没有登录过,则跳转到登录页面。若已经登录
// ,则放行 )
// 1.获取ActionContext对象
ActionContext ac = invocation.getInvocationContext();
// 2,获取action的代理对象
ActionProxy proxy = invocation.getProxy();
//3,获取当前执行的方法名
String methodName = proxy.getMethod();
// 判断
if (!"login".equals(methodName)) {
// 先获取当前登陆的用户(在session中获取)
User obj = ac.getSession().get("userInfo");
if (obj == null) {
// 没有登陆
return "input";
} else {
// 当前用户有登陆
return invocation.invoke(); //直接放行
}
} else {
// 说明当前用户正在登陆
return invocation.invoke(); //直接放行
}
}
}
二:在struts.xml文件中配置新建的拦截器类,让struts知道
配置文件如下所示:
<struts>
<package name="user" extends="struts-default">
<span style="color:#cc0000;"><!-- 1.【拦截器配置】 --></span>
<interceptors>
<interceptor name="loginCheck" class="cn.itcast.interceptor.UserCheckInterceptor"></interceptor>
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="loginCheck"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- <span style="color:#cc0000;">2.【执行拦截器:</span><span style="color:#33cc00;">第一种写法</span>: 当前包下所有的action都执行myStack栈】
<default-interceptor-ref name="myStack"></default-interceptor-ref>
-->
<!-- 全局配置 -->
<global-results>
<result name="error">/error.jsp</result>
</global-results>
<action name="user_*" class="cn.itcast.action.UserAction" method="{1}">
<!--<span style="color:#33cc00;">第二种写法</span>: 只是在这一个Action中执行myStack栈
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="loginCheck"></interceptor-ref>
-->
<!-- <span style="color:#33cc00;">第三种写法</span>:执行用户栈(与第二种写法一样, 只在当前aciton中执行自定义栈) -->
<interceptor-ref name="myStack"></interceptor-ref>
<!-- 1. 登陆失败 -->
<result name="input">/login.jsp</result>
<!-- 2. 登陆成功 -->
<result name="loginSuccess" type="redirectAction">user_list</result>
<!-- 3. 列表展示 -->
<result name="list">/WEB-INF/list.jsp</result>
</action>
</package>
</struts>