作用:在访问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 的过滤器
struts2 过滤器学习
时间: 2024-10-10 20:46:43