为了账号安全,请及时绑定邮箱和手机立即绑定

Struts2拦截器浅析

难度中级
时长59分
学习人数
综合评分9.77
231人评价 查看评价
9.9 内容实用
9.7 简洁易懂
9.7 逻辑清晰
  • 1.定义拦截器 1.1.创建一个拦截器类继承自AbstractInterceptor类 1.2.实现intercept方法 eg: public String intercept(ActionInvocation invocation) throws Exception { //1.执行action之前 long start=System.currentTimeMillis(); //2.执行下一个拦截器,如果是最后一个拦截器,则执行目标action String result=invocation.invoke(); //3.执行action之后 long end=System.currentTimeMillis(); //4.花费的时间 long time=end-start; System.out.println("执行花费的时间: "+time+" ms"); return result; } 2.配置拦截器 <interceptors> <interceptor name="timeinterceptor" class="com.imooc.interceptor.TimerInterceptor"></interceptor> </interceptors> 3.引用拦截器 <interceptor-ref name="timeinterceptor"></interceptor-ref>
    查看全部
  • 自定义拦截器: 1.方法一:实现Interceptor接口 -void init():初始化拦截器所需资源 -void destroy() :释放在init()中分配的资源 -String intercept(ActionInvocation ai)throws Exception 实现拦截器功能,利用ActionInvocation参数获取Action状态,返回result字符串作为逻辑视图。 2.方式二:继承AbstractInterceptor类 -提供了init()和destroy() 方法的空实现 -只需要实现intercept方法即可 实际开发当中一般会去继承AbstractInterceptor这个父类
    查看全部
  • 客户端通过HttpServletRequest提交一个请求,这个请求通过一系列的过滤器,最终被Struts2核心控制器过滤到,核心控制器通过ActionMapper决定是否要调用某一个Action ,即用户是否请求某个Action,Action代理,通过配置管理器加载Strusts核心配置文件,加载Struts.xml ActionProxy创建Action实例(拦截器),调用拦截器,再调用action,调用action中的业务处理方法进行业务处理,同时业务返回一个结果,再次将拦截器反向执行,通过HttpServletResponse响应客户端请求
    查看全部
  • 再增删改查过程中,加入关于权限的拦截器
    查看全部
  • 完成权限的校验
    查看全部
  • 相关代码——(下): @login.jsp 信息:${session_error} <form action="Login" method="post"><!-- 默认情况下:Login.action或Login都行。 --> 用户名:<input name="user" type="text" /> 密码:<input name="pwd" type="password" /> <input value="Login" type="submit" /> </form> @manager.jsp 后台管理页面。只有已登录的用户才能访问!
    查看全部
  • 相关代码——(中): @struts.xml <struts> <package name="default" extends="struts-default" namespace="/"> <!-- 注册拦截器 --> <!-- Ps:拦截器栈内的拦截器(除了默认拦截器)的name要与拦截器栈外的拦截器要一致,因为引用拦截器栈的时候,里面的拦截器是从外面的拦截器中的class引用的 --> <interceptors> <interceptor name="AuthI" class="com.imooc.interceptor.AuthInterceptor"></interceptor> <!-- 自定义拦截器mystack:组合了defaultStack和AuthI --> <interceptor-stack name="mystack"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="AuthI"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 通过此Action访问后台管理页面,需要判断用户是否已登录,如果未登录则跳转到登录页面 --> <action name="Auth"> <result>/WEB-INF/page/manager.jsp</result> <result name="login">/login.jsp</result> <!-- 引用自定义的拦截器 --> <interceptor-ref name="mystack"></interceptor-ref> </action> <action name="Login" class="com.imooc.action.LoginAction" method="login"> <result>/WEB-INF/page/manager.jsp</result> <result name="error">/login.jsp</result> </action> </package> </struts>
    查看全部
  • 相关代码——(上): @LoginAction.java public class LoginAction extends ActionSupport implements SessionAware{ private String user; private String pwd; private Map<String,Object> session; public void setSession(Map<String, Object> session) { this.session=session; } // setter/getter... public String login(){ if("admin".equals(user)&&"admin".equals(pwd)){ session.put("session_user", user); return SUCCESS; }else{ session.put("session_error", "用户名或密码不正确!"); return ERROR; } } } @AuthInterceptor.java public class AuthInterceptor extends AbstractInterceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { ActionContext context=ActionContext.getContext(); Map<String , Object> session=context.getSession(); if(session.get("session_user")!=null){ String result=invocation.invoke(); return result; }else{ return "login"; } } }
    查看全部
  • Struts2内置常用的拦截器: 1.params拦截器: -负责将请求参数设置为Action属性 2.staticParams拦截器: -将配置文件中action元素的子元素param参数设置为Action属性 3.servletConfig拦截器: -将源于Servlet API的各种对象注入到Action,必须实现对应接口 4.fileUpload拦截器: -对文件上传提供支持,将文件和元素设置到对应的Action属性,实际上内部依然使用了Commons-FileUpload组件。 5.exception拦截器: -捕获异常,并且将异常映射到用户自定义的错误页面 6.validation拦截器: -调用验证框架进行数据验证 更多的拦截器可在struts2-core包的struts-default.xml中查看
    查看全部
  • 默认拦截器栈: <!-- 为Action显示引用拦截器后,默认的拦截器defaultStack不再生效,需要手工引用。而且从顺序角度去讲,最好把默认的拦截器写在自定义拦截器上面 --> <interceptor-ref name="defaultStack"></interceptor-ref>
    查看全部
  • 1.定义拦截器 1.1.创建一个拦截器类继承自AbstractInterceptor类 1.2.实现intercept方法 eg: public String intercept(ActionInvocation invocation) throws Exception { //1.执行action之前 long start=System.currentTimeMillis(); //2.执行下一个拦截器,如果是最后一个拦截器,则执行目标action String result=invocation.invoke(); //3.执行action之后 long end=System.currentTimeMillis(); //4.花费的时间 long time=end-start; System.out.println("执行花费的时间: "+time+" ms"); return result; } 2.配置拦截器 <interceptors> <interceptor name="timeinterceptor" class="com.imooc.interceptor.TimerInterceptor"></interceptor> </interceptors> 3.引用拦截器 <interceptor-ref name="timeinterceptor"></interceptor-ref>
    查看全部
  • 相关代码——(下): @login.jsp 信息:${session_error} <form action="Login" method="post"><!-- 默认情况下:Login.action或Login都行。 --> 用户名:<input name="user" type="text" /> 密码:<input name="pwd" type="password" /> <input value="Login" type="submit" /> </form> @manager.jsp 后台管理页面。只有已登录的用户才能访问!
    查看全部
  • 相关代码——(中): @struts.xml <struts> <package name="default" extends="struts-default" namespace="/"> <!-- 注册拦截器 --> <!-- Ps:拦截器栈内的拦截器(除了默认拦截器)的name要与拦截器栈外的拦截器要一致,因为引用拦截器栈的时候,里面的拦截器是从外面的拦截器中的class引用的 --> <interceptors> <interceptor name="AuthI" class="com.imooc.interceptor.AuthInterceptor"></interceptor> <!-- 自定义拦截器mystack:组合了defaultStack和AuthI --> <interceptor-stack name="mystack"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="AuthI"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 通过此Action访问后台管理页面,需要判断用户是否已登录,如果未登录则跳转到登录页面 --> <action name="Auth"> <result>/WEB-INF/page/manager.jsp</result> <result name="login">/login.jsp</result> <!-- 引用自定义的拦截器 --> <interceptor-ref name="mystack"></interceptor-ref> </action> <action name="Login" class="com.imooc.action.LoginAction" method="login"> <result>/WEB-INF/page/manager.jsp</result> <result name="error">/login.jsp</result> </action> </package> </struts>
    查看全部
  • 相关代码——(上): @LoginAction.java public class LoginAction extends ActionSupport implements SessionAware{ private String user; private String pwd; private Map<String,Object> session; public void setSession(Map<String, Object> session) { this.session=session; } //setter/getter... public String login(){ if("admin".equals(user)&&".".equals(pwd)){ session.put("session_user", user); return SUCCESS; }else{ session.put("session_error", "用户名或密码不正确!"); return ERROR; } } } @AuthInterceptor.java public class AuthInterceptor extends AbstractInterceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { ActionContext context=ActionContext.getContext(); Map<String , Object> session=context.getSession(); if(session.get("session_user")!=null){ String result=invocation.invoke(); return result; }else{ return "login"; } } }
    查看全部
  • 下面是4个开发模式常用配置的简介--- <!-- 开启使用开发模式,详细错误提示 --> <!-- <constant name="struts.devMode" value="true"/>--> <!-- 指定每次请求到达,重新加载资源文件 --> <!-- <constant name="struts.i18n.reload" value="true"/>--> <!-- 指定每次配置文件更改后,自动重新加载 --> <!-- <constant name="struts.configuration.xml.reload" value="true"/>--> <!-- 指定XSLT Result使用样式表缓存 --> <!-- <constant name="struts.xslt.nocache" value="true"/>-->
    查看全部

举报

0/150
提交
取消
课程须知
本课程主要讲解Struts2中的拦截器,小伙伴们需要对Struts2基本用法、 Action配置等相关知识有一定的基础。
老师告诉你能学到什么?
1、拦截器概念、作用 2、Struts2内建的拦截器 3、如何自定义拦截器 4、使用拦截器实现权限控制

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!