Acegi 的拦截过滤器用于做出授权决策。您需要在 APF 成功执行身份验证后对拦截过滤器进行配置,以使其发挥作用。拦截器使用应用程序的访问控制策略来做出授权决定。
如何使用 Acegi 配置一个简单的访问控制策略?
配置简单的访问控制策略可分为两个步骤:
1 编写访问控制策略
2 根据策略配置Acegi的拦截过滤器
1 编写访问控制策略
定义简单的访问控制策略
用户名 alice
,它的密码是 123
,角色是 ROLE_HEAD_OF_ENGINEERING
。
(待解决:如何在文件中定义任意数量的用户及其用户角色,然后配置拦截过滤器以使用这些文件?)
2 根据策略配置Acegi的拦截过滤器
拦截过滤器使用三个组件来做出授权决策
配置拦截过滤器
如清单所示,配置所需的三个组件是 authenticationManager
、accessDecisionManager
、objectDefinitionSource
authenticationManager 组件:身份验证管理器。拦截过滤器可以在授权的过程中使用 authenticationManager
重新对客户机进行身份验证。
accessDecisionManager 组件:管理授权过程。
objectDefinitionSource 组件:包含对应于将要发生的授权的访问控制定义。例如,清单 中的 objectDefinitionSource
属性值包含两个 URL(/protected/*
和 /*
)。其值定义了这些 URL 的角色。/protected/*
URL 的角色是 ROLE_HEAD_OF_ENGINEERING
。可以根据应用程序的需要定义任何角色。即为用户名 alice
定义了 ROLE_HEAD_OF_ENGINEERING
。这就是说 alice
将能够访问 /protected/*
URL。
过滤器工作原理:
Acegi 的组件彼此依赖,从而对您的应用程序进行保护。将继续学习如何对 Acegi 进行配置,从而按照特定的顺序应用安全过滤器,因此需要创建过滤器链。出于这个目的,Acegi 保存了一个过滤器链对象,它封装了为保护应用程序而配置了的所有过滤器。
过滤器链的生命周期:
1浏览器客户机向您的应用程序发送 HTTP 请求。
2容器接收到 HTTP 请求并创建一个请求对象,该对象将封装 HTTP 请求中包含的信息。容器还创建一个各种过滤器都可处理的响应对象,从而为发出请求的客户机准备好 HTTP 响应。容器然后调用 Acegi 的过滤器链代理,这是一个代理过滤器。该代理知道应用的过滤器的实际顺序。当容器调用代理时,它将向代理发送请求、响应以及过滤器链对象。
3代理过滤器调用过滤器链中第一个过滤器,向其发送请求、响应和过滤器链对象。
4链中的过滤器逐个执行其处理。一个过滤器可以通过调用过滤器链中下一个过滤器随时终止自身处理。有的过滤器甚至根本不执行任何处理(比如,如果 APF 发现一个到来的请求没有要求身份验证,它可能会立即终止其处理)。
5当身份验证过滤器完成其处理时,这些过滤器将把请求和响应对象发送到应用程序中配置的拦截过滤器。
6拦截器决定是否对发出请求的客户机进行授权,使它访问所请求的资源。
7拦截器将控制权传输给应用程序(比如,成功进行了身份验证和授权的客户机请求的 JSP 页面)。
8应用程序改写响应对象的内容。
9响应对象已经准备好了,容器将响应对象转换为 HTTP 响应,并将响应发送到发出请求的客户机。
继续学习内容:
如何设计访问控制策略
如何将它们托管在目录服务中
如何配置 Acegi 以读取您的访问控制策略