1.3.3配置属性
每个安全对象可以描述无限数量的单独请求。例如,一个MethodInvocation可以描述任意方法任意参数的一个调用,同时一个FilterInvocation可以描述任意的HTTP URL。
Acegi Security System需要记录任何可能请求的配置信息。BankManager.getBalance(int accountNumber)必须与BankManager.aproveLoan(int applicationNumber)的安全配置信息有很大的不同。类似的,
http://some.bank.com/index.htm与
http://some.bank.com/manage/timesheet.jsp请求的安全配置必然不同。
一个配置属性被用于储存变化的安全配置。在实现层,一个配置属性表现为一个ConfigAttribute接口。一个清晰的configAttribute实现已经提供了,SecurityConfig,它用字符串简单的存储了配置属性。
ConfigAttributes集合与特定请求的联系保存在ConfigAttributeDefinition。这个实现类只是简单的保存了ConfigAttributes并且没有做任何特殊的操作。
当一个请求被安全拦截器接收到,它必须决定哪个配制属性被应用。换句话说,它需要在ConfigAttributeDefinition中寻找哪个应用到这个请求。这个决定由ObjectDefinitionSource接口来处理。这个接口提供的主要的方法是public ConfigAttributeDefinition getAttributes(Object object) ,这个Object为secure object.回想这个安全对象包含了请求的细节,所以这个ObjectDefinitionSource实现将能取出请求的细节用来查找相应的ConfigAttributeDefinition.