<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- Filter Chain -->
<!--
CONVERT_URL_TO_UPPERCASE_BEFORE_COMPARISON表示判断URL匹配时,首先将URL转变为大写的格式,
如果设置为CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON则表示比较前事先转换为小写的形式.
PATTERN_TYPE_APACHE_ANT表示使用Ant路径风格进行匹配URL的描述,如果不提供这个指令,Acegi使用正则表达式来解析URL路径映射
/**=...,多个过滤器组成的过滤器链
-->
<bean id="filterChainProxy"
class="org.acegisecurity.util.FilterChainProxy">
<property name="filterInvocationDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/**=httpSessionContextIntegrationFilter,authenticationProcessingFilter,logoutFilter
</value>
</property>
</bean>
<!-- 过滤器链中的过滤器(1),负责处理安全通道的转换,验证码之类 -->
<!--
<bean id="channelProcessingFilter"
class="org.acegisecurity.securechannel.ChannelProcessingFilter">
</bean>
-->
<!-- 过滤器链中的过滤器(2) -->
<bean id="httpSessionContextIntegrationFilter"
class="org.acegisecurity.context.HttpSessionContextIntegrationFilter" />
<!-- 认证处理过滤器 -->
<bean id="authenticationProcessingFilter"
class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
<!-- ①注入认证管理器 -->
<property name="authenticationManager"
ref="authenticationManager" />
<!---1过滤器处理的URL -->
<property name="filterProcessesUrl"
value="/j_acegi_security_check" />
<!-- -2认证成功后转向的URL -->
<property name="defaultTargetUrl" value="/main.jsp" />
<!-- -3认证失败后转向的URL -->
<property name="authenticationFailureUrl"
value="/index.jsp?login_error=1" />
</bean>
<!-- ②-1使用基于DAO的认证提供者提供认证服务 -->
<bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager">
<property name="providers">
<list>
<ref local="daoAuthenticationProvider" />
</list>
</property>
</bean>
<!-- ③基于DAO的认证提供者 -->
<!-- ③-1根据用户名获取系统中真实UserDetails 对象的服务类 -->
<bean id="daoAuthenticationProvider"
class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
<property name="userDetailsService" ref="userDetailsService" />
</bean>
<!-- ④ 该服务类根据缓存在内存中的用户信息列表获取userDetails对象 -->
<!-- userMap属性指定可以登入的使用者名称、密码、是否启用、角色等资讯 -->
<!--
<bean id="userDetailsService" class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl">
<property name="userProperties">
<bean class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location" value="/WEB-INF/users.properties" />
</bean>
</property>
</bean>
-->
<!-- 从数据库中拿 -->
<bean id="userDetailsService"
class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl">
<!-- ② -->
<property name="dataSource" ref="dataSource" /><!-- ②-1 数据源 -->
<property name="usersByUsernameQuery"><!-- ②-2 根据用户名查询用户的SQL语句 -->
<value>
SELECT username,password, status FROM t_user WHERE
username = ?
</value>
</property>
<property name="authoritiesByUsernameQuery"><!-- ②-3 根据用户名查询用户权限记录的SQL语句 -->
<value>
SELECT u.username,p.priv_name FROM t_user u,t_user_priv
p WHERE u.user_id =p.user_id AND u.username = ?
</value>
</property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/acegi</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
</bean>
<!-- 登出处理 -->
<bean id="logoutFilter" class="org.acegisecurity.ui.logout.LogoutFilter">
<constructor-arg value="/index.jsp"/> <!-- 登出后的显示页面 -->
<constructor-arg>
<list>
<bean class="org.acegisecurity.ui.logout.SecurityContextLogoutHandler"/>
</list>
</constructor-arg>
</bean>
</beans>
用户表结构:
mysql> desc t_user;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| USER_ID | int(11) | NO | PRI | NULL | auto_increment |
| USERNAME | varchar(30) | NO | UNI | | |
| PASSWORD | varchar(30) | YES | | NULL | |
| STATUS | tinyint(1) | NO | | 0 | |
+----------+-------------+------+-----+---------+----------------+
mysql> desc t_user_priv;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| USER_ID | int(11) | NO | PRI | 0 | |
| PRIV_NAME | varchar(30) | NO | PRI | | |
+-----------+-------------+------+-----+---------+-------+
分享到:
相关推荐
详细的spring security2.x配置
可以通过XML配置文件或注解来定义和配置bean,包括其属性、初始化方法和销毁方法。 5. **数据访问集成**:Spring提供了对各种数据访问技术的支持,如JDBC、Hibernate、JPA等,简化了数据库操作。 6. **MVC框架**:...
1. **依赖注入(Dependency Injection, DI)**:这是Spring的核心特性之一,允许对象之间的依赖关系通过配置文件或注解来管理,而不是硬编码在类内部。这提高了代码的可测试性和可维护性。 2. **AOP(面向切面编程...
而"spring-1.2.4.jar"则是Spring框架的一个较旧版本,表明Acegi Security是在Spring 1.x时代设计的,那时候Spring尚未内置完整的安全模块。 首先,让我们了解Acegi Security的主要组件: 1. **Authentication**...
同时,需要在`WebContent/WEB-INF`目录下创建`applicationContext.xml`文件,这是Spring的配置文件。 接下来,是添加Acegi安全框架的配置。在`web.xml`中,我们需要声明一个名为`springSecurityFilterChain`的过滤...
1. **依赖注入(Dependency Injection, DI)与控制反转(Inversion of Control, IoC)**:Spring的核心特性之一,它允许开发者通过配置文件或注解来定义对象间的依赖关系,而不是在代码中硬编码。这样可以提高代码的...
7. **Bean的配置与装配**:在Spring 2.x中,通常使用XML配置文件来定义和装配Bean。包括定义Bean的类、属性、依赖关系,以及初始化方法等。 8. **Spring的单元测试**:Spring提供了测试支持,包括模拟对象(Mock ...
1. **身份验证**: Acegi提供了多种身份验证机制,如基于表单的登录、HTTP基本认证、X.509证书等。通过定义AuthenticationProvider,开发者可以自定义身份验证逻辑。 2. **访问控制**:Acegi允许开发者使用基于角色...
在《精通spring2.x企业级应用》的第17章中,作者可能详细解释了如何配置这些组件,以及如何编写安全相关的XML配置文件。读者通过实践这些示例代码,能深入理解Acegi Security的工作原理,并学习如何在实际项目中应用...
如果项目是基于Spring的,需要在配置文件中启用Acegi Security,并根据应用需求配置相应的安全策略。同时,需要阅读并遵守`license.txt`中的条款,以确保合法合规地使用该框架。 值得注意的是,Acegi Security后来...
- **类包及Spring配置文件规划**:组织代码结构和配置文件。 - **2.3 持久层** - **建立领域对象**:定义应用的核心实体类。 - **UserDao**:负责用户数据的操作。 - **LoginLogDao**:记录用户的登录日志。 -...
Spring Security在Acegi的基础上进行了扩展和优化,提供了更强大的安全特性,如支持OAuth2、JWT等现代认证协议,以及更丰富的配置选项。对于处理Java Web应用的安全问题,熟悉Spring Security是必备的技能。
7. **许可证信息**: “springframework-license.txt”文件通常包含了软件的许可证条款,对于Acegi Security 0.8.2来说,这可能是Apache Software License 2.0,这是一个宽松的开源许可证,允许商业和非商业用途。...
5. **配置文件**:创建 Spring Security 的配置文件 `security-context.xml` 和 web.xml 文件。这两个文件将在后续章节中详细介绍。 #### 参考资料 1. **官方文档**:Spring Security 自带的 Reference 文档是最...
1. `AcegiGrailsPlugin.groovy`:这是Grails插件的核心配置文件,它定义了插件的元数据、依赖项、安装和卸载时的钩子函数等,是插件生命周期管理的关键。 2. `application.properties`:这个文件用于存储应用的属性...
在`springside.src`压缩包中,可能包含了示例代码或配置文件,用于演示如何实现Spring+LDAP的SSO功能。 总之,Spring与LDAP的结合为构建SSO系统提供了一个高效、灵活的解决方案。通过理解这些核心概念和技术,...
1. **依赖注入(DI)**:这是Spring的核心特性,通过配置文件或注解,实现对象间的依赖关系解耦,使得代码更加灵活和易于测试。 2. **AOP(面向切面编程)**:Spring提供了强大的AOP支持,允许开发者定义“切面”,将...
通过声明式配置,开发者可以在XML配置文件中定义安全规则,而无需修改业务代码。 五、实际应用示例 1. **URL访问控制**:使用Acegi可以限制某些URL只能由特定角色的用户访问。 2. **方法访问控制**:在Service或DAO...
在使用这些库时,开发者需要确保他们的项目配置正确,包括Spring Security的配置文件(如 applicationContext-security.xml),以及对所需安全功能的定制,例如登录页面、权限控制、会话管理等。同时,源代码和测试...
总的来说,Acegi Security(Spring Security)为Spring开发者提供了一套强大而全面的安全解决方案,通过其丰富的配置选项和可扩展性,能满足各种复杂的应用场景。无论是初学者还是经验丰富的开发者,理解和掌握Acegi...