概述
Acegi是专门为Spring Web应用提供安全保护的开源框架,它通过配置的方式就可以对业已存在的应用实施安全控制。在Acegi实施安全控制之前,必须获取操作者的身份,并进一步获知用户的权限,这样Acegi才可能对应用资源实施安全控制。
将Acegi集成到Web应用程序中
Acegi通过多个不同用途的Servlet过滤器截取HTTP请求,实施访问安全的控制。按照传统的方式,我们应该在web.xml配置文件中通过<filter>定义Servlet过滤器并使用<filter-mapping>元素定义过滤器对应的URL匹配模式。
由于这些过滤器需要Spring容器中其它Bean的支持完成访问权限控制,最原始的方式是在过滤器中通过硬编码的方式访问Spring容器中的Bean:
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);
FooBean foo = (FooBean)ctx.getBean(“foo”);
这种硬编码的方式显然不太方便,如何让过滤器既能够正确工作又能享受到Spring IoC的好处呢?Acegi通过“过滤器代理”来解决这个问题。
代理Acegi的过滤器
org.acegisecurity.util.FilterToBeanProxy使用Spring容器中的Bean代理过滤器,FilterToBeanProxy是一个标准的Servlet过滤器。在内部FilterToBeanProxy通过WebApplicationContext访问Spring容器,并将过滤器处理逻辑委托给一个Spring容器中的Bean。这样,我们就可以在web.xml中定义FilterToBeanProxy,声明过滤器匹配的URL模式,并在Spring容器中充分利用IoC进行定义委托的Bean。
FilterToBeanProxy支持两个初始化参数:
l targetClass:委托Bean的全限定类名,委托类必须实现过滤器接口。你必须在Spring容器中至少定义一个该类的Bean,否则将抛出异常。当Spring容器中拥有多个该委托类的Bean时,FilterToBeanProxy选择第一个委托类的Bean(这种情况应该避免);
l targetBean:当然你也可以通过一个Bean名指定委托的Bean。
图 1说明了Acegi是如何通过FilterToBeanProxy将Servlet容器和Spring容器结合起来共同定义一个功能齐备的Servlet过滤器的:

图 1 通过过滤器代理将Servlet容器和Spring容器结合起来
org.acegisecurity.securechannel.ChannelProcessingFilter是一个Acegi的过滤器,它负责处理安全通道的转换。如果直接在web.xml中定义ChannelProcessingFilter,我们将很难在不编写代码的情况下,使其引用Spring容器中的Bean。借助FilterToBeanProxy的帮助,我们就可以放心地在Spring容器中配置ChannelProcessingFilter,得到一个完整可用实例。当然ChannelProcessingFilter是需要服务于特定URL请求的,而过滤器URL映射只能在Servlet容器的web.xml中定义,这个工作由FilterToBeanProxy对应的<filter-mapping>元素完成。
如果我们将Servlet容器和Spring容器比作牛郎和织女,那么FilterToBeanProxy无疑就是鹊桥了。事实上,Acegi本身并不依赖于FilterToBeanProxy,它是一种充分利用Spring容器依赖注入好处配置Servlet过滤器的一个方法,正因为如此,所以Acegi社区中有很多开发者建议FilterToBeanProxy应该从Acegi中剥离出来,将其加入到Spring的核心类库中。收藏 http://www.qqread.com/java/2008/02/u396578.html
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- Cisco认证体系专题 (3150篇文章)
- J2SE综合:浅谈java程序发布之 jre 篇 (11次浏览)
- JAVA代码中使用魔法数值 (8次浏览)
- Hibernate缓存管理 (6次浏览)
- JAVA代码应该流畅和结构化 (5次浏览)
- Java JVM设置对性能的影响 (4次浏览)
- 开发框架:深入了解 Struts Validator (3次浏览)
- Java中的通信机制及与C/C API的集成 (1次浏览)
- 用Hibernate实现领域对象的自定义字段 (1次浏览)
- Java语言入门 简述Java语言回收机制 (0次浏览)
- 2008年Java开发者最迫切的五个期望 (0次浏览)



