首页 > 代码库 > struts拦截器
struts拦截器
新建拦截器需继承一个拦截器的实现类
public class LoginInterceptor extends AbstractInterceptor {
//ActionInvocation描述的是整个strutsAction类运行过程,它封装了一次strutsAction执行过程中的所有信息
public String intercept(ActionInvocation invocation) throws Exception {
//如果是主页跳转到登录页面,放行
String action = invocation.getProxy().getActionName();
if(action.equals("pages_login")){
return invocation.invoke();
}
//获取本次操作的内容
String actionName = invocation.getProxy().getAction().getClass().getName();
String methodName = invocation.getProxy().getMethod();
String totalName = actionName + "." + methodName;
//校验本次操作是否为登录
//如果当前操作是登录功能,放行
if("cn.itcast.invoice.auth.emp.web.EmpAction.login".equals(totalName)){
return invocation.invoke();
}
// 1.先获取当前登录用户的登录信息
// 从session中获取loginEm
EmpModel loginEm = (EmpModel) ActionContext.getContext().getSession().get("loginEm");
// 2.判断登录信息是否为null
if(loginEm == null){
// 2.1 如果为空,则用户没有登录,跳转到登录页面
return "noLogin";
}
// 2.2如果不为空,放行
return invocation.invoke();
}
}
在struts2的struts.xml文件中配置:
<!-- 拦截器配置必须出现在配置的上方 -->
<interceptors>
<!-- 配置自定义拦截器 -->
<interceptor name="loginInterceptor" class="cn.itcast.invoice.util.interceptor.LoginInterceptor"></interceptor>
<interceptor name="exceptionInterceptor" class="cn.itcast.invoice.util.interceptor.ExceptionInterceptor"/>
<interceptor name="authInterceptor" class="cn.itcast.invoice.util.interceptor.AuthInterceptor"/>
<!-- 需要既使用自定义的拦截器,还要使用struts默认的拦截器,将两者结合在一起 -->
<!-- struts中提供了拦截器栈,用于组合拦截器 -->
<interceptor-stack name="systemStack">
<!-- 定义所有使用的拦截器 -->
<interceptor-ref name="exceptionInterceptor"/>
<interceptor-ref name="loginInterceptor"/>
<interceptor-ref name="authInterceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<!-- 开启默认拦截器设置 -->
<default-interceptor-ref name="systemStack"/>
struts拦截器