Spring Security 用户账号注册、创建和管理

Posted

技术标签:

【中文标题】Spring Security 用户账号注册、创建和管理【英文标题】:Spring Security user account registration, creation and management 【发布时间】:2012-01-25 17:48:28 【问题描述】:

我一直在研究使用 Spring Security 对我的 Web 应用程序进行身份验证/授权(这将基于 JDBC)。

但是,在我看来,一个核心组件似乎被遗漏了。如何注册/创建新用户?有开箱即用的 API 吗?

我需要从头开始编写用户注册和管理吗? 我需要做的事情包括: - 注册新用户 - 重置密码 - 向用户发送电子邮件以激活他们的帐户 - 向用户发送电子邮件以重置其帐户。

提前谢谢你。

【问题讨论】:

***.com/questions/23562266/… 【参考方案1】:

据我所知,Spring Security 没有内置对新用户创建和注册的支持。您必须自己管理。但是它确实有电子邮件支持。有关更多信息,请查看here。

【讨论】:

感谢您的信息。但是,您对 API/框架/工具有什么建议可以在 Spring 之外处理用户创建/注册吗?或者你建议我从头开始写一个? 您可以获得一些用 JQuery 构建的好小部件,并将其与 Spring 集成。您也可以基于 openid 登录,但最终没有任何内置功能。您必须将其编码为 . – Aravind A 11 小时前【参考方案2】:

我在我的项目中使用 Spring Security。该框架没有您要求的用于用户创建或注册的 API。为了使 Spring Security 通用且可跨多个框架使用,它只能带您到此为止,然后您才必须编写自定义代码。您无法真正获得有关要使用的框架或工具的更具体的答案,因为此时您将只使用您已经在使用的框架。

如果您已将其设置为使用数据库中的用户和角色,则可以从数据访问层在用户表中创建一条记录或更新该记录中的密码(最好存储为哈希)。正如 Aravind 所说,Spring 确实提供了email support。

如果您真的想了解一种方法:我正在使用 Spring MVC、JSP 和 Hibernate。我在 JSP 中使用 Spring 的表单标签将新的用户表单绑定到 Person 对象,并且我的控制器方法将该 Person 对象传递给我的 Dao 以将其持久化。

控制器方法签名如下...

@RequestMapping(value = "/newUser", method = RequestMethod.POST)
public ModelAndView createNewUser(final @Valid @ModelAttribute Person user,
                                  final BindingResult result,
                                  final SessionStatus status,
                                  final @RequestParam(value = "unencodedPassword", required = true) String password) 
        ...
        user.getRoles().add(new Role(user, Role.APPLICATION_ROLE.ROLE_USER));
        userDao.createNewUser(user);
        ...

我的 PersonDao 会像这样使用 Hibernate 来持久化用户

@Transactional
public void createNewUser(Person user)

    Session session = sessionFactory.getCurrentSession();
    session.save(user);
    session.flush();

【讨论】:

感谢您的信息。但是,您对 API/框架/工具有什么建议可以在 Spring 之外处理用户创建/注册吗?或者你建议我从头开始写一个? 是的,我建议你从头开始写一个。为了让您了解您需要编写多少代码、注册一个新用户,我可能有十几行 JSP、十几行 Spring MVC 控制器和几行 DAO。 Spring Security 可以帮助您完成大部分工作,您应该只需要编写很少的代码即可完成它。 Spring 之外没有用于处理用户创建的 API 的原因是,您只需使用您已经在使用的任何技术,例如 JSP 或 JSF,以及 Hibernate 或 JDBC。【参考方案3】:

看看我的回答here。

“我已经为这个用例实现了一个 JAVA 项目。它是开放的 源代码,基于 Spring-Security。发布版本已开启 Maven-Central,所以你不需要编译它,但是你可以 将其作为 maven 依赖项获取到您的项目中!”

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

【讨论】:

以上是关于Spring Security 用户账号注册、创建和管理的主要内容,如果未能解决你的问题,请参考以下文章

Spring security 个人理解

grails spring security自定义用户注册页面

Grails Spring Security 注册/注册用户

SpringCloud集成Security安全(Eureka注册中心)

Grails - Spring Security 帐户创建

Spring Security用户手动登录会话由管理员创建,无需密码