将验证码与 Spring Security 集成

Posted

技术标签:

【中文标题】将验证码与 Spring Security 集成【英文标题】:Integrating Captcha with Spring Security 【发布时间】:2010-09-18 01:35:14 【问题描述】:

将 SpringSecurity 与 Capcha 集成的合适方法是什么?

我有以下用例: 当用户尝试登录时,如果他登录N次失败,将显示验证码,因此验证将使用三个参数:用户名,密码,验证码。但是 Spring Security 不支持内置的验证码处理。

我刚刚开始考虑实施。并有以下变体:

在 Spring Security 过滤器堆栈中添加单独的安全过滤器, 完全重写 AuthenticationProcessingFilter 以支持一些验证码 使用一些带有拦截验证码逻辑的编程身份验证,然后将用户名和密码传输到 Spring Security

作为 Captcha 实现,我想到了 JCaptcha,但你的想法是什么?

【问题讨论】:

【参考方案1】:

作为使用 JCaptcha 的替代方法,如果您想在您的网站上使用 reCAPTCHA Service,请查看新的 Spring in Practice 书籍(目前处于测试阶段)的免费第 4.4 节 (direct PDF link)。

这向您展示了与 Spring MVC 和 Spring Validation 的集成。由于集成在前端,带有外部 API,因此 Spring Security 并没有真正出现在这里。

我不确定您的用例是什么?您是否希望使用验证码替代身份验证来证明“人性”?

【讨论】:

我编辑了我的问题,以便更清楚地了解情况。我需要同时提交 3 个字段:验证码、用户名和密码。【参考方案2】:

看看这篇文章:Spring Security 3: Integrating reCAPTCHA Service。

这使用两个过滤器来使 reCAPTCHA 集成尽可能无缝且不显眼。这意味着您现有的 Spring Security 实现不会中断。无需触及现有的类

【讨论】:

【参考方案3】:

我通过定义自定义安全过滤器完成了与 reCaptcha 和 Spring Security (Spring Web Flow + JSF) 的集成。也许它不是最优雅的,但效果很好。 你可以看看我的博客 - 不幸的是波兰语,但也许会对你或某人有所帮助......

http://marioosh.net/blog/?p=1087

【讨论】:

【参考方案4】:

Kaptcha 易于使用。

【讨论】:

以上是关于将验证码与 Spring Security 集成的主要内容,如果未能解决你的问题,请参考以下文章

将 Tomcat 上的 Spring Security 和 Waffle 与角色检查集成

集成 Spring Security:身份验证自定义 UserDetailsS​​ervice

Spring Security Active Directory LDAP 身份验证错误

将 Spring Security 与 Facebook 登录集成

Spring Security (4.0.1) 与 AngularJS 的集成。每次用户输入无效凭据时都会弹出基本身份验证

如何将 Spring Security 与我现有的 REST Web 服务集成