本章内容:n Acegi安全系统介绍n 使用Servlet过滤器保护Web应用系统n 基于数据库或LDAP进行身份认证n 透明地对方法调用进行保护 Acegi安全系统介绍Acegi是一个能够为基于Spring的应用系统提供描述性安全保护的安全框架。它提供了一组能够在Spring应用上下文中配置的Bean,充分利用了Spring对依赖注入和面向切面编程的支持。当保护Web应用系统时,Acegi使用Servlet过滤器来拦截Servlet请求,以实施身份认证并强制安全性。并且,,Acegi采取了一种独特的机制来声明Servlet过滤器,使你能够使用SpringIoC注入它所依赖的其它对象。Acegi也能够通过保护方法调用在更底层的级别上强制安全性。使用SpringAOP,Acegi代理对象,将“切面”应用于对象,以确保用户只有在拥有恰当授权时才能调用受保护的方法。无论你正在保护一个Web应用程序还是需要方法调用级别的安全性,。 Acegi安全的基本组件通过本章,我们会揭示每一个组件的细节。但在开始考察Acegi安全机制的本质之前,首先让我们居高临下地考察一下每个组件扮演的角色。 安全***为了释放锁舌并打开门,你必须先把钥匙插到锁孔中,并恰当地拨动锁的制栓。如果钥匙和锁不匹配,就无法拨动制栓并释放锁舌。但如果你有正确的钥匙,所有的制栓就会接受这把钥匙,锁舌就会释放,从而允许你把门打开。在Acegi中,能够认为安全***像一把锁的锁舌,能够阻止对应用系统中受保护资源的访问。为了释放“锁舌”并通过安全***,你必须向系统提供“钥匙”(通常是一对用户名和密码)。“钥匙”会尝试拨开安全***的“制栓”,从而允许你访问受保护的资源。 认证管理器第一道必须打开的安全***的制栓是认证管理器。认证管理器负责决定你是谁。它是通过考虑你的主体(通常是一个用户名)和你的凭证(通常是一个密码)做到这点的。你的主体定义了你是谁,你的凭证是确认你身份的证据。如果你的凭证足以使认证管理器相信你的主体能够标识你的身份,Acegi就能知道它在和谁打交道。 访问决策管理器一旦Acegi决定了你是谁,它就必须决定你是否拥有访问受保护的资源的恰当授权。访问决策管理器是Acegi锁中第二道必须被打开的制栓。访问决策管理器进行授权,通过考虑你的身份认证信息和与受保护资源关联的安全属性决定是否让你进入。例如,安全规则也许规定只有主管才允许访问某个受保护资源。如果你被授予主管权限,则第二道也是最后一道制栓——访问决策管理器——会被打开,并且安全***会给你让路,让你取得受保护资源的访问权。 运行身份管理器当你通过认证管理器和访问决策管理器,安全***会被开启,门已经能够被打开。但在你转动门把手进入之前,安全***也许还有一件事要做。即使你已经通过身份认证并且已经获得了访问被保护资源的授权,门后也许还有更多的安全限制在等着你。比如,你也许已被授权访问查看某个Web页面,但用于创建该页面的对象也许和页面本身有不同的安全需求。一个运行身份管理器能够用另一个身份替换你的身份,从而允许你访问应用系统内部更深处的受保护对象。运行身份管理器的用处在大多数应用系统中是有限的。幸运的是,当你使用Acegi保护应用系统时能够不必使用甚至不必完全理解运行身份管理器。因此,我们认为运行身份管理器是一个高级课题,在下文中不再深入地探讨它。现在,你已经看到了Acegi安全性的全貌,让我们回过头来看一下如何配置Acegi安全系统的每一个部分,首先由认证管理器开始。 管理身份验证决定是否允许用户访问受保护资源的第一步是判断用户的身份。在大多数应用系统中,这意味着用户在一个登录屏上提供用户名和密码。用户名(或者主体)告诉应用系统用户声明自己是谁。为了确证用户的身份,用户需要同时提供一个密码(或凭证)。如果应用系统的安全机制确认密码是正确的,则系统假设用户的实际身份与他声明的身份相同。在Acegi中,是由认证管理器负责确定用户身份的。: publicinterfaceAuthenticationManager{ publicAuthenticationauthenticate(Authenticationauthentication) throwsAuthenticationException; } 认证管理器的authenticate()(其中可能只包括用户名和密码)作为参数,它会尝试验证用户身份。如果认证成功,authenticate()方法返回一个完整的Authentication对象,其中包括用户已被授予的权限(将由授权管理器使用)。如果认证失败,则它会抛出一个AuthenticationException。正如你所见到的,AuthenticationManager接口非常简单,而且
spring+acegi+中文手册 来自淘豆网www.taodocs.com转载请标明出处.