`

Acegi(九): 子类SavedRequestAwareWrapper

阅读更多

   上篇 中我们对 securityContextHolderAwareRequestFilter的丰富多彩有了个体验, 最后对这个类的名字也做了一个望文生义的解释. 本篇中我们将接着看上篇提到的子类,即SavedRequestAwareWrapper. 这个类在父亲的基业上又有什么新的突破呢? 这得从它的贤内助说起, 即这个子类的属性savedRequest . 呵呵, 这也正是组合的好处.

    我们看到SavedRequestAwareWrapper类里所有方法的实现都是基于这个贤内助的帮助. 拿我们熟悉的getCookies方法来说, 在执行这个方法时, 先要看贤内助的脸色: 如果 savedRequest没什么话说,才能执行父亲所传授的,即父类的方法 super.getCookies();

    刚才看天下足球的"疯狂的足球", 而上面的内容也仅是我的想像,希望它较为贴切.

     下面,我们看这个贤内助是怎么回事? Ta是何许人也呢? 读源码时发现, 这个
SavedRequest没什么背景, 没有继承, 只是实现了 Serializable接口. 那有什么用? 单独地看这个类是不行了, 不过发现这么一条语句: SavedRequest saved = (SavedRequest) session.getAttribute(AbstractProcessingFilter.ACEGI_SAVED_REQUEST_KEY); 这里有一个get,那也应该有"人"set过, 难道说通往发现之路的入口?

    经过一段时间的侦查, 终于发现那别有洞天! 在描述这个洞天前, 先看这么一个实际例子.

    在CSDN网站里下载东西, 刚开始时我们先找, 找到一个一看评价不错, 那就下载吧, 可点下载按钮时,CSDN网站把我们引到登录页面, 噢, 原来还没登录呢. 很麻利地填写了登录信息后,点确定, 这时CSDN直接就把刚才要下载的东西拿出来了. 8错! 登录完后, 不必再从头找那个链接了. 可这是"8错"是怎么实现的呢?

    我们用Acegi里的SavedRequest来描述下这个功能的实现, 当然CSDN不一定是用Acegi来实现的, 这里只是借用下那个情景. 在点"下载"按钮前, CSDN是允许我们浏览的, 也就是我们有匿名浏览的权限, 可当下载时, CSDN发现这个人没有下载的权限, 得让Ta登录. 于是, CSDN里的安全机制让页面跳转到登录界面, 同时,为了用户的使用方便, 把用户刚才想下载的那个链接也记了下来, 放到了Session中, 而我们说的
SavedRequest正是干这个用的. 用户登录后, CSDN的安全机制再从Session中取出刚才那个想下载的链接, 于是下载顺利进行了.

    下面结合前面介绍的Acegi概念,把这个过程再描述一遍. 刚才开始用户找东西时用浏览的权限, 当Ta想下载时, Acegi的
FilterSecurityInterceptor在执行 beforeInvocation方法时发现当前用户没有相应的权限, 于是 FilterSecurityInterceptor抛出一个 accessDeniedException异常, 这个异常在 ExceptionTranslationFilter里给catch住了, 随后的 handleException时, 由 sendStartAuthentication方法负责 new了一个SavedRequest 对象, 这个对象里正是装了刚才那个链接,随后把这个 SavedRequest对象放进了Session . 于是用户登录, 登录妥当后, AbstractProcessingFilter里的 successfulAuthentication方法出面通过 determineTargetUrl方法从session中取出前面放到session中的 SavedRequest对象, 最后再交由 sendRedirect方法, 把用户想要的东东呈现在了眼前.

    说了半天了,
SavedRequest抢去了大多数的风头, 不过也好, 把这个 SavedRequest研究透了后, SavedRequestAwareWrapper的功能就不攻自破了. 也就是说从历史地角度看清了SavedRequest对象的来龙去脉, SavedRequestAwareWrapper对象的现在问题也就应刃而解了. 

分享到:
评论

相关推荐

    敏捷Acegi、CAS构建安全的Java系统(part2)共四part

    JAVA开发专家:敏捷Acegi、CAS:构建安全的Java系统 pdf

    实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架

    Acegi是一个专门为SpringFramework应用提供安全机制的开放源代码项目,全称为Acegi Security System for Spring,当前版本为 0.8.3。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和...

    实战Acegi:使用Acegi作为基于Spring框架的WEB应

    而Acegi Security是Spring社区早期的一个安全模块,它提供了全面的身份验证、授权和会话管理功能,为基于Spring的应用程序提供了强大的安全性支持。本实战教程将深入探讨如何将Acegi Security集成到Spring框架中,...

    实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架.pdf

    《实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架》这本书提供了一个很好的起点,它详细介绍了如何设置和使用Acegi,以及如何解决实际开发中的安全问题。 总的来说,Acegi为基于Spring的Web应用提供...

    实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架.rar

    Acegi是Spring Security的前身,它是一个强大的、可配置的安全框架,用于构建安全的Java Web应用程序。本实战教程将深入探讨如何将Acegi集成到基于Spring的Web应用中,以实现用户认证、授权以及安全控制等功能。 ...

    Acegi(四):Acegi初体验及初解剖

    Acegi是Spring Security的前身,它是一个非常强大的安全框架,用于保护基于Spring的应用程序。这篇博客的标题"Acegi(四):Acegi初体验及初解剖"表明我们将深入探讨Acegi的基础用法和内部机制。尽管Acegi已经被Spring ...

    acegi

    Acegi 是一个在Java开发领域,特别是Spring框架中曾经广泛使用的安全组件,全称为Acegi Security。这个系统为Spring应用程序提供了全面的安全管理解决方案,包括身份验证、授权、会话管理以及安全事件处理等功能。...

    使用acegi控制用户权限实例

    Acegi Security是Spring框架早期的一个安全模块,它提供了全面的基于Spring的应用程序的访问控制和身份验证功能。在本文中,我们将深入探讨如何使用Acegi Security来实现用户权限的控制。 Acegi Security的核心功能...

    基于java的ACEGI

    在《实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架.pdf》中,可能会详细讲解如何配置和使用Acegi。以下是一些关键步骤: 1. **添加依赖**:首先,在项目中引入Acegi的依赖库,通常是通过Maven或...

    权限Acegi的使用

    在实际应用中,我们通常会遵循以下步骤来使用Acegi: 1. **集成Acegi**:将Acegi库添加到项目的类路径中,并在Spring配置文件中声明Acegi的安全配置。 2. **配置安全上下文**:定义安全上下文,指定认证和授权的...

    Acegi例子代码+一个很好的学习Acegi的网址

    Acegi是Spring Security的前身,它是一个用于Java企业级应用的安全框架,提供了全面的身份验证、授权和会话管理功能。这个压缩包包含了Acegi的示例代码和一个学习资源,对于初学者来说是非常宝贵的资料。 首先,让...

    使用 Acegi 保护 Java 应用程序: 续二

    Acegi 安全框架是 Spring 框架的一个扩展,用于提供高级的身份验证和授权功能。在"使用 Acegi 保护 Java 应用程序:续二"这篇博文中,作者可能详细介绍了如何集成 Acegi 安全框架到 Java 应用程序中,以及如何配置和...

    acegi-security-resin-0.8.1.1.jar.zip

    Acegi Security是一款经典的Java安全框架,它为Spring框架提供了安全集成。在本案例中,我们关注的是`acegi-security-resin-0.8.1.1.jar.zip`这个压缩包,其中包含了`acegi-security-resin-0.8.1.1.jar`文件和`...

    acegi安全策略与CAS整合

    - AceGI:AceGi Security,一个用于Spring Web应用的安全框架。 - CAS:Central Authentication Service,中心认证服务,提供单一登录解决方案。 - SSO:Single Sign-On,单点登录,用户只需登录一次就能访问所有...

    使用Acegi作为基于Spring框架的WEB应用的安全框架

    Acegi Security,现已被Spring ...结合"acegi-sample.war"和"实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架.pdf",开发者可以更好地理解和掌握Acegi Security的使用方法,从而提升Web应用的安全性。

    使用 Acegi 保护 Java 应用程序: 续一

    Acegi 安全框架是 Spring 框架的一个扩展,用于提供高级安全性和身份验证功能。这个框架在 Java 应用程序中非常受欢迎,因为它允许开发者以声明式的方式定义访问控制规则,使得应用的安全管理更加方便。在这个"使用 ...

    acegi-context-cas.xml

    acegi与cas集成 <!-- ========= Acegi as a CAS Client的配置============= --> class="org.acegisecurity.ui.cas.CasProcessingFilter"> ref="authenticationManager" /> value="/login.do?...

    ACEGI

    Acegi Security是一个专门为Spring框架设计的权限控制框架,旨在为基于J2EE的企业级应用程序提供全面的安全服务。这个框架解决了J2EE规范中安全性配置不便于移植的问题,使得应用程序的安全设置能够在不同服务器环境...

    Acegi框架介绍 acegi安全与认证

    【Acegi框架介绍 acegi安全与认证】 Acegi Security,现称为Spring Security,是一个强大的安全框架,主要用于基于Spring的企业级应用。它通过Spring的依赖注入(IoC)和面向切面编程(AOP)功能,提供了声明式的...

Global site tag (gtag.js) - Google Analytics