实现一个简单的拦截器 登陆以后存一个参数ssid(用户ID) 到 session里
拦截器里面的”noid” 你只要在struts.xml中设置一个全局的转发错误的页面或者返回到登陆页面就好了:
如:(
<global-results>
    <!– 逻辑名为login的结果,映射到/login.jsp页面 –>
    <result name=”noid” type=”redirect”>/noid.jsp</result>
</global-results>
)
拦截器代码:
package com.jihe.interceptor;
import java.util.Map;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class MyInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
      Map session = invocation.getInvocationContext().getSession();
      if (null != session.get(“ssid”)) {
           return invocation.invoke();
      } else {
           return “noid”;
      }
}
}
然后在sturt.xml中配置拦截器(我设置的是全局的,如果你用可能会出现问题,因为你设置这个拦截器以后在登陆时的ssid肯定是null,所以要把不需要拦截器验证的action放到别的package里如: <package name=”struts2.1″ extends=”struts-default”> )
<package name=”struts2″ extends=”struts-default” >
<interceptors>
<!– 定义权限控制拦截器 –>
<interceptor name=”authority”
class=”com.jihe.interceptor.MyInterceptor” />
<!– 定义一个包含权限控制的拦截器栈 –>
<interceptor-stack name=”mydefault”>
<interceptor-ref name=”defaultStack” />
<interceptor-ref name=”authority” />
</interceptor-stack>
</interceptors>
<!– 定义默认拦截器 –>
<default-interceptor-ref name=”mydefault” />
</package>

interceptor-stack跟interceptor-ref的区别是什麽?

interceptor-stack是一堆拦截器组成的一个拦截器栈。也可以当拦截器使用。
interceptor-ref是指定某个action使用哪一个拦截器,可以是一个interceptor,也可以是一个interceptor-stack。
将上述拦截器设定为默认拦截器:
<default-interceptor-ref name=”mydefault”/>