版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于Struts框架实现企业级WEB应用第第五五章章Struts 2Struts 2拦截器拦截器课程回顾课程回顾在在Struts2Struts2中配置包时继承自什么包中配置包时继承自什么包struts-defaultstruts-default在在struts.xmlstruts.xml中什么元素用于将一个配置文件分解成多个配中什么元素用于将一个配置文件分解成多个配置文件置文件includeinclude什么结果类型是什么结果类型是Struts2Struts2默认的结果类型?还有其他什么结默认的结果类型?还有其他什么结果类型?果类型?dispatcherdispatcherredirectre
2、directchainchainredirectActionredirectAction学习学习内容内容拦截器工作原理拦截器工作原理Struts 2Struts 2自带拦截器自带拦截器自定义拦截器自定义拦截器能力能力目标目标理解理解Struts2Struts2拦截器的工作原理拦截器的工作原理掌握在掌握在Struts2Struts2中开发自定义拦截器中开发自定义拦截器为什么要使用拦截器为什么要使用拦截器对于对于Struts2Struts2框架的框架的ActionAction而言,总会有一些经常性的操作,例如而言,总会有一些经常性的操作,例如,对用户输入的数据进行校验、解析文件上传表单中的文件域、
3、防,对用户输入的数据进行校验、解析文件上传表单中的文件域、防止表单的多次提交、通过检查会话中的用户状态限制用户非法登录止表单的多次提交、通过检查会话中的用户状态限制用户非法登录等等 通过在配置文件中指定拦截器,从而可以让拦截器方法在目标方法通过在配置文件中指定拦截器,从而可以让拦截器方法在目标方法执行之前或执行之后自动执行,从而完成通用操作的动态插入执行之前或执行之后自动执行,从而完成通用操作的动态插入在这种策略下那些经常性的操作都被定义成相应的拦截器在这种策略下那些经常性的操作都被定义成相应的拦截器什么是拦截器什么是拦截器拦截器是动态拦截拦截器是动态拦截ActionAction调用的对象。它
4、提供了一种机制可使开发调用的对象。它提供了一种机制可使开发者可以定义在一个者可以定义在一个actionaction执行的前后执行的代码,也可以在一个执行的前后执行的代码,也可以在一个actionaction执行前阻止其执行,同时也提供了一种可提取执行前阻止其执行,同时也提供了一种可提取actionaction中通用中通用操作的方式操作的方式Struts2 Struts2 拦截器拦截器ActionContextCleanUp其它的过滤器(如 SiteMesh等)FilterDispatcherAction代理配置管理器struts.xmlActionInvocation拦截器1拦截器2拦截器3A
5、ctionResult拦截器3拦截器2拦截器1Action映射器标签库视图模板-jsp-FreeMarker-等等HTTP响应HTTP请求默认的拦截器默认的拦截器Struts2Struts2框架提供了许多拦截器,这些内建的拦截器实现了框架提供了许多拦截器,这些内建的拦截器实现了Struts2Struts2的大部分功能,的大部分功能,在在struts2-core-.jarstruts2-core-.jar的根目录下有一个的根目录下有一个struts-struts-default.xmldefault.xml文件,配置了默认的拦截器。文件,配置了默认的拦截器。默认的拦截
6、器默认的拦截器exceptionexception:捕获异常并能根据异常类型映射到用户自定:捕获异常并能根据异常类型映射到用户自定义的错误页面。义的错误页面。fileUploadfileUpload:提供文件上传功能。:提供文件上传功能。paramsparams:将请求中的参数设置到:将请求中的参数设置到ActionAction的属性上。的属性上。scopescope:将:将ActionAction状态存入状态存入sessionsession和和applicationapplication的简单的简单方法。方法。servletConfigservletConfig:提供访问:提供访问HttpS
7、ervletRequestHttpServletRequest和和HttpServletResponseHttpServletResponse的方法,以的方法,以MapMap的方式访问。的方式访问。tokentoken:防止表单重复提交。:防止表单重复提交。tokenSessiontokenSession:和:和tokentoken一样,不过双击的时候把请求一样,不过双击的时候把请求的数据存储在的数据存储在sessionsession中。中。validationvalidation:执行数据校验。:执行数据校验。workflowworkflow:调用:调用ActionAction的的valid
8、atevalidate方法,一旦有错误返方法,一旦有错误返回就终止执行流程。回就终止执行流程。Struts2Struts2框架提供了许多拦截器,这些内建的拦截器实现框架提供了许多拦截器,这些内建的拦截器实现了了Struts2Struts2的大部分功能,但是一些系统逻辑相关的通用的大部分功能,但是一些系统逻辑相关的通用功能,则可以通过自定义拦截器来实现功能,则可以通过自定义拦截器来实现自定义的拦截器类,应该实现自定义的拦截器类,应该实现erceptor.Iercepto
9、r.Interceptor接口接口 创建自定义的拦截器创建自定义的拦截器public interface Interceptor extends Serializable /销毁拦截器之前的回调方法销毁拦截器之前的回调方法 void destroy(); /初始化该拦截器的回调方法初始化该拦截器的回调方法 void init(); /拦截器实现拦截的逻辑方法拦截器实现拦截的逻辑方法 String intercept(ActionInvocation invocation) throws Exception;intercept(Actionlnvocationintercept(Actionln
10、vocation invocation)invocation),该方法是用,该方法是用户需要实现的拦截器动作,返回一个户需要实现的拦截器动作,返回一个resultresult配置字符串作配置字符串作为逻辑视图。为逻辑视图。该方法的该方法的ActionInvocationActionInvocation参数包含被拦截的参数包含被拦截的ActionAction的引的引用,可以通过调用该参数的用,可以通过调用该参数的invokeinvoke方法,将控制权转给下方法,将控制权转给下一个拦截器或者一个拦截器或者Action Action 创建自定义的拦截器创建自定义的拦截器业务描述:业务描述:用户必须先
11、登录然后才能访问指定的用户必须先登录然后才能访问指定的ActionAction和和JSPJSP视图,使用拦截视图,使用拦截器来限制未登录用户器来限制未登录用户。创建自定义的拦截器创建自定义的拦截器public class SysUserAction extends BaseAction private SysUserBizFace userBiz;private SysUser user;public String checkLogin()user=userBiz.checkLogin(user);if(user!=null)this.getSession().put(user,user);r
12、eturn success;elsereturn fail;./省略get/set方法Struts2Struts2还提供了一个还提供了一个erceptor.AbstractIerceptor.AbstractInterceptorerceptor类类, ,该类提供了一个该类提供了一个initinit和和destorydestory方法的空实现方法的空实现继承自继承自AbstractInterceptorAbstractInterceptor类来实现自定义拦截器会更类来实现自定义拦截器
13、会更加简便加简便 创建自定义的拦截器创建自定义的拦截器public class LoginInterceptor extends AbstractInterceptor public String intercept(ActionInvocation invocation) throws Exception HttpSession session=ServletActionContext.getRequest().getSession();SysUser user=(SysUser) session.getAttribute(user);if(user!=null)return invocat
14、ion.invoke();return login; 使用自定义拦截器使用自定义拦截器 /index.jsp 在interceptors元素中配置拦截器 定义包含新定义拦截器的拦截器栈当配置一个包时,可以为其指定默认拦截器当配置一个包时,可以为其指定默认拦截器 一旦为某个包指定了默认拦截器,则该包中所有没有指一旦为某个包指定了默认拦截器,则该包中所有没有指定拦截器的定拦截器的ActionAction都将受默认拦截器作用都将受默认拦截器作用默认拦截器默认拦截器 . . . 定义 名为myInterceptor、 testInterceptor拦截器 将myInterceptor配置成该包的默认拦
15、截器 myInterceptor默认拦截器会作用于action1 Action2仅受testInterceptor截器会作用Action3同时受两个拦截器作用自定义默认拦截器栈自定义默认拦截器栈默认拦截器默认拦截器 . . . extends=struts-default 相当于把struts2-core-2.0.11.jar下的struts-default.xml的东西给继承过来了 其中包括N多的拦截器 定义多个拦截器时可以包含多个 拦截器栈中引用定义的拦截器和struts2默认拦截器栈-defaultStack。 拦截器应用拦截器应用没有权限创建用于提供主界面的创建用于提供主界面的JSPJ
16、SP页面页面 创建用于提供登录界面的创建用于提供登录界面的JSPJSP页面页面 创建错误显示的创建错误显示的JSPJSP页面页面创建一个用于处理用户登录的创建一个用于处理用户登录的Action Action 创建一个用于权限控制的拦截器创建一个用于权限控制的拦截器创建一个用于处理客户业务逻辑的创建一个用于处理客户业务逻辑的ActionAction创建一个用于处理商品业务逻辑的创建一个用于处理商品业务逻辑的Action Action 配置此示例配置此示例拦截器应用拦截器应用 权限管理拦截器权限管理拦截器创建用于提供主界面的创建用于提供主界面的JSPJSP页面页面 订单管理系统操作功能列表 查询客
17、户 添加客户 添加商品 修改商品 查询商品 添加用户权限管理拦截器权限管理拦截器创建用于提供登录界面的创建用于提供登录界面的JSPJSP页面页面 创建错误显示的创建错误显示的JSPJSP页面页面 用户名: 密码: $msg 权限管理拦截器权限管理拦截器创建一个用于处理用户登录的创建一个用于处理用户登录的Action Action public class UserPermitAction extends BaseAction private String uid;private String pwd;public String checkLogin()throws Exceptionif(ad
18、min.equals(uid)&admin.equals(pwd) |uid.equals(scott)&pwd.equals(tiger)this.getSession().put(role,uid);return success;this.getRequest().put(msg,用户名或密码错误,用户名或密码错误,登录失败!登录失败! +登录登录);return error;验证通过后将用户存到session的role中,注意:用户分为管理员和一般用户两种,该方法不经过拦截器。/error.jsp.在配置文件中配置全局result项 权限管理拦截器权限管理拦截器创建一个用
19、于处理用户登录的创建一个用于处理用户登录的Action Action public class UserPermitAction extends BaseAction 。public String addUser() throws IOExceptionPrintWriter out=this.getResponse().getWriter();out.print(“正在执行添加用户的方法.);return null;另外增加添加用户的方法,该方法要经过拦截器的拦截。 权限管理拦截器权限管理拦截器创建一个用于处理客户业务逻辑的创建一个用于处理客户业务逻辑的ActionActionpublic
20、class CustAction extends BaseAction public String queryCust()throws ExceptionPrintWriter out=this.getResponse().getWriter();out.print(正在执行查询客户的方法正在执行查询客户的方法.);return null;public String addCust()throws ExceptionPrintWriter out=this.getResponse().getWriter();out.print(正在执行添加客户的方法正在执行添加客户的方法.);return n
21、ull; 权限管理拦截器权限管理拦截器创建一个用于处理商品业务逻辑的创建一个用于处理商品业务逻辑的ActionActionpublic class ShopAction extends BaseAction public String addShop()throws ExceptionPrintWriter out=this.getResponse().getWriter();out.print(正在执行添加商品的方法正在执行添加商品的方法.);return null;public String updateShop()throws ExceptionPrintWriter out=this.
22、getResponse().getWriter();out.print(正在执行修改商品的方法正在执行修改商品的方法.);return null;public String queryShop()throws ExceptionPrintWriter out=this.getResponse().getWriter();out.print(正在执行正在执行查询查询商品的方法商品的方法.);return null;处理具体商品业务 权限管理拦截器权限管理拦截器创建一个用于权限控制的拦截器创建一个用于权限控制的拦截器由于在由于在UserPermitAction UserPermitAction 中
23、登录的中登录的checkLogincheckLogin方法不能被拦截方法不能被拦截器拦截,所以需要继承另一个抽象类器拦截,所以需要继承另一个抽象类 MethodFilterInterceptor MethodFilterInterceptor ,并重写,并重写doIntercept(ActionInvocation invocation)doIntercept(ActionInvocation invocation)方法方法该拦截器可以通过配置文件配置哪些方法被拦截。该拦截器可以通过配置文件配置哪些方法被拦截。public class PermitInterceptor extends Met
24、hodFilterInterceptor public String doIntercept(ActionInvocation invocation) throws Exception ActionContext ctx=ActionContext.getContext();String role=(String)ctx.getSession().get(role);Map request=(Map) ctx.get(request);if(role=null) request.put(msg,没有登录,请先登录!没有登录,请先登录!登录登录); return error;else /获得被拦
25、截的获得被拦截的Action的执行方法名的执行方法名 String method=invocation.getProxy().getMethod().toLowerCase();/如果用户的角色不是管理员,却执行了增删改操作如果用户的角色不是管理员,却执行了增删改操作if(!admin.equals(role)&(method.startsWith(add)|method.startsWith(del)|method.startsWith(update)request.put(msg,您不是管理员,没有权限执行此操作!您不是管理员,没有权限执行此操作! +返回返回);return error;return invocation.invoke(); /若验证通过,则直接将请求交给对应的控制器若验证通过,则直接将请
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年健身中心健身会员健身器材销售合同范本下载3篇
- 二零二五年度环保型打胶剂研发与应用合同模板4篇
- 2025年度叉车维修与环保设施改造合同4篇
- 二零二五版电子商务平台运营合同补充条款3篇
- 二零二五年度能源项目代理开发合同4篇
- 2024销售经理销售团队管理与团队建设合同3篇
- 二零二五版服务器租赁与网络安全评估合同3篇
- 2025年度美容院员工入职劳动合同范本(含试用期)
- 2025年度临时农业技术推广服务合同模板4篇
- 2025年度厂区装卸工加班费支付标准合同4篇
- 2019级水电站动力设备专业三年制人才培养方案
- 室内装饰装修施工组织设计方案
- 洗浴中心活动方案
- 送电线路工程施工流程及组织措施
- 肝素诱导的血小板减少症培训课件
- 韩国文化特征课件
- 抖音认证承诺函
- 清洁剂知识培训课件
- 新技术知识及军事应用教案
- 高等数学(第二版)
- 肺炎喘嗽的中医护理常规
评论
0/150
提交评论