如何使用Spring Security / Spring MVC处理表单登录

简单的问题,我只需要一个指向正确方向的指针:

我有一个简单的Spring MVC / Spring Security webapp。 最初我设置了Spring Security,以便默认登录页面正确显示和validation(我使用DaoAuthenticationProvider实现了UserDetailsService来执行此操作)。

下一步:使用我的登录页面替换默认的spring登录页面并发布凭据。

但是我如何处理提交的登录凭据? 我假设我将表单发布到控制器,validation凭据,但我不清楚在此之后正确的步骤是什么。 例如:

  • 我在调用AuthenticationManager的方法吗?
  • 我需要为此定义一个bean吗?
  • 我需要像AuthenticationEntryPoint那样实现一个接口/服务吗?

我已经完成了3次文档,并没有完全遵循它们。 我知道这很简单,所以我只需要听听过程应该如何流动。

Spring Security 参考文档概述了Web应用程序中5.4身份validation的基本处理流程。 有点#6:

接下来,服务器将决定所呈现的凭证是否有效。 如果它们有效,则下一步将会发生。 如果它们无效,通常会要求您的浏览器再次尝试(因此您将返回上面的第二步)。

Spring Security具有不同的类,负责上述大多数步骤。 主要参与者(按照它们使用的顺序)是ExceptionTranslationFilter,AuthenticationEntryPoint和“ 认证机制 ”,它负责调用我们在上一节中看到的AuthenticationManager。

我必须承认,这里的文档有点令人困惑所以我会给你一些指针 – 这里提到的“ 身份validation机制 ”就是你所追求的东西,它负责处理浏览器发送的凭据。

由于将凭证附加到HTTP请求的细节在不同的身份validation方法(表单数据与普通标头与摘要标头)之间差异很大,因此没有通用的“ 身份validation机制 ” – 相反,每个方法都实现了自己的机制,在基于Web的身份validation的情况下,它通常是您必须在web.xml配置的特殊filter

在您的情况下,您很可能对UsernamePasswordAuthenticationFilter感兴趣 – 这用于处理基于表单的基本登录信息 。 您的自定义登录表单和filter之间的合同是URL(表单已发布)+用户名和密码字段名称:

登录表单只包含j_username和j_password输入字段,并发布到filter监视的URL(默认情况下为/ j_spring_security_check)。

我会为将来阅读本文的人添加澄清答案:

当您在spring security中定义标记时,它将为您处理登录,我将详细介绍它的工作原理(希望它在文档中有详细说明):

     

登录页面登录页面的URL。 你应该有一个服务于这个页面的控制器(或静态HTML页面),这是你漂亮的登录表单。

login-processing-url是表单登录组件处理的URL。 就像表单登录组件为此页面实现了自己的控制器一样。 您应该将表单发布到此页面。 您还需要知道命名您的用户名/密码参数“j_username”和“j_login”

除此之外,以及上面其他相当明显的选项,您应该实现UserDetailsService – 即创建一个类并实现接口UserDetailsService ,该接口获取并返回给定用户名的UserDetails对象(用户名/密码) -并为UserDetails对象提供其余的安全配置:

       

我们正在谈论同样的问题, 这是我的方法让我们看看人们会说些什么。

请参阅由limc发布的post,以响应Ritesh在配置Spring Security 3.x时的答案, 以获得多个入口点查看标题为以下部分的部分:

更新01-29-2011 – @ Ritesh的技术
更新 – @ Ritesh技术的解决方案

它是一个简洁,先进的好例子,说明如何在Spring Security中自定义登录过程

如果您正在使用JDBC可访问数据库,则可以使用以下身份validation提供程序,并避免创建自定义数据库。 它减少了9行XML所需的代码:

    

然后,您可以按如下方式设置dataSource

       

看看这篇文章: http : //codehustler.org/blog/spring-security-tutorial-form-login/它涵盖了您需要了解的有关自定义Spring Security表单登录的所有信息。

     

login-page是登录表单URL login-processing-url是提交登录表单的URL。 Spring会在security.xml文件中自行调用您映射的身份validation管理器。

处理

  1. 您需要编写一个实现org.springframework.security.authentication.AuthenticationProvider的类,并使用overriden方法validation身份validation(身份validation身份validation)
  2. 使用重写方法扩展org.springframework.security.core.userdetails.UserDetailsS​​ervice的第二个类loadUserByUsername(String username)
  3. 第二个类窗体,您可以在其中调用DAO并使用数据库获取用户名和密码来validation用户。
  4. 在身份validation身份validation(身份validation身份validation)中,您将比较密码和返回成功失败。