`

Spring的Acegi security的配置

    博客分类:
  • java
 
阅读更多

SpringAcegi security的配置,和JDK1.5的一些问题

新的项目没有开始于是抽空做一个通用一些的Security,后来又考虑到CASSSL的认证问题俺还没有弄懂,就选择直接使用Spring的子项目acegi

acegi是基于Spring的的一个安全框架,支持HTTP基本(basic)验证、HTTP Request Session验证、安全通道、ACL等等,功能强大。配置比较简单,但是还是要写一下:

1. 下载Spring Acegijar文件和它的源代码,在它的binary包中有一个contacts.war,这个是acegi的示例,把它放在tomcatwebapps下直接运行即可,这个是acegi很好的参考。

2. acegiHttp 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 = ?";

前者查询用户,后者查询角色,你可以根据实际项目的情况进行修改:设置JdbcDaoImplauthoritiesByUsernameQueryusersByUsernameQuery属性。这个我没有设置过,因为我的数据库结构和这个一样。Acegi没有包含用户管理,关于UserCRUD你必须自己完成,然后通过这两个属性告诉acegi如何查询用户和角色。

5. 密码编码,经常需要给密码进行编码,常用的算法包括MD5SHA等,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">&nbsp;<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">&nbsp;<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">&nbsp;<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找到beanfilterInvocationInterceptor这个是基于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.replaceFirstreplaceAll方法没有问题,但是在JDK1.5下却报IllegalArgumentExceptiongetMessage指出Illegal group arguments,但是单独写测试类运行却没有任何问题,我只好些了自己的replace算法,可是总觉得应该使用JDK提供的,希望达人指教。

8.关于如何使用ACLSSL等验证,俺需要进一步研究。
分享到:
评论

相关推荐

    Spring Acegi权限控制

    总的来说,Spring Acegi Security提供了一套全面的Web应用安全框架,它允许开发者通过注解或XML配置来实现灵活的认证和授权策略。通过将安全逻辑从业务代码中分离,不仅可以简化代码,也便于管理和维护。尽管Acegi ...

    spring acegi 详细文档

    &lt;bean id="filterSecurityInterceptor" class="org.acegisecurity.intercept.web.FilterSecurityInterceptor"&gt; &lt;sec:filter-security-metadata-source&gt; **" access="ROLE_ADMIN"/&gt; **" access="IS_...

    Acegi Security整合CAS实例

    标题和描述均提到了“Acegi Security整合CAS实例”,这涉及到Spring Framework下的Acegi Security模块与CAS(Central Authentication Service)的集成。Acegi Security是Spring框架的一个子项目,旨在为应用提供安全...

    spring Acegi例子,很简单的一个acegi实例,容易理解

    Acegi(现在已被Spring Security替代)在Spring应用程序中提供了身份验证、授权和会话管理等功能。 在Spring Acegi的例子中,我们首先需要了解的是基础概念: 1. **身份验证(Authentication)**:这是验证用户...

    Spring ACEGI手册(部份)

    Spring ACEGI是Spring Security的前身,它是一个强大的、高度可配置的安全框架,专为Java企业级应用设计。这个框架旨在提供全面的身份验证、授权和服务层安全功能,允许开发者轻松地在Spring应用中实现复杂的安全...

    acegisecurity-1.0.7

    《Acegi Security 1.0.7:Spring框架的安全认证组件深度解析》 Acegi Security是Spring框架的一个扩展,专为Java企业级应用提供安全认证和授权服务。它在Spring框架的基础上构建了一套完整的安全解决方案,使开发者...

    spring-security所需要的jar包,

    开发人员可以使用这些测试类来验证他们的Spring Security配置是否正确,或者进行自定义扩展的单元测试。 4. **spring-security-core-tiger-2.0.5.RELEASE-sources.jar**:这个jar包包含了Spring Security核心组件的...

    acegisecurity-1.0.7.zip_.acegisecuri_acegi security 1.0.7_acegi

    Acegi Security是一款在Java平台上广泛使用的安全框架,它为Spring应用程序提供了高级的身份验证、授权和服务保护功能。在本文中,我们将深入探讨Acegi Security 1.0.7版本中的核心概念和关键特性。 首先,我们要...

    Spring安全系统:Acegi Security--星月夜

    标题和描述均提及了“Spring安全系统:Acegi Security”,这是一种专为Spring Framework设计的安全解决方案,旨在提供强大的认证和授权功能。Acegi Security,后更名为Spring Security,是Spring生态系统中的重要...

    acegi-security-tiger-1.0.0-RC2.jar.zip

    如果项目是基于Spring的,需要在配置文件中启用Acegi Security,并根据应用需求配置相应的安全策略。同时,需要阅读并遵守`license.txt`中的条款,以确保合法合规地使用该框架。 值得注意的是,Acegi Security后来...

    acegi-security-tiger-1.0.7.jar

    7. **可扩展性**:Acegi Security设计为模块化,开发者可以根据需要选择和配置组件,也可以轻松地添加自定义的安全策略和逻辑。 "acegi-security--license.txt"文件则包含了该软件的许可协议,通常这会是Apache ...

    acegi-security源码包

    Acegi Security System for Spring Acegi Security是一款针对Spring框架的安全组件,它提供了全面的身份验证、授权和服务层安全功能。在深入探讨Acegi Security的源码之前,我们需要了解一些基本概念和背景知识。 ...

    Spring acegi 3 文档

    虽然 Acegi 已经被 Spring Security(自 Spring 2.0 版本起)所取代,但 Spring Acegi 3 在当时依然是许多项目中的首选安全组件。 **身份验证** 在 Spring Acegi 3 中,身份验证过程是核心功能之一。它支持多种...

    spring acegi 使用工程demo

    3. **配置**:在Spring配置文件中,我们需要定义`&lt;security:global-method-security&gt;`来启用Acegi,然后配置`&lt;security:http&gt;`元素来设置URL过滤规则,如登录页面、访问权限等。 4. ** acegi.sql**:这个文件可能...

    acegi-security-0.6.1.jar.zip

    2. 配置Spring XML配置文件,声明Acegi Security的相关bean,如`AuthenticationManager`、`AuthorizationManager`等。 3. 定义安全策略,包括访问控制规则、用户认证方式等。 4. 在控制器或服务层的方法上添加安全...

    关于web spring acegi 权限配置xml

    如何定义spring security的安全认证框架,对url和系统类method进行过滤以及权限分配和控制

    spring acegi

    迁移过程中,主要任务是将Acegi的XML配置转换为Spring Security的配置,并调整使用的新API。 总结,Spring Acegi作为Spring Security的前身,为Java安全框架的发展奠定了坚实的基础。虽然不再被推荐使用,但其设计...

    Spring Acegi(2)

    Spring Acegi(现已被Spring Security替代)为Spring应用提供了全面的安全管理功能,包括身份验证、授权、会话管理以及基于角色的访问控制。本文将深入探讨Spring Acegi的核心概念和使用方法。 首先,Spring Acegi...

Global site tag (gtag.js) - Google Analytics