我用的是struts2.3版本。
先贴上struts.xml中的拦截器配置:
<interceptors>
<!-- 配置一个自定义拦截器器 -->
<interceptor name="loginCheck"
class="com.tutorialspoint.logins.loginInterceptor">
</interceptor>
<!-- 再配置一个拦截的排列。我的理解就是先经过loginCheck拦截器器,再进行后面的操作;defaultStack代表的应该是之后的操作 -->
<interceptor-stack name="myStack">
<interceptor-ref name="loginCheck" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<!-- 创建默认拦截排列 也就是所有的action都要接受拦截-->
<default-interceptor-ref name="myStack"></default-interceptor-ref>
再贴上拦截器指向的类:这个类把所有未登录session的账号拦截,返回到登录页面。
public class loginInterceptor extends AbstractInterceptor{
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception
{
Map session = actionInvocation.getInvocationContext().getSession();
if(null == session.get("email")){
System.out.println("Session未登陆");
return "unlogin";
}
return actionInvocation.invoke();
}
}
下面这个也就是unlogin所映射的jsp。
<global-results>
<result name="unlogin">/templets/login.jsp</result>
<result name="error">/error.jsp</result>
</global-results>
上面配置完也就是对所有的action 进行拦截。如果不想让aciton被拦截,
则要像下面的配置action ,例如:在登录页面已经明白是未登录的,不需要拦截。。
<action name="login" class="com.tutorialspoint.logins.LoginAction"
method="execute">
<!-- 自定义排列 应该是优先级大于上面的 myStack排列。所以它不需要经过loginCheck拦截器-->
<interceptor-ref name="defaultStack"></interceptor-ref>
<result name="success">/templets/login.jsp</result>
</action>
拦截器的会在action的方法实现之前进行拦截,也可以在之后进行拦截。