用拦截器简单的实现了登录验证,如果没有登录就跳到登录页面。
1.Interceptor 方法
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class LoginInterceptor extends AbstractInterceptor{
/*init 方法 ,仅创建Interceptor时调用一次*/
public void init() {
System.out.println("inited =================== ");
}
/*destroy 方法 ,仅摧毁Interceptor时调用一次*/
public void destroy() {
System.out.println("destroyed =================== ");
}
/*intercpte 方法,Interceptor创建后,每次拦截调用*/
public String intercept(ActionInvocation arg0) throws Exception {
HttpSession session = ServletActionContext.getRequest().getSession();//得到HttpSession
String method = arg0.getInvocationContext().getName();//得到请求action的name(不是class)
//判断 session 中“loginUser”键为空(注:此处默认登陆后会存储 用户信息 为“loginUser”到 session中)
//判断 action请求 的方法名为 不为“login” (注:此处默认 登陆请求的name名为“login”判断的目的是将“login”请求排除)
if (session.getAttribute("loginUser") == null && !"loginC".equals(method)) {
session.invalidate(); //摧毁session对象,而不是清除session中的值
return "exit"; //返回“exit”结果
}
return arg0.invoke(); //继续调用后续拦截器
}
}
2. struts.xml 中 设置拦截器
<package name="base-default" extends="struts-default" namespace="/">
<!-- 设置拦截器 -->
<interceptors>
<interceptor name="userLoginInterceptor" class="com.anteasy.struts2.interceptor.LoginInterceptor"/>
<!-- 设置拦截器栈 -->
<interceptor-stack name="baseInterceptor">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="userLoginInterceptor"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!--设置 默认拦截器 -->
<default-interceptor-ref name="baseInterceptor"/>
<!--设置 拦截结果 -->
<global-results>
<result name="exit" type="redirect">/login.jsp</result>
</global-results>
</package>
3.不同包时拦截器的调用(对于将 struts.xml 内容以 include方法引用 分开放置 是必须)
<!-- 注意 extends 为前面的"base-default" 不是"struts-default" 否则自定义的拦截器不会起作用-->
<package name="login" extends="base-default">
<action name="loginC" class="loginAction" method="login">
<result name="logined">/WEB-INF/pages/main/main.jsp
</result>
<result name="loginerr">login.jsp</result>
</action>
<action name="logout" class="loginAction" method="logout">
<result name="logouted">login.jsp</result>
</action>
</package>