使用 spring 3.0 进行用户身份验证
Posted
技术标签:
【中文标题】使用 spring 3.0 进行用户身份验证【英文标题】:User Authentication with spring 3.0 【发布时间】:2013-03-09 07:52:26 【问题描述】:我尝试在 Google 中搜索,但找不到任何好的示例,其中使用数据库检查用户名和密码以进行身份验证。
用更简单的话来说,我如何使用 Spring 和 Hibernate 而不是 SPRING SECURITY 创建一个简单的登录表单,其中使用数据库检查凭据。
请帮我创建一个只有 Spring 3.0 而没有 Spring Security 3.0 的简单登录表单。谢谢。
【问题讨论】:
谁能想出一个简单的例子,我可以看到流程是如何进行的? 【参考方案1】:将登录表单发布到以用户名和密码作为参数的 Spring Controller 的最简单方法。
在控制器中,您可以执行任何您想要验证用户名和密码的操作。最好是委托给一些负责处理它的服务层。
如果验证成功,那么你想做什么?可能会被重定向到首页。
现在主页渲染应该知道用户已经通过身份验证。这就是 Spring Security 提供帮助的地方。
但是您也可以通过编写一个 Servlet 过滤器来实现,在该过滤器中,您可以通过检查 http 会话来检查用户是否已通过身份验证。当然,成功登录后,您需要将其存储在会话中,然后过滤器才能使用它。
还有许多其他方法可以实现相同的目标,具体取决于您的要求,以及需要哪种安全控制。
【讨论】:
【参考方案2】:您的解决方案有两个部分,其中一个涉及 Spring,另一个是您的代码:
// DAO returns null if no such username appears in the table.
String password = userDao.findPassword(username);
boolean isValidUser = (!password.equals(null));
// Write the code to implement behavior for valid and invalid users.
如果您可以对密码进行数据库 SELECT,则可以在没有 Spring Security 的情况下进行 Spring 身份验证。
您可能需要将该逻辑置于方法调用之前编织的方面。
您可能希望在会话中缓存该结果并在超过超时时使其无效。
【讨论】:
以上是关于使用 spring 3.0 进行用户身份验证的主要内容,如果未能解决你的问题,请参考以下文章
如何在自定义 Spring security 3.0 身份验证中正确处理异常?
如何在 Spring 安全性中同时使用数据库和 LDAP 身份验证?
Spring Security 3.0 - 自定义基本 http 身份验证对话框