- 浏览: 299749 次
文章分类
最新评论
-
流年末年:
那四个参数还是没看懂.....能不能解释下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 9722、xml配置,配置内容如下: Xml代码 ... -
spring-security3 配置和使用 (一)(转载)
2011-12-22 06:43 869最近项目中要使用到spring-security,可能研究 ... -
SpringSecurity3.X--一个简单实现(转载)
2011-12-22 06:43 2623作者对springsecurity研究不深,算是个初学者吧,最 ... -
SpringSecurity3.X--验证码(转载)
2011-12-22 06:44 1014一般来说,登录时都会要求用户输入验证码,以防止恶意登录。 可 ... -
SpringSecurity3.X--前台与后台登录认证(转载)
2011-12-23 06:33 3386不过一般我们在管理系统时都会分前台与后台,也就是说,前台与后台 ... -
SpringSecurity3.X--remember-me(转载)
2011-12-22 06:44 1700笔者在SpringSecurity中配置remember-me ... -
《Spring Security3》第六章第七部分翻译(认证事件处理与小结)
2011-12-23 06:34 1268认证事件处理 ... -
《Spring Security3》第六章第六部分翻译(Spring Security基于bean的高级配置)
2011-12-23 06:34 1023Spring Security 基于bean 的高级配 ... -
《Spring Security3》第六章第五部分翻译(手动配置Spring Security设施的bean)(转载)
2011-12-23 06:34 972手动配置Spring Security 设施的be ... -
《Spring Security3》第六章第四部分翻译(异常处理)(转载)
2011-12-23 06:34 1169理解和配置异常处理 ... -
《Spring Security3》第六章第三部分翻译(Session的管理和并发)(转载)
2011-12-24 10:20 4197Session 的管理和并发 ... -
《Spring Security3》第六章第二部分翻译(自定义AuthenticationProvider)(转载)
2011-12-24 10:21 1438实现自定义的 AuthenticationProvide ... -
《Spring Security3》第六章第一部分翻译(自定义安全过滤器)(转载)
2011-12-24 10:21 1057第六章 高级配置和扩展 到目前为止,我 ... -
《Spring Security3》第五章第四部分翻译(方法安全的高级知识和小结)(转载)
2011-12-24 10:22 995方法安全的高级知 ... -
《Spring Security3》第五章第三部分翻译(保护业务层)
2011-12-24 10:22 852保护业务层 到目前为止,在 ... -
《Spring Security3》第五章第二部分翻译下(实现授权精确控制的方法——页面级权限)(转载)
2011-12-25 00:47 997使用控制器逻辑进行有条件渲染内容 ... -
《Spring Security3》第五章第二部分翻译上(实现授权精确控制的方法——页面级权限)(转载)
2011-12-25 00:47 901实现授权精确控制的方法 精确的授权指的是基于用 ... -
《Spring Security3》第五章第一部分翻译(重新思考应用功能和安全) (转载)
2011-12-25 00:47 927第五章 精确的 ... -
《Spring Security3》第四章第四部分翻译(Remember me后台存储和SSL)(转载)
2011-12-25 00:47 1217将 Remember me 功能 ... -
《Spring Security3》第四章第三部分翻译下(密码加salt)(转载)
2011-12-25 00:48 1745你是否愿意在密码上添加点salt ? 如果安 ...
相关推荐
第一部分前言 15 1.入门 16 2.介绍 17 2.1什么是Spring Security? 17 2.2历史 19 2.3版本编号 20 2.4获得Spring安全 21 2.4.1使用Maven 21 Maven仓库 21 Spring框架 22 2.4.2 Gradle 23 Gradle存储库 23 使用Spring...
1)容器启动(MySecurityMetadataSource:loadResourceDefine加载系统资源与权限列表) 2)用户发出请求 3)过滤器拦截(MySecurityFilter:doFilter) 4)取得请求资源所需权限(MySecurityMetadataSource:get...
第1章 Spring简介 1 1.1 实例化Spring IoC容器 1 1.1.1 问题 1 1.1.2 解决方案 1 1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用...
SpringBoot+Mybatis+SpringSecurity+Bootstrap+Layui开发java web轻量级小巧视频网站系统 项目描述 PC端+手机端模式自适应 支持本地资源视频文件上传在线播放,同时支持在线资源链接上传(ed2k、迅雷、等资源)...
第一部分spring的核心 第1章开始spring之旅 1.1spring是什么 1.2开始spring之旅 1.3理解依赖注入 1.3.1依赖注入 1.3.2di应用 1.3.3企业级应用中的依赖注入 1.4应用aop 1.4.1aop介绍 1.4.2aop使用 1.5小结...
第1章 Spring简介 1 1.1 实例化Spring IoC容器 1 1.1.1 问题 1 1.1.2 解决方案 1 1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用...
第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 1.3.3 企业级应用中的依赖注入 1.4 应用AOP 1.4.1 AOP介绍 1.4.2 AOP...
第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 1.3.3 企业级应用中的依赖注入 1.4 应用AOP 1.4.1 AOP介绍 1.4.2 AOP...
第1章 Spring Boot 简介 讲解Spring Boot的项目背景,已经与其他技术框架(比如,Spring、SpringMVC、SpringCloud等)的关系。 简单介绍下Spring Boot 整个生态系统 第2章 开启 Spring Boot 的第一个 Web 项目 ...
第1章 Spring Boot 简介 1-1+_Spring+Boot博客_课程导学 1-2+-Spring+Boot+是什么 第2章 开启 Spring Boot 的第一个 Web 项目 2-1 -初始化第一个Web项目 2-2 -用Gradle编译项目 2-3 -探索项目 第3章 一个Hello...
我完全重写了我的第一个版本。 现在,该解决方案基于的代码库。 我尝试提取JWT身份验证所需的最少配置和类,并进行了一些更改。要求该演示是使用Maven 3.6.x和Java 11构建的。用法只需使用Spring Boot maven插件( ...
第1 章 Spring 基础 2 1.1 Spring 概述 2 1.1.1 Spring 的简史 2 1.1.2 Spring 概述 3 1.2 Spring 项目快速搭建 5 1.2.1 Maven 简介 6 1.2.2 Maven 安装 6 1.2.3 Maven 的pom.xml 7 1.2.4 Spring 项目的搭建 9 1.3 ...
SpringSecurity0包含两部分代码:首先是博客springboot + mybatis + SpringSecurity实现用户角色数据库管理地址: : 第二个博客springBoot + springSecurity验证密码MD5加密地址: : springboot-SpringSecurity1...
本项目示例基于spring boot 最新版本(2.1.9)实现,Spring Boot、Spring Cloud 学习示例,将持续更新…… 在基于Spring Boot、Spring Cloud 分布微服务开发过程中,根据实际项目环境,需要选择、集成符合项目...
1、基于Spring Boot的社区论坛项目源码+数据库+项目说明.zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习...
第1 章 Spring 基础 2 1.1 Spring 概述 2 1.1.1 Spring 的简史 2 1.1.2 Spring 概述 3 1.2 Spring 项目快速搭建 5 1.2.1 Maven 简介 6 1.2.2 Maven 安装 6 1.2.3 Maven 的pom.xml 7 1.2.4 Spring 项目的搭建 9 1.3 ...
第1章 Spring Boot 简介 讲解Spring Boot的项目背景,已经与其他技术框架(比如,Spring、SpringMVC、SpringCloud等)的关系。简单介绍下Spring Boot 整个生态系统 第2章 开启 Spring Boot 的第一个 Web 项目 ...
JavaEE开发的颠覆者 Spring Boot实战,多个地址免费下载,第一部分 点睛Spring 4.x 第1 章 Spring 基础 ..........................................2 1.1 Spring 概述 ................................................
spring boot 项目代码,直接启动,第一部分 点睛Spring 4.x 第1 章 Spring 基础 ..........................................2 1.1 Spring 概述 ............................................. 2 1.2 Spring 项目...
3. 订单管理:实现订单的创建、编辑、取消、查询功能,包括订单详情、订单状态、订单金额等信息。 4. 库存管理:实现库存的增加、减少、查询功能,保持库存与实际销售一致。 5. 销售统计:实现对销售数据的统计和...