【问题标题】:Create Account, Forgot Password and Change Password创建帐户,忘记密码和更改密码
【发布时间】:2014-06-27 01:19:24
【问题描述】:

当开发人员想要保护他的 web 应用程序时,Spring Security 非常棒。

但是,创建帐户呢?和“忘记密码”?大多数登录页面都有这些链接以及用户名和密码字段。 Spring的默认登录页面没有这些链接……在好的情况下,它可以支持“记住我”……

Spring 是否支持创建帐户、忘记密码和更改密码的这些流程? 如果答案是肯定的,请您指点我一些文件吗?

我已经搜索了这个问题,但找不到任何东西。

谢谢!

【问题讨论】:

  • 我认为答案是否定的。由于这些操作不是通用操作,因此它们因应用程序而异。 spring 如何知道您的注册表单中需要哪些字段?或者你想如何恢复密码? (通过电子邮件、短信等)
  • 我明白了;但我想也许有一些通用的东西是可定制和可扩展的(就像所有其他 Spring 项目一样......)
  • 实现起来并不难。创建帐户是一种基本形式。我已经在我的项目中实现了这两个并且没有任何困难。为了恢复密码,我向用户发送了一封带有 uniqueId (java.sun.com/javase/6/docs/api/java/util/UUID.html) 的电子邮件,并且我有一个控制器来检查该 ID,如果它有效(存储在我的 user_request 表中),我将用户转发到一个页面,他将在其中定义一个新密码,因为原始密码已加密。
  • @luizcarlosfx:“实施起来并不难”——但您必须确保处理好所有情况。例如如果用户尝试创建已经存在的帐户会发生什么?如果用户尝试创建已经存在但不活动的帐户会发生什么?密码策略呢? (太长/太短/多少资本等)如何将带有激活链接的电子邮件发送给用户?将收到点击链接并激活帐户的控制器呢?越来越多……有很多代码要写,我的朋友。
  • 我什么都关心,我仍然说这并不难。 Spring 提供了许多很酷的特性,使其变得简单。首先使用休眠验证器来验证你的用户(检查密码大小,用户名大小和任何你想要的),检查用户名是否存在我做ajax请求检查数据库是否已经使用用户名或用户是否被禁用。验证电子邮件与恢复密码请求非常相似。我只是在我的 user_request 表中的数据库中存储了一个请求代码,并且我有专门的控制器来检查这些代码的有效性。

标签: spring authentication registration forgot-password change-password


【解决方案1】:

我认为appfuse 是您想要的工具。这几行来自它的文档:

AppFuse 开箱即用,具有许多应用程序所需的功能,包括:

  • 认证与授权
  • 用户管理
  • 记住我(它会保存您的登录信息,这样您就不会 每次都要登录)
  • 密码提醒
  • 注册和注册
  • SSL 切换
  • 电子邮件
  • 无扩展名 URL 文件上传
  • 通用 CRUD 后端
  • 完整的 Eclipse、IDEA 和 NetBeans 支持
  • 使用 Maven Jetty 插件快速启动且无需部署
  • 可通过 Cargo 和配置文件在多个应用服务器和数据库上进行测试

【讨论】:

    【解决方案2】:

    你完全正确。 AFAIK 没有实现这些流程的“通用”包。前段时间我搜索了很多此类代码,但一无所获。我认为@luizcarlosfx 是对的,每个应用程序都有自己的需求,因此很难编写适合所有需求的通用内容。


    编辑: 我看到了类似“实现起来并不难”的cmets。真的。但是您必须确保处理所有情况。例如,如果用户尝试创建已经存在的帐户会发生什么?如果用户试图创建一个已经存在但不活跃的帐户会发生什么?密码策略呢? (太长/太短/多少资本等)如何将带有激活链接的电子邮件发送给用户?您如何创建此链接?你如何加密它?将收到点击链接并激活帐户的控制器呢?越来越多……


    然而,我向前迈了一步,尝试编写一些可以回答大多数流程的代码 - 注册、忘记密码、更改密码等,以及一些足够安全的东西,以便应用程序能够使用它而不必担心它会被轻易入侵。

    我已经为此用例实现了一个 JAVA 项目。它是开源的,基于 Spring-Security。发布版本位于 Maven-Central 上,因此您无需编译它,但您可以将其作为 maven 依赖项获取到您的项目中!

    <dependency>
        <groupId>com.ohadr</groupId>
        <artifactId>authentication-flows</artifactId>
        <version>1.5.0-RELEASE</version>
    </dependency>
    

    我认为它回答了你的问题......

    对所有事情都有解释(如果缺少某些东西 - 让我知道...)

    您可以find here 一个客户端应用程序代码的示例(即用法)。

    这是main page of the project 加上一个演示和another demo is here(但这是一个应用程序,在升级到版本 1.6.1 后需要使用“nice”域的电子邮件登录 - nice.com。所以你不能真正使用它用于演示;使用第一个示例)。 这是一个使用 auth-flows 的客户端网络应用程序,并带有包含所有解释的 README。

    希望有帮助!

    【讨论】:

    • 看起来不错!凉爽的!但是,所有表单(和 beans.xml)都在 client 端,所以客户端仍然需要添加东西...
    • 谢谢 :-) 当然,每个应用都需要不同的 UI 表单。所以真的没有必要尝试和概括这种形式。但是,我已经记录了这些表单中应该出现的字段。
    • @DirkConradCoetsee 谢谢!你试过了吗?你在你的应用程序中使用它吗?我很好奇...
    • 嗨,我正忙着尝试。努力实现它。我可以就一些细节与您联系吗?它包含了我需要的一切。
    • 当然。您可以在此处发布您的问题,并用authentication-flows 标记它们
    猜你喜欢
    • 2021-06-29
    • 2020-03-15
    • 1970-01-01
    • 2012-07-25
    • 2011-11-29
    • 2017-05-01
    • 2016-02-14
    • 2021-02-18
    相关资源
    最近更新 更多