读书笔记《spring-security-3-x-cookbook》第 8 章使用 ORM 和 NoSQL DB 的 Spring Security
第 8 章使用 ORM 和 NoSQL DB 的 Spring Security
在本章中,我们将介绍:
使用 @preAuthorize 注释的带有 Hibernate 的 Spring Security
Spring Security with Hibernate 使用带有 @preAuthorize 注释的身份验证提供程序
Spring Security with Hibernate 使用用户详细信息服务和 Derby 数据库
MongoDB 的 Spring 安全性
介绍
Spring 框架被设计成可以轻松地与类似 Mybatis、Hibernate 等的 ORM 框架集成。 Hibernate 教程有很好的文档记录,可以在 JBoss 网站上找到。 Hibernate 为我们提供了数据持久性。
在本章中,我们将了解如何将 Spring Security 与 ORM 框架集成。我们还将 Spring Security 与最新的 MongoDB 集成。
我们将首先使用 Hibernate 和 Spring 进行一些基本设置。由于本章包含与数据库相关的内容,我们需要为本章中使用的所有配方创建一个数据库。我正在使用带有 Maven 的 NetBeans IDE。我觉得 NetBeans IDE 与其他 IDE 相比非常先进。
设置 Spring Hibernate 应用程序
我们将 创建一个简单的恐怖电影应用程序,它会显示带有一些CRUD (创建、读取、更新和删除)功能。设置 Spring Hibernate 应用程序涉及以下步骤:
在 Derby 中创建一个
horrormoviedb
数据库。您可以使用 NetBeans。点击 Services 标签,您将看到 Databases。
右键点击JavaDB查看创建数据库... 选项。选择 创建数据库... 选项。
在数据库
horrormovie
中创建一个表。在表中创建 列并将这些列命名为
horrormovie_id
,horrormovie_name
和horrormovie_director
。创建一个 maven 项目,使用 Spring、Hibernate、Derby 和 Spring Security 依赖项更新 POM,并在 NetBeans IDE 中打开它。
使用
@table
和@column
注释创建实体类。创建一个
DAO
和DAOImpl
类来处理休眠操作。创建一个
Service
和ServiceImpl
类,以充当DAO
和用户界面。创建一个控制器来处理 UI 部分。
使用 @preAuthorize 注释的带有 Hibernate 的 Spring Security
在当前的 演示中,我们使用了两个不同的 数据库。身份验证管理器配置有 tenant1DataSource
,它连接到保存用户和角色信息的 Derby 数据库。使用此数据源,我们将进行身份验证和授权。
为了显示 horrormovie
列表,我们在 Derby 中创建了另一个数据源,它与 Hibernate 配置文件一起使用。
在 DAOImpl
类方法中,我们使用 @preAuthorize
注释。
让我们使用 GlassFish 应用程序服务器来运行应用程序。
准备好
编辑
application-security.xml
。编辑
horrormovie-servlet.xml
。在
DAOImpl
中使用@preAuthorize
注解。 Spring Security 在调用方法时授权用户。
怎么做...
以下步骤将使用 Hibernate 应用程序进行身份验证和授权:
使用数据源详细信息和 Bean 信息编辑
application-security.xml
文件。使用 horrormovie-servlet.xml 文件 > 控制器信息。
它使用 JDBC 进行身份验证服务。
执行
addHorrorMovie
方法时使用注解 Spring 检查 凭据的安全 上下文对象并进行身份验证和授权;这在以下代码中给出:一些SQL命令如下:
这个怎么运作...
在此示例中,我们创建了一个Hibernate应用程序并使用JDBC服务进行身份验证. Spring 框架中断访问应用程序的请求并请求用户输入凭据。使用 application-security.xml
文件中提供的 JDBC 详细信息对凭据进行身份验证。
成功后,用户将被重定向到显示电影列表的应用程序。
现在访问以下 URL:
http://localhost:8080/login
使用 JDBC 服务进行认证和授权以及在方法上使用注解应用 Spring Security 的截图如下:
该示例的工作流程显示在以下屏幕截图中:
也可以看看
Spring Security with Hibernate using authentication provider配方
Spring Security with Hibernate 使用用户详细信息服务和 Derby 数据库 配方
Spring Security with MongoDB 秘诀
Spring Security with Hibernate 使用带有 @preAuthorize 注释的身份验证提供程序
我们 正在使用示例horrormovie
应用程序< /a> 使用自定义身份验证提供程序和 @preAuthorize
注释来演示带有 Hibernate 的 Spring Security。
在这个秘籍中,我们将创建自己的自定义身份验证提供程序并实现接口身份验证提供程序。我们将在 controller
方法上应用注解,而不是 hibernate 的
方法。
准备好
创建一个实现
AuthenticationProvider
接口的新类,并将 Bean 定义添加到application-security.xml
文件编辑
application-security.xml
文件在控制器中使用
@preAuthorize
注释
怎么做...
以下步骤用于使用 AuthenticationProvider
接口实现 Spring Security:
这个怎么运作...
现在访问以下 URL:
http://localhost:8080/login
中断请求后,Spring Security 调用 MyCustomAuthenticationProvider
,它具有用于身份验证的覆盖的 authenticate 方法以及用户信息。用户凭据通过 APP_Users
映射中的凭据进行身份验证和授权,成功的身份验证和授权用户将被重定向到 中配置的成功 URL spring-security.xml
文件。
使用自定义身份验证提供程序进行身份验证和授权以及在控制器中的方法上使用注释应用 Spring Security 的屏幕截图如下:
也可以看看
Spring Security with Hibernate using @preAuthorize annotation 配方
Spring Security with Hibernate 使用带有 @preAuthorize 注释的自定义身份验证提供程序 配方
Spring Security with Hibernate 使用用户详细信息服务和 Derby 数据库 配方
Spring Security with MongoDB 秘诀
Spring Security with Hibernate 使用 UserDetailsService 和 Derby 数据库
到目前为止,我们已经看到了 Hibernate 和 Spring 与 各种身份验证提供程序的安全性。在本节中,我们将使用 Hibernate 从数据库中检索用户和权限。
为此,我们将实现 UserDetailsService
接口并在接口中实现一个方法。首先,我们需要为用户和角色创建实体类。
我们还 将 @preAuthorize
注解移至 controller
类。
准备好
创建一个实现
UserDetailsService
接口的新类,并将 Bean 定义添加到application-security.xml
文件编辑
application-security.xml
文件在控制器中使用
@preAuthorize
注释在恐怖数据库中添加表
USERS
和USER_ROLE
插入角色
ROLE_EDITOR
和名为ravi
和ravi123
的用户
怎么做...
以下步骤用于通过实现与 Hibernate 方法交互的 UserDetailsService
接口将 Spring Security 身份验证与 Hibernate 集成:
创建一个实现
UserDetailsService
接口的类MyUserDetailsService
。编辑
application-security.xml
< /a> 文件。-
这个怎么运作...
现在访问以下 URL:
http://localhost:8080/login
首先,我们使用 UserDetailsService
和 Hibernate 进行身份验证和授权。 UserDetailsService
是一个 Spring Security 接口,由 MyUserDetailsService
class< /a>。此类在 application-security.xml
文件中配置,以便 Spring Security 调用此实现类以使用 Hibernate 加载用户详细信息。 UsersDAO.findByUserName(userName)
是调用Hibernate根据传入的用户名获取用户信息的方法。
使用 注解将 Spring Security 应用到 控制器后,我们应该可以登录了使用用户名和密码(ravi 和 ravi123)。 <password-encoder hash="plaintext" />
是 Spring Security 支持的哈希算法。成功验证后,用户将被重定向到授权页面。
以下屏幕截图演示了应用程序的工作流程:
也可以看看
Spring Security with Hibernate using @preAuthorize annotation 配方
Spring Security with Hibernate 使用带有 @preAuthorize 注释的自定义身份验证提供程序 配方
Spring Security with Hibernate 使用用户详细信息服务和 Derby 数据库 配方
Spring Security with MongoDB 秘诀
MongoDB 的 Spring 安全性
在这个 部分 让我们看看 Spring Security 如何与 MongoDB 一起工作。 MongoDB 是一种流行的 NOSQL 数据库。它是一个基于文档的数据库。 MongoDB 是用流行的 C++ 数据库编写的,这使其成为一个面向对象的基于文档的数据库。在 MongoDB 中,查询也是基于文档的,它还提供使用 JSON 样式的索引来存储和检索数据。 可用的最新 Spring 版本是 3.2 版已包含在 POC 中。
准备好
怎么做...
以下步骤使用 Mongo 和 Spring Security 通过实现 UserDetailsService
接口对用户进行身份验证和授权:
这个怎么运作...
首先,我们使用 MongoDetailsService
和 Spring 数据进行身份验证和授权。 MongoDetailsService
是UserDetailsService
的实现,getUserDetail
(string username)调用springdata
类根据传递的用户名从 Mongo 数据库获取用户凭据。如果数据基于用户名存在,则表示身份验证成功。然后我们使用注解在控制器方法上应用 Spring Security。
现在我们应该能够使用用户名和密码(ravi 和 123456)登录。
现在访问以下 URL:
http://localhost:8080/login
以下屏幕截图演示了该工作流程:
也可以看看
Spring Security with Hibernate using @preAuthorize annotation 配方
Spring Security with Hibernate 使用带有 @preAuthorize 注释的自定义身份验证提供程序 配方
Spring Security with Hibernate 使用用户详细信息服务和 Derby 数据库 配方
Spring Security with MongoDB 秘诀