读书人

(通译)Spring Security-2.0.x参考文档

发布时间: 2012-11-09 10:18:47 作者: rapoo

(翻译)Spring Security-2.0.x参考文档“容器适配器认证”
容器适配器认证
21.1. 概述

非常早期版本的Spring Security使用容器适配器进行最终用户的认证。 虽然它运行良好,但是需要很多时间来支持不同的容器版本,对于开发者来说配置时间也太长了。 因为这个原因,HTTP表单认证和HTTP基础认证方法才被开发出来,直到今天,被推荐用在几乎所有的程序中。

容器适配器让Spring Security可以将主机的最终用户程序与容器直接集成。 这种集合意味着,程序可以继续使用容易本身的认证和授权能力(比如isUserInRole()和基于表单或基本认证),虽然Spring Security提供加强的安全拦截能力(应该注意到,Spring Security也允许是用ContextHolderAwareRequestWrapper发送isUserInRole(),和简单的servlet规范兼容的方法)。

一般通过适配器进行容器和Spring Security集成。 适配器提供一个容器兼容的用户认证提供器,需要返回容器兼容的用户对象。

适配器由容器实例化,并定义在容器特定的配置文件里。 适配器将读取定义了普通的认证管理器设置的Spring的application context,就像可以用来认证请求的认证提供器一样。 application context通常叫做acegisecurity.xml,要把它放在容器指定的位置。

Spring Security现在支持Jetty, Catalina (Tomcat), JBoss 和 Resin。 其他容器的适配器也很容易编写。
21.2. 适配器认证提供器

始终是这种情况,容器适配器生成的Authentication对象还是需要在AbstractSecurityInterceptor需要处理请求的时候被AuthenticationManager认证。 AuthenticationManager需要确认适配器提供的Authentication对象是有效的,也确实被一个可信任的适配器认证过了。

适配器创建了 Authentication 对象,它是不变的,实现了AuthByAdapter接口。 这些对象保存了由适配器定义的key的散列码,。 这允许Authentication对象被AuthByAdapterProvider验证。 这个认证提供器定义如下:

<bean id="authByAdapterProvider"
singleton="true" lazy-init="true" />

确认从你的 <Engine>部分删除了其他的 <Realm> 入口。

把 acegisecurity.xml 复制到$CATALINA_HOME/conf目录下。

把 spring-security-catalina-XX.jar 复制到$CATALINA_HOME/server/lib 目录下。

吧下面的文件复制到 $CATALINA_HOME/common/lib目录下:

*

aopalliance.jar
*

spring.jar
*

commons-codec.jar
*

burlap.jar
*

hessian.jar

上面那些JAR文件(或者是acegi-security-XX.jar)都不能放在你程序的WEB-INF/lib目录下。 你的web.xml里设置的realm名字是与Catalina无关的。

我们收到了在Mac OS X下使用这个容器适配器的问题报告。需要使用下面的脚本:

#!/bin/sh
export CATALINA_HOME="/Library/Tomcat"
export JAVA_HOME="/Library/Java/Home"
cd /
$CATALINA_HOME/bin/startup.sh

最后,重启tomcat。

读书人网 >软件架构设计

热点推荐