J2EE项目实训 Spring框架技术——第8章 利用AOP实现应用的安全验证(第2部分)_第1页
已阅读1页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料第8章 利用aop实现应用的安全验证(第2/2部分)1.1 网上商城系统中的身份验证的应用实现1、利用spring aop中的前置通知组件实现权限控制的应用示例根据本书中的第七章中关于spring aop中的前置通知的介绍,利用spring aop中的前置通知能够解决应用系统中的权限控制的问题。下面给出“网上商城”项目中的具体应用示例来说明该设计方法。2、网上商城项目中的用户身份验证的功能需求说明在实现页面切换导航功能的pageforwordaction类中的godoupdateuserinfo和godouserlogout方法需要监控,

2、因为只有登陆成功后的合法身份的用户才可以对它们进行访问。下面的【例89】给出了该pageforwordaction类中的部分代码示例,并请注意其中的黑体部分的代码。为了减少本书的篇幅,除掉了其它无关的部分代码并简化了部分实现的代码。【例89】 pageforwordaction类中的部分代码示例package com.px1987.webshop.control.action;/ import 各个相关的包及类.public class pageforwordaction extends dispatchaction public actionforward godoupdateuserinf

3、o(actionmapping mapping, actionform form,httpservletrequest request,httpservletresponse response)/ . 对业务功能组件进行调度的代码(在此加以省略) return mapping.findforward(godoupdateuserinfo);public actionforward godouserlogout(actionmapping mapping, actionform form,httpservletrequest request,httpservletresponse respons

4、e)/ . 对业务功能组件进行调度的代码(在此加以省略)return mapping.findforward(godouserlogout);/. 其它的方法定义3、在项目中添加一个前置通知的组件类(1)增加一个checkuserloginstateadvice组件类,该类作为前置通知的组件类类名称为checkuserloginstateadvice,包名称为com.px1987.webshop.control.aop,并且实现org.springframework.aop.methodbeforeadvice接口。请见下面的图8.2中所示的输入参数的状态显示结果。图8.2 在项目中添加一个前

5、置通知的组件类的对话框(2)编程该前置通知checkuserloginstateadvice类以实现对用户的访问状态进行检查在该前置通知类中实现对pageforwordaction类中的godoupdateuserinfo和godouserlogout等方法进行监控,详细的代码实现请见下面的【例810】中所示的结果代码。在代码中首先获得httpservletrequest对象,然后再获得httpsession对象以监控请求者是否正确地进行系统登陆操作。并请注意其中的黑体部分的代码。为了减少本书的篇幅,除掉了其它无关的部分代码并简化了部分实现的代码。【例810】 前置通知checkuserlog

6、instateadvice类的代码示例package com.px1987.webshop.control.aop;import java.lang.reflect.method;import javax.servlet.http.httpservletrequest;import javax.servlet.http.httpsession;import org.apache.struts.action.actionmapping;import org.springframework.aop.methodbeforeadvice;import com.px1987.webshop.servi

7、ce.serviceexception;public class checkuserloginstateadvice implements methodbeforeadvice public checkuserloginstateadvice()public void before(method targetmethod, object methodargs, object targetclass)throws throwable httpservletrequest request=(httpservletrequest)methodargs2;httpsession session=req

