"Acegi入门资料提供了 Acegi 安全框架的基础知识,主要涉及在Web应用中的配置,包括web.xml中的过滤器配置和Acegi安全文件的设置。"
Acegi安全框架是一个广泛使用的Java安全框架,它允许开发者实现细粒度的访问控制,以及灵活的身份验证和授权机制。在开始使用Acegi时,理解其基础配置是至关重要的。
一、web.xml中过滤器的配置
1) FilterToBeanProxy
Acegi通过FilterToBeanProxy实现了对Filter的特殊使用,它实际上是一个代理类,委托Spring容器中的FilterChainProxy执行过滤任务。FilterChainProxy管理多个具有特定功能的安全过滤器,这些过滤器负责身份验证和授权过程。在web.xml中配置FilterToBeanProxy,需要指定其目标类为FilterChainProxy,这样可以利用Spring的IOC(Inversion of Control)优势,简化配置并方便管理。
```xml
<filter>
<filter-name>AcegiFilterChainProxy</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>
```
2) filter-mapping
配置filter-mapping用于定义FilterToBeanProxy所要拦截的URL模式。例如,以下配置表示只有以".do"、".jsp"结尾的请求,以及/j_acegi_security_check路径会经过Acegi的安全控制,其他如javascript、css等静态资源则不受此限制。
```xml
<filter-mapping>
<filter-name>AcegiFilterChainProxy</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>AcegiFilterChainProxy</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>AcegiFilterChainProxy</filter-name>
<url-pattern>/j_acegi_security_check</url-pattern>
</filter-mapping>
```
二、Acegi安全文件的配置
Acegi的安全配置通常在XML文件中进行,这个文件可能命名为`security-config.xml`,它定义了用户认证和授权的具体规则。例如,你可以在这里定义哪些用户角色可以访问哪些URL,以及如何进行密码加密和认证策略等。
一个简单的Acegi安全配置可能包括以下元素:
- `authentication-manager`:配置认证管理器,用于处理用户的登录尝试。
- `intercept-url`:定义URL与所需的安全权限之间的映射。
- `user-service`:定义用户信息,包括用户名、密码、角色等。
- `password-encoder`:配置密码编码器,确保密码存储的安全性。
```xml
<bean id="authenticationManager" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
<property name="userDetailsService" ref="userService"/>
<property name="passwordEncoder" ref="passwordEncoder"/>
</bean>
<bean id="userService" class="org.acegisecurity.userdetails.jdbc.JdbcUserDetailsManager">
<!-- 数据库连接配置 -->
</bean>
<bean id="passwordEncoder" class="org.acegisecurity.providers.encoding.ShaPasswordEncoder"/>
<http auto-config="true">
<intercept-url pattern="/admin/" access="ROLE_ADMIN" />
<form-login/>
<logout/>
</http>
```
在这个例子中,/admin/路径只允许具有"ROLE_ADMIN"角色的用户访问,所有用户都可以通过表单登录,而注销功能也被启用。
Acegi安全框架的强大之处在于它的灵活性和可扩展性,可以根据需求定制各种安全策略。通过配置,可以实现基于角色的访问控制(RBAC)、记住我功能、会话管理、CSRF防护等多种安全特性。此外,Acegi还可以与其他Spring模块集成,如Spring MVC,进一步提升应用的安全性。