作用:在访问action前,后 拦截,验证或进行相应处理。本人使用拦截器是要实现登录验证功能,在访问每个action前,验证是否存在用户session
1. 编写struts2 web.xml
<struts>
<constant name="struts.devMode" value="true" /><!-- 开发者模式-->
<constant name="struts.multipart.maxSize" value="50000000" /><!--设置最大上传限制,默认不超过2m(具体不清楚)-->
<package name="test" extends="struts-default" namespace="/">
<!-- 定义一个拦截器 -->
<interceptors>
<interceptor name="authority" class="com.zzbj.util.LoginInterceptor">
</interceptor>
<!-- 拦截器栈 -->
<interceptor-stack name="mydefault">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="authority" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="mydefault"/> <!--定义为默认拦截器,全局拦截,也可以针对action 定义拦截器-->
<!-- 定义全局Result -->
<global-results>
<!-- 当返回login视图名时,转入/login.jsp页面 -->
<result name="login">/index.jsp</result>
<!--后面三个是捕获action throws Exception-->
<result name="sql">/Error.jsp</result>
<result name="invalidinput">/Error.jsp</result>
<result name="naming">/Error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="sql" exception="java.sql.SQLException"></exception-mapping>
<exception-mapping result="invalidinput"
exception="cn.codeplus.exception.InvalidInputException"></exception-mapping>
<exception-mapping result="naming"
exception="javax.naming.NamingException"></exception-mapping>
</global-exception-mappings>
<action name="user_*" class="com.zzbj.action.UserAction"
method="{1}">
<result>/UserManage.jsp</result>
</action>
</package>
</struts>
2. 自定义拦截器com.zzbj.util.LoginInterceptor
1 public class LoginInterceptor extends AbstractInterceptor { 2 @Override 3 public String intercept(ActionInvocation invocation) throws Exception { 4 System.out.println("映射"); 5 // 取得请求相关的ActionContext实例 6 ActionContext ctx = invocation.getInvocationContext(); 7 Map session = ctx.getSession(); 8 String userRule = (String) session.get("RULE"); 9 // 如果没有登陆,或者权限rule首位不为1(没有该类权限),都返回重新登陆 10 if (userRule != null && userRule.charAt(0)==‘1‘) { 11 System.out.println("已登录"); 12 return invocation.invoke(); 13 } 14 ctx.put("return", "你还没有登录"); 15 return Action.LOGIN; 16 } 17 }
最后bug 出现在我是使用的struts2,servlet 共存,所以 struts2 在web.xml中url-pattern 过滤的不是所有而是*.aciton *.jsp.悲剧的发现对直接登录jsp页面毫无作用,决定使用servlet 的过滤器
原文:http://www.cnblogs.com/sjzq/p/3906693.html