前言
Acegi Security是Spring Framework的一个子项目,主要专注于容器中应用程序的安全控制。
CAS是耶鲁大学贡献的一个单点登陆系统,提供多个应用程序的单点登陆控制,CAS和acegi进行整合,CAS负责完成认证部分,acegi负责应用程序的授权。
在Acegi Security的文档中虽然有关于CAS整合的详细描述,但由于两个系统目前都很活跃,版本不断跟新,完全依照旧版本的文档并不能完成相关的整合工作,下面以实际操作的例子说明acegi如何整合CAS 3.0。由于CAS认证要求系统运行在SSL上,所以在对两个应用程序配置之前,首先要配置容器的证书。
本文配置对象为
CAS Server 3.04
Acegi Security 1.0RC2
Apache Tomcat 5.5.12
配置Tomcat
使用JAVA keytool生成Tomcat 使用证书
- keytool -alias tomcat -genkey -keyalg RSA -validity 9999 -storepass password -keypass password
- 您的名字与姓氏是什么?
- [localhost]:
- 您的组织单位名称是什么?
- [itdcl]: java dev
- 您的组织名称是什么?
- [itdcl]:
- 您所在的城市或区域名称是什么?
- [guangzhou]:
- 您所在的州或省份名称是什么?
- [guangdong]:
- 该单位的两字母国家代码是什么
- [CN]:
- CN=localhost, OU=java dev, O=itdcl, L=guangzhou, ST=guangdong, C=CN 正确吗?
- [否]: y
导出证书到文件中
- cd <jre></jre>\lib\security
- keytool -export -v -rfc -alias tomcat -file acegisecurity.txt -storepass password
把证书设置为本机可信任证书
- keytool -import -v -file acegisecurity.txt -keypass password -keystore cacerts -storepass changeit -alias tomcat
- Owner: CN=localhost, OU=java dev, O=itdcl, L=guangzhou, ST=guangdong, C=CN
- 发照者: CN=localhost, OU=java dev, O=itdcl, L=guangzhou, ST=guangdong, C=CN
- 序号: 4420ca9f
- 有效期间: Wed Mar 22 11:55:11 CST 2006 至: Sat Aug 06 11:55:11 CST 2033
- 认证指纹:
- MD5: EA:27:FA:1E:B8:C2:05:24:9A:2B:D3:44:8F:0F:C3:78
- SHA1: B7:61:12:19:BF:54:75:D4:E9:A4:EA:9C:2A:5C:A9:B9:17:99:CA:F1
- 信任这个认证? [否]: y
- 认证已添加至keystore中
- [正在存储 cacerts]
打开Tomcat的ssl端口,配置相关参数
- <connector port="8443" maxHttpHeaderSize="8192"
- maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
- enableLookups="false" disableUploadTimeout="true"
- acceptCount="100" scheme="https" secure="true"
- clientAuth="false" sslProtocol="TLS" keystorePass="password"/>
测试Tomcat SSL安装成功
打开页面https://localhost:8443/jsp-examples,访问相关例子,如果没有异常,说明SSL配置成功
重新配置 CAS Server的用户认证部分
打开在WEB-INF中deployerConfigContext.xml,重新配置用户认证,文件本身就是spring的配置文件,在最后增加以下bean
- <bean id="inMemoryDaoImpl" class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl">
- <property name="userMap">
- <value>
- marissa=koala,ROLES_IGNORED_BY_CAS
- dianne=emu,ROLES_IGNORED_BY_CAS
- scott=wombat,ROLES_IGNORED_BY_CAS
- peter=opal,disabled,ROLES_IGNORED_BY_CAS
- value>
- property>
- bean>
- <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
- <property name="userDetailsService"><ref bean="inMemoryDaoImpl"/>property>
- bean>
- <bean id="MyAuthenticationManager" class="org.acegisecurity.providers.ProviderManager">
- <property name="providers">
- <list>
- <ref bean="daoAuthenticationProvider"/>
- list>
- property>
- bean>
用配置好的
- <bean id="casAuthenticationHandler" class="org.acegisecurity.adapters.cas3.CasAuthenticationHandler">
- <property name="authenticationManager"><ref bean="MyAuthenticationManager"/>property>
- bean>
替代原来的
- SimpleTestUsernamePasswordAuthenticationHandler
编译
org.acegisecurity.adapters.cas3.CasAuthenticationHandler
因为在acegisecurity 1.0RC2正式发布的CAS adapter里面没有casAuthencationHandler,所以需要从acegisecurity的仓库中把原码check出来
编译casAuthencationHandler, 打包到acegi-security-CAS-1.0.0-RC2.jar
中发布CAS应用程序
把重新打包过的
acegi-security-CAS-1.0.0-RC2.jar
和acegi-security-1.0.0-RC2.jar
复制到WEB-INF/lib目录中
启动tomcat, 如果看到错误提示信息,则说明CAS Server部署成功测试CAS部署成功
在浏览器中访问
http://localhost:8080/CAS
,根据配置文件的用户信息,这里使用scott/wombat登录,如果提示登录成功,则表示新的用户认证部分修改成功
配置contacts-CAS
确认配置
applicationContext-acegi-security.xml
文件中
https://localhost:8443/CAS/为CAS服务器的URL
https://localhost:8443/contacts-CAS为contacts应用程序URL
对于系统默认的可信证书<jre home=""></jre>\lib\security\cacerts
可以使用
- <property name="trustStore"><value>
- /some/path/to/your/lib/security/cacerts
- value>property>
配置,如果确信上面import动作已经把证书倒入,可以不用配置这个属性
部署contacts-CAS, 检验是否整合成功
使用http://localhost:8080/contacts-CAS访问应用程序,使用marissa/koala可以正常使用,如果用scott/wombat则为access denied.
相关推荐
- **CAS认证**:支持Central Authentication Service (CAS)协议进行单点登录。 - **X.509证书认证**:支持使用X.509数字证书进行身份验证。 - **DAO认证**: - 支持通过JDBC或属性文件进行认证。 - 提供密码编码...
在授权方面,Acegi分为三个主要领域:web请求的授权、调用方法的授权和对单个对象实例的访问控制。这涵盖了Web应用程序中的不同安全需求,从控制用户对网页的访问到限制对业务方法的调用,再到确保用户只能访问他们...
为了使Acegi能够与CAS服务器通信,我们需要创建一个CasClient实例,这通常通过XML配置完成。CasClient包含了与CAS服务器交互的所有必要参数,如服务器地址、服务URL等。 6. **添加权限控制** 在Acegi-context中,...
使用LDAP与Acegi Security集成需要创建LDAP认证器实例,并配置LDAP服务器连接参数。 ##### 17.3 配置 配置LDAP认证涉及到设置服务器地址、端口、查询语法等参数。 #### 十七、CAS认证 ##### 18.1 概览 CAS...
CAS是一种单点登录(Single Sign-On, SSO)解决方案,Acegi集成了耶鲁大学开发的CAS,使得用户只需一次登录,就能访问多个相互信任的应用系统。 6. **X509认证**: X509证书是公钥基础设施(PKI)的一部分,Acegi...
其中,“SecureObject”拦截器是Acegi Security的核心组件之一,它体现了该系统的架构特点。如图1所示,关键类之间相互协作,而`AbstractSecurityInterceptor`是其主要实现类。 ![Acegi Key Secure Object Model](#...
4. Access Control List (ACL):Acegi提供了基于对象实例的访问控制,允许根据对象的属性或状态来限制访问。例如,一个订单如果其价值小于100元,则所有用户都可以查看;但如果超过100元,就只有具有特定权限的用户...
- **历史**: 本章节简要回顾了 Spring Security 的发展历程,包括其前身 Acegi 安全框架的历史背景。 - **版本编号**: 明确了 Spring Security 版本的命名规则,例如 `3.2.0.M2` 中的 `.M2` 表示这是一个里程碑版本...
Spring Security 最初是在 2004 年由 Ben Alex 开发的 Acegi Security System,随后被集成到 Spring Framework 中,并更名为 Spring Security。随着时间的发展,它逐渐成为企业级应用中不可或缺的安全解决方案。 ##...
- **背景:** Spring Security 的前身是 Acegi 安全框架,后来被 Spring 社区采纳并重新命名为 Spring Security。 - **发展:** 经过多个版本的迭代,Spring Security 已经成为 Spring 生态系统中最成熟的安全解决...
- **基于Acegi框架**:Spring Security 2是在流行的Acegi安全框架基础上构建的; - **Spring命名空间改进**:通过Spring的命名空间改进了可用性; - **增强的LDAP支持**:提供了更好的LDAP集成能力; - **增强的单点...
Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...