首页 > 代码库 > struts2 过滤器学习
struts2 过滤器学习
作用:在访问action前,后 拦截,验证或进行相应处理。本人使用拦截器是要实现登录验证功能,在访问每个action前,验证是否存在用户session
1. 编写struts2 web.xml
<struts> <constant name="struts.devMode" value=http://www.mamicode.com/"true" /><!-- 开发者模式--> <constant name="struts.multipart.maxSize" value=http://www.mamicode.com/"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 的过滤器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。