- 浏览: 103552 次
- 性别:
- 来自: 南京
文章分类
最新评论
Spring的Acegi security的配置,和JDK1.5的一些问题
新的项目没有开始于是抽空做一个通用一些的Security,后来又考虑到CAS和SSL的认证问题俺还没有弄懂,就选择直接使用Spring的子项目acegi
acegi是基于Spring的的一个安全框架,支持HTTP基本(basic)验证、HTTP Request Session验证、安全通道、ACL等等,功能强大。配置比较简单,但是还是要写一下:
1. 下载Spring Acegi的jar文件和它的源代码,在它的binary包中有一个contacts.war,这个是acegi的示例,把它放在tomcat的webapps下直接运行即可,这个是acegi很好的参考。
2. 将acegi的Http Servlet Filter配置在web.xml中。
<!-- Acegi Security-->
<filter>
<filter-name>Acegi Filter Chain Proxy</filter-name>
<filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>
<init-param>
<param-name>targetClass</param-name>
<param-value>org.acegisecurity.util.FilterChainProxy</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Acegi Filter Chain Proxy</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3. 将contract示例下的applicationContext-acegi-security.xml放在ClassPath下或WEB-INF下,并且在web.xml中指出该文件的位置:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:/net/chinasam/common/applicationContext-*.xml
/WEB-INF/ applicationContext-acegi-security.xml</param-value>
</context-param>
4. 在applicationContext-acegi-security.xml中找到下面的bean定义
<bean id="jdbcDaoImpl" class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl">
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>
可以看到dataSource属性必须引用一个DataSource,修改这个bean,是之使用一个Spring管理的DataSource实例。JdbcDaoImpl是查询数据库的实现类,这个类使用下面的SQL进行查询:
"SELECT username,password,enabled FROM users WHERE username = ?";
"SELECT username,authority FROM authorities WHERE username = ?";
前者查询用户,后者查询角色,你可以根据实际项目的情况进行修改:设置JdbcDaoImpl的authoritiesByUsernameQuery和usersByUsernameQuery属性。这个我没有设置过,因为我的数据库结构和这个一样。Acegi没有包含用户管理,关于User的CRUD你必须自己完成,然后通过这两个属性告诉acegi如何查询用户和角色。
5. 密码编码,经常需要给密码进行编码,常用的算法包括MD5,SHA等,applectionContext –acegi-Security.xml中的配置为:
<bean id="passwordEncoder" class="org.acegisecurity.providers.encoding.Md5PasswordEncoder" />
注意,如果使用上述配置,数据库中的password字段内容必须是实际内容的MD5摘要。
6. ApplicationContext-acegi-securtiy.xml缺省的使用HTTP Request验证,也就是通过普通的HTML标单提交用户名和口令,所以你必须编写自己的login页面,以下是一个例子,注意黑体字部分:
<form name="login_form"action="<c:urlvalue='j_acegi_security_check'/>"method="POST">
<table width="241" border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td><img src="<fmt:messagekey="login.title.img"/>"width="241" height="26"></td>
</tr>
<tr>
<td>
<table width="241" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="1" bgcolor="#D2DBE8"></td>
<td align="left"> <fmt:message key="username"/></td>
<tdalign="left">
<input type="text" class="text" name="j_username"></td>
<td rowspan="4">
<img src="<fmt:messagekey="login.button.img"/>"onclick="javascript:login_form.submit()" style="cursor:hand">
</td>
<td width="1" bgcolor="#D2DBE8"></td>
</tr>
<tr>
<td width="1" bgcolor="#D2DBE8"></td>
<td align="left"> <fmt:message key="password"/></td>
<td align="left"><input type="password" class="text" name="j_password"></td>
<td width="1" bgcolor="#D2DBE8"></td>
<tr>
<td width="1" bgcolor="#D2DBE8"></td>
<td align="left" colspan="3"> <fmt:message key="rememberme"/>
<input type="checkbox" name="_acegi_security_remember_me"></td>
<td width="1" bgcolor="#D2DBE8"></td>
</tr>
</table>
</td></tr>
<c:if test="${! empty param.login_error}">
<tr><td><br>
<fmt:message key="login.failed"/>
<%= ((AuthenticationException) session.getAttribute(AbstractProcessingFilter.ACEGI_SECURITY_LAST_EXCEPTION_KEY)).getMessage() %>
</td> </tr></c:if> </table></form>
最后,你需要配置URL权限,关于POJO的方法权限俺还没有弄懂,而且,如果不提供远程访问的情况下,一般来说也不需要。在ApplicationContext-acegi-securtiy.xml找到bean:filterInvocationInterceptor这个是基于Http Request验证的权限terceptor,注意设置bjectDefinitionSource属性,下面是例子,URL的格式是参考ANT的格式,也可以根据正则表达式的写法:
<property name="objectDefinitionSource">
<value>
<![CDATA[
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/index.faces=ROLE_SUPERVISOR,ROLE_ANONYMOUS,ROLE_USER
/login.jsp*=ROLE_SUPERVISOR,ROLE_ANONYMOUS,ROLE_USER
/images/*.*=ROLE_SUPERVISOR,ROLE_ANONYMOUS,ROLE_USER
/common/*.*=ROLE_SUPERVISOR,ROLE_ANONYMOUS,ROLE_USER
/styles/*.*=ROLE_SUPERVISOR,ROLE_ANONYMOUS,ROLE_USER
/**=ROLE_USER
]]>
</value>
各个权限入口的顺序十分重要,注意必须把特殊的URL权限写在一般的URL权限之前。
7. Acegi 1.0是基于JDK1.5的,虽然你可以在1.4下使用,但是我还是把我的项目改为JDK1.5,没成想还出现了一些问题。另外JSTL的也不同了,如果你想使用EL,则必须这样引用core:
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
在JDK1.4下使用String.replaceFirst和replaceAll方法没有问题,但是在JDK1.5下却报IllegalArgumentException,getMessage指出Illegal group arguments,但是单独写测试类运行却没有任何问题,我只好些了自己的replace算法,可是总觉得应该使用JDK提供的,希望达人指教。
发表评论
-
规范的模板化项目架构管理
2012-05-03 23:31 848总在寻找项目开发简单化、标准化、统一化的开发管理方法,在项目 ... -
Java的ftp上传下载工具
2012-04-05 22:17 1720自己写的利用apache的net包写的ftp的上传、下 ... -
SmartGWT学习注意事项(一)
2012-03-31 20:42 1535首先表明,我 ... -
J2ME程序开发全方位基础讲解汇总
2007-08-03 14:19 620一、J2ME中需要的Java基础知识现在有大部分人,都是从零开 ... -
使用J2ME技术开发RPG游戏
2007-08-03 14:24 550RPG(角色扮演游戏)是手机游戏中的一类主要类型,也是相对来说 ... -
移动视频: QuickTime for Java API 入门
2007-08-05 12:45 620在 Java 平台上创建 iPod 视频内容 ... -
技术交流:QuickTime流媒体和Java(图)
2007-08-05 12:46 631这并不是即将问世的Quic ... -
JMF下载安装与支持格式
2007-08-05 12:47 853JMF开发进度不是很快,所以目前还是比较薄弱。 JMF,全名 ... -
搭建J2ME开发环境
2007-08-05 12:48 566由于WTK并没有提供代码编辑的功能,因此本文讲述如何使用Ecl ... -
JMF系统介绍
2007-08-09 15:18 699一.简介 1.1JMF 体系结构 ... -
Experiments in Streaming Content in Java ME(一)
2007-08-13 13:43 578Since my book on Mobile Media A ... -
Experiments in Streaming Content in Java ME(二)----Creating an RTSP Protocol Handler
2007-08-13 13:44 1446Recall that RTSP is the actual ... -
Experiments in Streaming Content in Java ME(三)-----Back to RTPSourceStream and StreamingDataSource
2007-08-13 13:46 1029With the protocol handler in pl ... -
java中文件操作大全
2007-08-22 15:40 554一.获得控制台用户输入的信息 /***//**获得控 ... -
Pocket PC、Pocket PC Phone、Smartphone的区别
2007-08-23 16:59 653首先说明几个概念: 1、什么是Pocket PC?Pocket ... -
Struts配置文件详解(来自csdn)
2007-11-30 08:35 497Struts应用采用两个基于X ... -
jBPM开发入门指南(5)
2007-11-30 08:45 510jBPM开发入门指南(5) 前篇说起要讲在JBPM中实现用 ... -
jBPM开发入门指南(4)
2007-11-30 08:48 587jBPM开发入门指南(4) 7 jBPM 的客户端 ... -
jBPM开发入门指南(3)
2007-11-30 08:51 6135 安装 jBPM 的 Eclipse 开发插件 有 ... -
jBPM开发入门指南(2)
2007-11-30 08:52 6234 数据库初始化 jBPM 需要数据库支持, jBPM ...
相关推荐
总的来说,Spring Acegi Security提供了一套全面的Web应用安全框架,它允许开发者通过注解或XML配置来实现灵活的认证和授权策略。通过将安全逻辑从业务代码中分离,不仅可以简化代码,也便于管理和维护。尽管Acegi ...
<bean id="filterSecurityInterceptor" class="org.acegisecurity.intercept.web.FilterSecurityInterceptor"> <sec:filter-security-metadata-source> **" access="ROLE_ADMIN"/> **" access="IS_...
标题和描述均提到了“Acegi Security整合CAS实例”,这涉及到Spring Framework下的Acegi Security模块与CAS(Central Authentication Service)的集成。Acegi Security是Spring框架的一个子项目,旨在为应用提供安全...
Acegi(现在已被Spring Security替代)在Spring应用程序中提供了身份验证、授权和会话管理等功能。 在Spring Acegi的例子中,我们首先需要了解的是基础概念: 1. **身份验证(Authentication)**:这是验证用户...
Spring ACEGI是Spring Security的前身,它是一个强大的、高度可配置的安全框架,专为Java企业级应用设计。这个框架旨在提供全面的身份验证、授权和服务层安全功能,允许开发者轻松地在Spring应用中实现复杂的安全...
《Acegi Security 1.0.7:Spring框架的安全认证组件深度解析》 Acegi Security是Spring框架的一个扩展,专为Java企业级应用提供安全认证和授权服务。它在Spring框架的基础上构建了一套完整的安全解决方案,使开发者...
开发人员可以使用这些测试类来验证他们的Spring Security配置是否正确,或者进行自定义扩展的单元测试。 4. **spring-security-core-tiger-2.0.5.RELEASE-sources.jar**:这个jar包包含了Spring Security核心组件的...
Acegi Security是一款在Java平台上广泛使用的安全框架,它为Spring应用程序提供了高级的身份验证、授权和服务保护功能。在本文中,我们将深入探讨Acegi Security 1.0.7版本中的核心概念和关键特性。 首先,我们要...
标题和描述均提及了“Spring安全系统:Acegi Security”,这是一种专为Spring Framework设计的安全解决方案,旨在提供强大的认证和授权功能。Acegi Security,后更名为Spring Security,是Spring生态系统中的重要...
如果项目是基于Spring的,需要在配置文件中启用Acegi Security,并根据应用需求配置相应的安全策略。同时,需要阅读并遵守`license.txt`中的条款,以确保合法合规地使用该框架。 值得注意的是,Acegi Security后来...
7. **可扩展性**:Acegi Security设计为模块化,开发者可以根据需要选择和配置组件,也可以轻松地添加自定义的安全策略和逻辑。 "acegi-security--license.txt"文件则包含了该软件的许可协议,通常这会是Apache ...
Acegi Security System for Spring Acegi Security是一款针对Spring框架的安全组件,它提供了全面的身份验证、授权和服务层安全功能。在深入探讨Acegi Security的源码之前,我们需要了解一些基本概念和背景知识。 ...
虽然 Acegi 已经被 Spring Security(自 Spring 2.0 版本起)所取代,但 Spring Acegi 3 在当时依然是许多项目中的首选安全组件。 **身份验证** 在 Spring Acegi 3 中,身份验证过程是核心功能之一。它支持多种...
3. **配置**:在Spring配置文件中,我们需要定义`<security:global-method-security>`来启用Acegi,然后配置`<security:http>`元素来设置URL过滤规则,如登录页面、访问权限等。 4. ** acegi.sql**:这个文件可能...
2. 配置Spring XML配置文件,声明Acegi Security的相关bean,如`AuthenticationManager`、`AuthorizationManager`等。 3. 定义安全策略,包括访问控制规则、用户认证方式等。 4. 在控制器或服务层的方法上添加安全...
如何定义spring security的安全认证框架,对url和系统类method进行过滤以及权限分配和控制
迁移过程中,主要任务是将Acegi的XML配置转换为Spring Security的配置,并调整使用的新API。 总结,Spring Acegi作为Spring Security的前身,为Java安全框架的发展奠定了坚实的基础。虽然不再被推荐使用,但其设计...
Spring Acegi(现已被Spring Security替代)为Spring应用提供了全面的安全管理功能,包括身份验证、授权、会话管理以及基于角色的访问控制。本文将深入探讨Spring Acegi的核心概念和使用方法。 首先,Spring Acegi...