读书笔记《spring-security-3-x-cookbook》第 11 章。更多关于 Spring Security 的信息
第 11 章。更多关于 Spring Security 的信息
在本章中,我们将介绍:
具有多个身份验证提供程序的 Spring Security
具有多个输入身份验证的 Spring Security
Spring Security 与验证码集成
带有 JAAS 的 Spring 安全性
介绍
在本章中,我们将看到更多 Spring Security 的示例。让我们看看如何将 Spring Security 与多个身份验证提供程序集成。我们还将看到一个使用带有多个输入的 Spring 进行身份验证的示例。
具有多个身份验证提供程序的 Spring Security
Spring Security 提供了一个选项 来添加许多身份验证提供程序。过滤器链检查每个身份验证提供程序,直到它成功通过身份验证。
在本节中,让我们看看如何配置多个身份验证提供程序以及 Spring 如何使用多个身份验证提供程序进行身份验证。
例如,我们正在使用 horrormovie
应用程序,其中身份验证和授权由带有数据库的 Spring Security 处理。
准备好
创建一个 Maven 网络项目
添加
spring-security
依赖添加spring-core相关依赖
在
Web.xml
文件中配置 Spring 上下文监听器创建
AddHorroMovieController.java
控制器,添加增删查列表的请求映射方法使用另一个身份验证提供程序编辑
application-security.xml
文件
这个怎么运作...
在 GlassFish 应用服务器上部署应用程序;访问以下 URL:http://localhost:8080/list
并使用用户名/密码登录 (Vikash
/Vikash123
)。
这是在 derby 数据库中创建的具有访问权限的用户 (ROLE_EDITOR
)。
然后注销并再次使用用户名 shami
和密码 shami123
登录。此处, 用户由两个身份验证提供程序按顺序进行身份验证。
也可以看看
具有多个输入身份验证的 Spring Security 配方
Spring Security with Captcha integration 秘诀
Spring Security with JAAS 秘诀
具有多个输入身份验证的 Spring Security
在本部分,我们将演示多个输入认证。这也称为两因素身份验证。到目前为止,在我们所有的示例中,我们都根据用户名和密码进行身份验证。在此示例中,我们将提供另一个电话号码字段以及用户名。它是具有 hibernate 和 derby 数据库的相同 horrormovie
应用程序。
准备好
创建一个自定义过滤器来处理新的登录表单
在
Springsecurity.xml
文件中配置自定义过滤器更新
UserDetailsService
实现类来处理额外的输入在数据库中添加一个名为
MOBILE_NO
的额外列更新
login.jsp
文件以将MOBILE_NO
作为输入
怎么做...
这个怎么运作...
访问以下 URL:http://localhost:8080/SpringSecurity_MultipleInputAuth/login
用户不仅通过 用户名和密码进行身份验证,如所有书中用到的应用,还带有手机号参数。
当用户在登录页面提交信息并点击 SubmitQuery 时,用户名和手机号码会被一个分隔符连接起来,Spring Security 将调用MyUserDetails
类,它将再次拆分参数并根据用户使用 hibernate 提供的输入对用户进行身份验证。
成功验证后,用户将被重定向到授权页面。
也可以看看
具有多个身份验证提供程序的 Spring Security 配方
Spring Security with Captcha integration 秘诀
Spring Security with JAAS 秘诀
Spring Security 与验证码集成
让我们演示 Spring Security 与 Captcha 的集成。为此,我们下载了 Kaptcha.jar
Captcha 提供程序。我们需要将 jar 文件安装到 maven 本地存储库中才能使应用程序正常工作。
该示例是上一个秘籍的扩展,其中一个额外的输入,手机号码,被 Spring Security 考虑用于授权和身份验证。在此示例中,我们将从用户那里获取用户名和密码的代码以及验证码。用户名根据数据库进行身份验证,并且还将请求的验证码和用户输入的验证码进行比较。
当所有条件都匹配时,则称用户已通过身份验证,否则身份验证失败。
准备好
将
Kaptcha
servlet 添加到Web.xml
文件在
Springsecurity.xml
文件中配置自定义过滤器更新
UserDetailsService
实现类以处理Kaptcha
更新
login.jsp
文件以将Kaptcha
作为输入扩展
UsernamePasswordAuthenticationFilter
怎么做...
以下是将 Spring Security 与 Captcha 集成的步骤:
这个怎么运作...
访问以下网址:
http://localhost:8080/SpringSecurity_MultipleInputAuth/login
Kaptcha
servlet 在浏览器上为用户显示不同的图表。
用户输入的值和 Kaptcha
生成的值在 UsersDAOImpl.java
类中与 用户名
来自数据库的字段。当全部条件匹配时,即用户输入的Kaptcha
应与浏览器显示的Kaptcha
和用户名一致应该存在于数据库中,则用户 是 说是经过身份验证。用户被重定向到经过身份验证和授权的页面。
也可以看看
具有多个身份验证提供程序的 Spring Security 配方
具有多个输入身份验证的 Spring Security 配方
Spring Security with JAAS 秘诀
带有 JAAS 的 Spring 安全性
在 第一章中,基本安全,我们已经演示了如何在JBOSS 中使用JAAS 配置进行身份验证和授权。 Spring Security 还为实现基于 JAAS 的身份验证提供了全面支持。我们需要将 DefaultJaasAuthenticationProvider
配置为身份验证提供程序。在本节中,我们将演示 Spring Security 与 JAAS 的集成。
让我们看看 Spring Security API 提供的一些基于 JAAS 的类和接口:
org.springframework.security.authentication.jaas
AbstractJaasAuthenticationProvider
AuthorityGranter
DefaultJaasAuthenticationProvider
DefaultLoginExceptionResolver
JaasAuthenticationCallbackHandler
JaasAuthenticationToken
JaasGrantedAuthority
JaasNameCallbackHandler
LoginExceptionResolver
SecurityContextLoginModule
准备好
怎么做...
以下是使用 Spring Security 实现 JAAS 的步骤:
使用
AuthorityGranterImpl
类实现AuthorityGranter
类。实现
LoginModule
类,其中 在javax.security.auth.spi
包中可用,使用LoginModuleImpl
类。-
这个怎么运作...
访问 URL:http://localhost:8080/SpringSecurity_Jaas/
使用以下凭据登录:publisher
/publisher123
和 editor
/editor123
。
身份验证由 DefaultJaasAuthenticationProvider
处理。用户信息和认证由InMemoryConfiguration
处理,这意味着JAAS的LoginModule
类使用
回调处理程序。认证成功后,用户被重定向到授权页面。以下屏幕截图显示了应用程序的工作流程:
也可以看看
具有多个身份验证提供程序的 Spring Security 配方
具有多个输入身份验证的 Spring Security 配方
Spring Security with JAAS 秘诀