- 浏览: 306151 次
文章分类
最新评论
-
流年末年:
那四个参数还是没看懂.....能不能解释下showPassst ...
我写的密码强度验证方法(原创) -
kingcs2008:
// 验证pws.jsshowPassstrength(&qu ...
我写的密码强度验证方法(原创) -
h957355152:
请问博主这个怎么用呢?我直接放到jsp里面调用showPass ...
我写的密码强度验证方法(原创) -
qq_15138059:
我写的全国省市县三级联动菜单,拿出来和大家分享了(原创) -
valenon:
评论呢?从MAIL FROM命令开始貌似就出错了:500 Er ...
如何发送伪造的电子邮件
这次上传的部分内容是入门级的,比较简单,但是本章整体的功能还是非常重要的。
第四章 凭证安全存储
到现在为止,我们已经将 JBCP Pets 站点做了一些用户友好性方面的升级,包括一个自定义的登录页、修改密码以及 remember me 功能。
在本章中,我们将会把到目前为止都在使用的内存存储转移到数据库作为后台的认证存储。我们将会介绍默认的 Spring Security 数据库 schema ,并介绍自定义扩展 JDBC 实现的方式。
在本章的课程中,我们将会:
l 理解如何配置 Spring Security 才能使用 JDBC 访问数据库服务以实现用户的存储和认证;
l 学习如何使用基于内存数据库 HSQLDB 的 JDBC 配置,我们使用这个数据库主要是为了开发测试的目的;
l 使得 Spring Security 的 JDBC 能够支持已经存在的遗留数据库 schema ;
l 掌握两种管理用户名和密码的功能,两者都会涵盖内置的和自定义的方式;
l 掌握配置密码编码的不同方法;
l 理解密码 salting 技术以提供更安全的方式存储密码;
l 持久化用户的 remember me token ,使得在服务器重启后 token 仍能有效;
l 通过配置 SSL/TLS 加密和端口映射,在传输层上保护应用的安全。
使用数据库后台的 Spring Security 认证
我们进行安全控制的 JBCP Pets 应用有一个明显问题是基于内存的用户名和密码存在时间比较短,对用户很不友好。一旦应用重启,任何的用户注册,密码修改或者其他的活动都会丢失。这是不可接受的,所以对于 JBCP Pets 应用的下一个逻辑实现功能就是重新设置 Spring Security 以使用关系型数据库来进行用户存储和授权。使用 JDBC 访问数据库能够使得用户的信息能够持久化,及时应用重启依旧有效,另外更能代表现实世界中 Spring Security 的使用。
配置位于数据库上的认证存储
这个练习的第一部分是建立一个基于 Java 的关系数据库 HyperSQL DB (或简写为 HSQL )示例,并装入 Spring Security 默认的 schema 。我们将会通过使用 Spring Security 的嵌入式数据库配置功能来设置 HSQL 在内存中运行,比起手动的安装数据库,这是一个很简单的配置方法。
请记住在这个例子中(包括本书的其余部分),我们将使用 HSQL ,主要是因为它很容易安装。在使用这些例子的过程中,我们鼓励修改这个配置以使用你喜欢的数据库。鉴于我们不想让本书的这一部分过多关注于复杂数据库的安装,对练习来说我们选择了更简便而不是更接近现实。
创建 Spring Security 默认的 schema
我们提供了一个 SQL 文件( security-schema.sql ),它将用来创建 Spring Security 使用 HSQL 所依赖的所有表。如果你使用自己的数据库实例,你可能会需要调整 schema 的定义语法来适应特定的数据库。我们会将 SQL 文件置于 classpath 中,在 WEB-INF/classes 目录下。
配置 HSQL 嵌入式数据库
要配置 HSQL 嵌入式的数据库,我们需要修改 dogstore-security.xml 文件,以实现启动数据库并运行 SQL 来创建 Spring Security 表结构。首先,我们将会在文件的顶部添加对 jdbc XML 模式的应用:
- < beans:beans xmlns = "http://www.springframework.org/schema/security"
- xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
- xmlns:beans = "http://www.springframework.org/schema/beans"
- xmlns:jdbc = "http://www.springframework.org/schema/jdbc"
- xsi:schemaLocation ="
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/jdbc
- http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
- http://www.springframework.org/schema/security
- http://www.springframework.org/schema/security/
- spring-security3.0.xsd"
- >
接下来,我们声明 <embedded-database> 元素,以及对 SQL 脚本的引用:
- < jdbc:embedded-database id = "dataSource" type = "HSQL" >
- < jdbc:script location = "classpath:security-schema.sql" />
- </ jdbc:embedded-database >
如果此时重启服务,你可以在日志上看到初始化 HSQL 数据库。需要记住的是 <embedded-database> 只会在内存中创建数据库,所以你在内存中看不到任何东西,也不能使用标准的工具进行查询。
配置 JdbcDaoImpl 凭证存储
我们需要修改 dogstore-security.xml 文件来声明正在使用 JDBC 的 UserDetailsService 实现,替换我们在第二章: Spring Security 起步 和第三章:增强用户体验 中配置的 Spring Security 内存 UserDetailsService 实现。这通过一个对 <authentication-manager> 声明的一个简单改变来实现:
- < authentication-manager alias = "authenticationManager" >
- < authentication-provider >
- < jdbc-user-service data-source-ref = "dataSource" />
- </ authentication-provider >
- </ authentication-manager >
【 data-source-ref 引用了我们在上一步声明 <embedded-database> 时定义的 bean 。】
添加用户定义到 schema 中
最后,我们要创建另外一个 SQL 文件,它将会在内存数据库创建时执行。这个 SQL 文件将会包含默认用户( admin 和 guest )的信息,以及 GrantedAuthority 设置(这一点我们在前一章中已经用过了)。我们将这个文件命名为 test-data.sql ,并将其与 security-schema.sql 一起放在 WEB-INF/classes 下:
- insert into users(username, password , enabled) values
- ('admin' , 'admin' , true );
- insert into authorities(username,authority) values
- ('admin' , 'ROLE_USER' );
- insert into authorities(username,authority) values
- ('admin' , 'ROLE_ADMIN' );
- insert into users(username, password , enabled) values
- ('guest' , 'guest' , true );
- insert into authorities(username,authority) values
- ('guest' , 'ROLE_USER' );
- commit ;
接下来,我们需要添加这个 SQL 文件到嵌入式数据库配置中,它将会在启动时加载:
- < jdbc:embedded-database id = "dataSource" type = "HSQL" >
- < jdbc:script location = "classpath:security-schema.sql" />
- < jdbc:script location = "classpath:test-data.sql" />
- </ jdbc:embedded-database >
在 SQL 添加到数据库配置后,我们应该能够启动应用并登录。 Spring Security 现在已经查找数据库的认证和 GrantedAuthority 信息。
基于数据库后台的认证是如何实现的
你可能会记起在第二章中讲述的认证过程, AuthenticationManager 委托 AuthenticationProvider 来校验安全实体的凭证信息以确定它是否能够访问系统。我们在第二章和第三章中使用的 AuthenticationProvider 为 DaoAuthenticationProvider 。这个 provider 又委托了一个 UserDetailsService 的实现来从凭证库中检索和校验安全实体的信息。我们能够通过以下的图来反应第二章的过程:
正如你可能预期的那样,数据库后台的认证存储和内存存储的唯一区别在于 UserDetailsService 的实现类。 o.s.s.core.userdetails.jdbc.JdbcDaoImpl 类提供了 UserDetailsService 的实现。不同于在内存中(通过 Spring Security 的配置文件添加)查找, JdbcDaoImpl 在数据库中查找用户。
你可能意识到我们根本没有引用这个实现类。这是因为在更新后的
Spring Security
配置中
<jdbc-user-service>
声明会自动配置
JdbcDaoImpl
并将其织入到
AuthenticationProvider
中。在本章接下类的内容中,我们将会介绍如何配置
Spring Security
使用我们自定义的
JdbcDaoImpl
实现,它继续包含了修改密码功能(在第三章中我们添加到
InMemoryDaoImpl
了)。让我们看一下如何实现自定义的支持修改密码功能的
JdbcDaoImpl
子类配置。
发表评论
-
spring-security3 配置和使用(二)承上
2011-12-22 06:42 10642、xml配置,配置内容如下: Xml代码 ... -
spring-security3 配置和使用 (一)(转载)
2011-12-22 06:43 959最近项目中要使用到spring-security,可能研究 ... -
SpringSecurity3.X--一个简单实现(转载)
2011-12-22 06:43 2679作者对springsecurity研究不深,算是个初学者吧,最 ... -
SpringSecurity3.X--验证码(转载)
2011-12-22 06:44 1069一般来说,登录时都会要求用户输入验证码,以防止恶意登录。 可 ... -
SpringSecurity3.X--前台与后台登录认证(转载)
2011-12-23 06:33 3461不过一般我们在管理系统时都会分前台与后台,也就是说,前台与后台 ... -
SpringSecurity3.X--remember-me(转载)
2011-12-22 06:44 1750笔者在SpringSecurity中配置remember-me ... -
《Spring Security3》第六章第七部分翻译(认证事件处理与小结)
2011-12-23 06:34 1349认证事件处理 ... -
《Spring Security3》第六章第六部分翻译(Spring Security基于bean的高级配置)
2011-12-23 06:34 1059Spring Security 基于bean 的高级配 ... -
《Spring Security3》第六章第五部分翻译(手动配置Spring Security设施的bean)(转载)
2011-12-23 06:34 1032手动配置Spring Security 设施的be ... -
《Spring Security3》第六章第四部分翻译(异常处理)(转载)
2011-12-23 06:34 1248理解和配置异常处理 ... -
《Spring Security3》第六章第三部分翻译(Session的管理和并发)(转载)
2011-12-24 10:20 4232Session 的管理和并发 ... -
《Spring Security3》第六章第二部分翻译(自定义AuthenticationProvider)(转载)
2011-12-24 10:21 1527实现自定义的 AuthenticationProvide ... -
《Spring Security3》第六章第一部分翻译(自定义安全过滤器)(转载)
2011-12-24 10:21 1128第六章 高级配置和扩展 到目前为止,我 ... -
《Spring Security3》第五章第四部分翻译(方法安全的高级知识和小结)(转载)
2011-12-24 10:22 1061方法安全的高级知 ... -
《Spring Security3》第五章第三部分翻译(保护业务层)
2011-12-24 10:22 897保护业务层 到目前为止,在 ... -
《Spring Security3》第五章第二部分翻译下(实现授权精确控制的方法——页面级权限)(转载)
2011-12-25 00:47 1030使用控制器逻辑进行有条件渲染内容 ... -
《Spring Security3》第五章第二部分翻译上(实现授权精确控制的方法——页面级权限)(转载)
2011-12-25 00:47 977实现授权精确控制的方法 精确的授权指的是基于用 ... -
《Spring Security3》第五章第一部分翻译(重新思考应用功能和安全) (转载)
2011-12-25 00:47 952第五章 精确的 ... -
《Spring Security3》第四章第四部分翻译(Remember me后台存储和SSL)(转载)
2011-12-25 00:47 1271将 Remember me 功能 ... -
《Spring Security3》第四章第三部分翻译下(密码加salt)(转载)
2011-12-25 00:48 1815你是否愿意在密码上添加点salt ? 如果安 ...
相关推荐
### 第一章:Spring Security3入门 该章节分为两个部分,介绍了Spring Security3的基础概念,包括如何设置安全上下文、理解Spring Security的架构以及如何使用Spring Security进行基本的认证和授权。 ### 第二章:...
《Spring Security3》第四章第四部分主要探讨了Remember me服务的后台存储机制以及如何结合SSL(Secure Sockets Layer)来增强应用的安全性。这一部分的知识点涵盖了Spring Security中Remember me的功能,用户身份...
Spring Security 3.0.1 是在 Spring Security 3.0 的基础上进行的一次 bug 修复版本,主要针对先前版本中存在的问题进行了修正。此次版本未引入新的功能,但修正了一些已知的问题,增强了稳定性。 ##### 1.4 获取 ...
SecurityContext 是 Spring Security 中的一个重要概念,表示当前用户的安全上下文。SecurityContext 中包含用户的身份信息、权限信息等。SecurityContext 是通过 SecurityContextHolder 实现的。 五、Spring ...
#### 第一部分:基础篇 ##### 第1章:一个简单的 HelloWorld 在这一章节中,我们将了解如何搭建一个最基础的 Spring Security 项目,并通过一个简单的示例来理解 Spring Security 的工作原理。 **1.1 配置过滤器*...
Spring Security 是一个强大的安全框架,主要用于Java应用的安全管理,它为Web应用和企业级应用提供了全面的安全服务。这个框架能够处理认证、授权以及各种安全相关的功能,帮助开发者构建安全、可扩展的应用。以下...
- Spring Security 3引入了CSRF(跨站请求伪造)防护,通过添加一个不可预测的令牌到表单提交中,防止恶意第三方发起未经授权的操作。 5. **国际化支持**: - 支持多语言界面,可以根据用户的首选语言显示错误...
Spring Security 是一个强大的安全框架,用于为Java应用提供全面的安全管理解决方案。它是Spring生态系统的组成部分,专注于身份验证、授权和访问控制。Spring Security的核心特性包括: 1. **身份验证...
#### 第一章:一个不安全应用的剖析 **安全审计** - **目的**:识别系统中的安全隐患,并评估安全措施的有效性。 - **过程**:通过模拟攻击来测试系统的安全性,分析日志记录,评估现有安全策略。 **样例应用简介*...
- **第1章:一个简单的HelloWorld** - **配置过滤器:** 使用Spring Security提供的过滤器来实现基本的安全控制。 - **使用命名空间:** 通过XML配置文件中的命名空间简化Spring Security的配置过程。 - **完善...
SpringSecurity是Java领域中一款强大的安全框架,主要用于Web应用程序的安全管理。它提供了全面的身份验证、授权、会话管理以及安全相关的功能,可以帮助开发者构建安全的Web应用。在本笔记中,我们将深入探讨Spring...
- 学习 Spring Security 的第一步通常是创建一个简单的 "Hello World" 应用,这通常涉及添加必要的依赖和配置,以便启动基础的安全功能。 3. **单元测试**: - 在安全相关的开发中,单元测试是必不可少的,因为它...
Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架,它是安全领域中Spring生态系统的一部分。Spring Security旨在为Java应用程序提供一个全面的安全解决方案,尤其适用于企业级应用场景。它主要...
SpringSecurity是Java领域中一款强大的安全框架,专为Spring和Spring Boot应用设计,提供全面的安全管理解决方案。在SpringBoot Web开发中,SpringSecurity扮演着核心角色,负责处理身份验证、授权以及访问控制等...
在第一种方法中,Spring Security的示例项目`spring-security-samples-tutorial-3.0.2.RELEASE`提供了硬编码配置的参考,它演示了如何在XML配置文件中定义用户、密码和权限。这种方法适合初学者快速了解Spring ...
1. **SpringSecurity架构**:SpringSecurity的核心架构由多个组件构成,包括过滤器链、认证管理、权限控制等。其中,过滤器链是SpringSecurity处理请求的第一道防线,它会拦截所有HTTP请求并进行安全检查。 2. **...
SpringSecurity 是一个强大的且高度可定制的身份验证和访问控制框架,用于保护基于Java的应用程序。在本示例中,我们将探讨如何使用 SpringSecurity 构建一个基本的认证和授权流程。 首先,Spring Security 的核心...
Spring Security 是一个强大的安全框架,主要用于Java应用的安全管理。它提供了认证、授权和访问控制等功能,使得开发者可以轻松地在应用程序中实现复杂的安全需求。在这个名为 "mysecurity" 的压缩包中,很可能是...