8、uest.getsession();string actiontype=request.getparameter(actiontype);boolean ischeckmethodname= (actiontype.equals(godoupdateuserinfo)|actiontype.equals(godouserlogout);if(ischeckmethodname&(session.getattribute(oneuserinfovo)=null)throw new serviceexception(您所在的用户组没有此操作的权限,或者您还没有登录);4、在web应用系统的部署描述

9、文件web.xml 中定义错误信息的显示页面由于在前置通知checkuserloginstateadvice类中,一旦识别到用户没有进行合法的登陆行为时,将通过抛出系统中自定义的serviceexception异常来终止请求链的进一步传递,并将错误提示信息显示输出。根据j2ee的规范,可以在web.xml文件中配置出serviceexception异常类型所对应的错误显示信息的目标页面。这样一旦系统中有serviceexception类型的异常抛出,容器将自动地加载所配置的错误显示信息的目标页面。请见下面的【例811】中所示的代码示例,并请注意其中的黑体部分的定义。另外为了能够减少本书的篇幅,

10、在示例中省略了项目中的web.xml文件中的其它部分的定义内容。【例811】在web应用系统的web.xml 文件中定义错误信息的显示页面 com.px1987.webshop.service.serviceexception /dealerror/shownologinerror.jsp5、修改spring ioc的xml配置文件webshopuserinfoioc.xml以添加相应的组件定义最后的结果请见下面的【例812】中所示,并请注意其中的黑体部分的定义。另外为了能够节省本书的篇幅,在示例中省略了项目中的其它bean的定义内容。【例812】与本示例相关的xml配置文件webshopus

11、erinfoioc.xml中的标签示例 /pageforwordaction checkuserloginstateadvice 由于本项目中的表示层struts框架是与spring框架相互整合的,因此对于struts框架中的pageforwordaction类的bean定义的名称应该为其uri中的path的定义。同时采用spring 框架中的自动代理beannameautoproxycreator组件实现自动代理,而没有应用proxyfactorybean代理组件。6、执行本web应用并进行身份验证方面的测试当请求的用户未进行系统登陆状态时,并点击系统左面的功能导航树中的“修改信息”和“在线

12、注销”的超链接时,web应用系统将自动地跳转到shownologinerror.jsp的错误显示的页面中,并通过该shownologinerror.jsp页面实现错误提示信息的显示输出。最后的测试状态的结果请见下面的图8.3中所示的结果。图8.3 执行本web应用并进行身份验证方面的测试结果1.2 bbs论坛系统中的身份验证的应用实现1、bbs论坛项目中的用户身份验证的功能需求说明在进行应用系统中的用户身份验证的应用实现时,首先要明确需要对系统中那些敏感部位进行监控。在本bbs论坛项目中主要是对全局导航条中的“后台管理”的超链接进行拦截,因为只有是成功登陆的系统管理员类型身份的用户才有资格进入

13、后台管理的程序页面。请见下面的图8.4中所示的页面中的全局导航条信息。图8.4 bbs论坛项目中的页面全局导航条信息2、在项目中添加一个自定义的异常类springaopexception(1)新增加一个自定义的异常类springaopexception类名称为springaopexception,包名称为com.px1987.webbbs.exception,并且从java.lang.exception类继承。该异常类springaopexception将作为本系统中的前置通知组件所抛出的异常类型。请见下面的图8.5中所示的输入参数的状态显示结果。图8.5 项目中添加一个自定义的异常类spri

14、ngaopexception的对话框(2)编程该自定义的异常类springaopexception详细的代码实现请见下面的【例813】中所示的结果代码。【例813】 自定义的异常类springaopexception的代码示例package com.px1987.webbbs.exception;public class springaopexception extends exceptionpublic springaopexception() public springaopexception (string errortext) super(errortext); 3、设计一个前置通知组

15、件类(1)增加一个checksystemmanageadvice类,该类作为前置通知的组件类类名称为checksystemmanageadvice,包名称为com.px1987.webbbs.aop,并且实现org.springframework.aop.methodbeforeadvice接口。请见下面的图8.6中所示的输入参数的状态显示结果。图8.6在项目中添加一个前置通知的组件类的对话框(2)编程该前置通知checksystemmanageadvice类以实现对用户的访问状态进行检查在该前置通知类中实现对全局导航条中的“后台管理”的超链接进行拦截,详细的代码实现请见下面的【例814】中所

16、示的结果代码,在代码中首先获得httpservletrequest对象,然后再获得httpsession对象以监控请求者是否正确地进行登陆操作。并根据保存在用户的session对象中的用户身份类型的信息来判断该成功登陆后的用户是否为管理员身份类型。如果不满足前面所要求的两个方面的条件,将通过抛出springaopexception异常来终止用户的请求链的进一步的传递。并请注意其中的黑体部分的代码。为了减少本书的篇幅,除掉了其它无关的部分代码并简化了部分实现的代码。【例814】 前置通知checksystemmanageadvice类的代码示例package com.px1987.webbbs.

17、aop;import java.lang.reflect.method;import org.springframework.aop.methodbeforeadvice;import javax.servlet.http.*;import com.px1987.webbbs.exception.*;import com.px1987.webbbs.model.userinfovo;public class checksystemmanageadvice implements methodbeforeadvice public checksystemmanageadvice() public

18、void before(method targetmethod, object methodargs, object targetclass)throws throwablehttpservletrequest request=(httpservletrequest)methodargs2;httpsession session=request.getsession();object userinfoobject=session.getattribute(oneuserinfovo);string actiontype=request.getparameter(action);boolean

19、ischeckmethodname=actiontype.equals(dosystemmanage);if(ischeckmethodname&(userinfoobject=null)string errortext=您所在的用户组没有此操作的权限,或者您还没有登录;throw new springaopexception (errortext); userinfovo oneuserinfovo=(userinfovo)userinfoobject; if(ischeckmethodname&(oneuserinfovo.gettype_user_admin()!=2) throw ne

20、w springaopexception (您不是管理员身份,因此您将无此权限!); 4、在web应用系统的部署描述文件web.xml中定义错误信息的显示页面由于在前置通知checksystemmanageadvice类中,一旦识别到请求者的用户身份不满足应用系统中的要求时,将通过抛出系统中的自定义的springaopexception异常来终止请求链的进一步传递,并将错误提示信息显示输出。根据j2ee的规范,可以在web.xml文件中采用与前面的“网上商城”项目中的同样的配置方法配置出springaopexception异常类型所对应的错误显示信息的目标页面。这样一旦系统中有springao

21、pexception类型的异常抛出,容器将自动地加载所配置的错误显示信息的目标页面。请见下面的【例815】中所示的代码示例,并请注意其中的黑体部分的定义。另外为了能够节省本书的篇幅,在示例中省略了项目中的web.xml文件中的其它部分的定义内容。【例815】在web应用系统的web.xml 中定义springaopexception异常和对应的错误信息的显示页面的配置标签示例 com.px1987.webbbs.exception.springaopexception /errordeal/shownologinerror.jsp 5、修改spring ioc的xml配置文件webbbsspr

22、ingioc.xml以添加相应的组件定义最后的结果请见下面的【例816】中所示,并请注意其中的黑体部分的定义。另外为了能够节省本书的篇幅,在示例中省略了项目中的其它bean的定义内容。【例816】与本示例相关的xml配置文件webbbsspringioc.xml中的标签示例 /pageforwordaction checksystemmanageadvice 6、执行本web应用并进行身份验证方面的测试(1)当用户未进行系统登陆,并直接点击“后台管理”的超链接时前置通知checksystemmanageadvice组件类将进行拦截,并最终显示输出下面的图8.7中的状态结果。图8.7 显示输出的

23、提示用户进行登陆系统的状态结果由于在前置通知checksystemmanageadvice组件类中是通过抛出系统中的自定义的springaopexception异常来终止请求链的进一步传递,因此同时将能够在控制台上看到下面的图8.8中的状态结果提示。图8.8 在控制台显示输出的springaopexception异常状态结果提示(2)以前台用户的身份进行系统登陆,然后同样再点击“后台管理”的超链接时根据系统中的登陆系统的功能页面的要求,输入相应的用户身份信息并进行提交。请见下面的图8.9中的状态结果。图8.9 以前台用户的身份进行系统登陆前置通知checksystemmanageadvice组件类同样也将进行拦截,发现用户当前的身份仍然不满足应用的要求,同样仍然显示输出下面的图8.10中的状态结果。图8.10 以后台系统管理员用户的身份进行系统登陆(3)以后台系统管理员用户的身份进行系统登陆,然后同样再点击“后台管理”的超链接时前置通知checksystemmanageadvice组件类同样也将进行拦截,发现用户当前的身份此时满足应用的要求,将可以进入后台管理

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论