《Acegi》
Acegi安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的
Web容器无缝集成。它使用了Spring的方式提供了安全和认证安全服务,包括使用
Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全系统能够轻松地
适用于复杂的安全需求。
安全涉及到两个不同的概念,认证和授权。前者是关于确认用户是否确实是他们
所宣称的身份。授权则是关于确认用户是否有允许执行一个特定的操作。
在Acegi安全系统中,需要被认证的用户,系统或代理称为"Principal"。Acegi安
全系统和其他的安全系统不同,它并没有角色和用户组的概念。
Acegi系统设计
关键组件
Acegi安全系统包含以下七个关键的功能组件:
1 Authentication对象,包含了Principal,Credential和Principal的授权信息
。同时还可以包含关于发起认证请求的客户的其他信息,如IP地址。
2 ContextHolder对象,使用ThreadLocal储存Authentication对象的地方。
3 AuthenticationManager,用于认证ContextHolder中的Authentication对象。
4 AccessDecissionManager,用于授权一个特定的操作。
5 RunAsManager,当执行特定的操作时,用于选择性地替换Authentication对象
。
6 Secure Object拦截器,用于协调AuthenticationManager,
AccessDecissionManager,RunAsManager和特定操作的执行。
7 ObjectDefinitionSource,包含了特定操作的授权定义。
这七个关键的功能组件的关系如下图所示(图中灰色部分是关键组件):
安全管理对象
Acegi安全系统目前支持两类安全管理对象。
第一类的安全管理对象管理AOP Alliance的MethodInvocation,开发人员可以用
它来保护Spring容器中的业务对象。为了使Spring管理的Bean可以作为
MethodInvocation来使用,Bean可以通过ProxyFactoryBean和
BeanNameAutoProxyCreator来管理,就像在Spring的事务管理一样使用。
第二类是FilterInvocation。它用过滤器(Filter)来创建,并简单地包装了
HTTP的ServletRequest,ServletResponse和FilterChain。FilterInvocation可
以用来保护HTTP资源。通常,开发人员并不需要了解它的工作机制,因为他们只
需要将Filter加入web.xml,Acegi安全系统就可以工作了。
安全配置参数
每个安全管理对象都可以描述数量不限的各种安全认证请求。例如,
MethodInvocation对象可以描述带有任意参数的任意方法的调用,而
FilterInvocation可以描述任意的HTTP URL。
Acegi安全系统需要记录应用于每个认证请求的安全配置参数。例如,对于
BankManager.getBalance(int accountNumber)方法和
BankManager.approveLoan(int applicationNumber)方法,它们需要的认证请
求的安全配置很不相同。
为了保存不同的认证请求的安全配置,需要使用配置参数。从实现的视角来看,
配置参数使用ConfigAttribute接口来表示。Acegi安全系统提供了
ConfigAttribute接口的一个实现,SecurityConfig,它把配置参数保存为一个字
符串。
ConfigAttributeDefinition类是ConfigAttribute对象的一个简单的容器,它保
存了和特定请求相关的ConfigAttribute的集合。
当安全拦截器收到一个安全认证请求时,需要决定应用哪一个配置参数。换句话
说,它需要找出应用于这个请求的ConfigAttributeDefinition对象。这个查找的
过程是由ObjectDefinitionSource接口来处理的。这个接口的主要方法是public
ConfigAttributeDefinition getAttributes(Object object),其中Object参数
是一个安全管理对象。因为安全管理对象包含有认证请求的详细信息,所以
ObjectDefinitionSource接口的实现类可以从中获得所需的详细信息,以查找相
关的ConfigAttributeDefiniton对象。
《OSCache》
OSCache标记库由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供
了在现有JSP页面之内实现快速内存缓冲的功能。OSCache是个一个广泛采用的高
性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案。
OSCache有以下特点:缓存任何对象,你可以不受限制的缓存部分jsp页面或HTTP
请求,任何java对象都可以缓存。拥有全面的API--OSCache API给你全面的程序
来控制所有的OSCache特性。永久缓存--缓存能随意的写入硬盘,因此允许昂贵的
创建(expensive-to-create)数据来保持缓存,甚至能让应用重启。支持集群--
集群缓存数据能被单个的进行参数配置,不需要修改代码。缓存记录的过期--你
可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(如果默认性
能不需要时)。
《ClickStream》
Clickstream:它是一个JavaServlet过滤器,用来跟踪用户请求(比如:点击)
和请求队列(比如:点击流)以向网络管理员显示谁在她的网站上以及每个用户
正在访问那个页面
《urlrewrite》
urlrewrite是tuckey.org的一个很小的开源软件,能将动态页面映射成静态页面
的样子,更好的让搜索引擎对网站进行索引。同时也能简化编程,让url变得更简
洁。urlrewrite的配置非常简单,将jar引入项目,修改web.xml,在web-inf下放
一个urlrewrite.xml,进行简单的配置就可以了。
《siteMesh》
OS(OpenSymphony)的SiteMesh是一个用来在JSP中实现页面布局和装饰(layout
and decoration)的框架组件,能够帮助网站开发人员较容易实现页面中动态内
容和静态装饰外观的分离。
《DisplayTag》
DisplayTag作为一个专门用于分页的taglib一直都以简单和功能强大而闻名,以
前主要用于小型项目的小数量表格分页显示。
但是对于大数据量的分页显示力不从心,究其原因是,当时的DisplayTag无法在
只显示一部分数据的同时,显示出其他可能的分页。其行为相当于:把所有数据
读取到内存中,然后翻页仅仅显示内存中的数据而不是实时获取。
《DWR》
DWR是一个开源的类库,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在
浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样.
它包含两个主要的部分:允许JavaScript从WEB服务器上一个遵循了AJAX原则的
Servlet(小应用程序)中获取数据.另外一方面一个JavaScript库可以帮助网站开
发人员轻松地利用获取的数据来动态改变网页的内容.
DWR采取了一个类似AJAX的新方法来动态生成基于JAVA类的JavaScript代码.这样
WEB开发人员就可以在JavaScript里使用Java代码就像它们是浏览器的本地代码(
客户端代码)一样;但是Java代码运行在WEB服务器端而且可以自由访问WEB 服务器
的资源.出于安全的理由,WEB开发者必须适当地配置哪些Java类可以安全的被外部
使用.
这个从JAVA到JavaScript的远程功能方法给DWR的用户带来非常像传统的RPC机制,
就像RMI或者SOAP一样,而且拥有运行在WEB上但是不需要浏览器插件的好处.
DWR不认为浏览器/WEB服务器协议是重要的,而更乐于保证编程界面的简单自然.对
此最大的挑战就是把AJAX的异步特性和正常JAVA方法调用的同步特性相结合.在异
步模式下,结果数据在开始调用之后的一段时间之后才可以访问.DWR解决了这个问
题,允许WEB开发人员使用一个特殊的方法参数来指定一个函数,以便在数据返回后
来回调此函数.