Spring安全认证 – 有关文档的问题

我在Spring Security JavaDoc中查看此页面:

http://static.springsource.org/spring-security/site/docs/3.1.x/apidocs/org/springframework/security/web/authentication/AbstractAuthenticationProcessingFilter.html#attemptAuthentication(javax.servlet.http.HttpServletRequest,%20javax .servlet.http.HttpServletResponse )

这条线是什么意思?

返回null,表示身份validation过程仍在进行中。 在返回之前,实现应该执行完成该过程所需的任何其他工作。

我正在开发一个允许用户登录并收集其他数据的表单。 我不想使用默认的UsernamePasswordAuthenticationFilter,因为我将丢失表单中填写的所有其他数据。

从登录表单捕获更多数据的常用方法是使用自定义WebAuthenticationDetails。

有关如何执行此操作的信息,请参阅此主题 。

这条线是什么意思?

它通常意味着如果从覆盖的attemptAuthentication()方法返回null,则filter链将被破坏,并且在UsernamePasswordAuthenticationFilter之后不会调用其他filter。 之后,您负责完成身份validation过程,而不是链中的其他filter。

您可以查看AbstractAuthenticationProcessingFilter#doFilter()方法源代码行:201。

换句话说,返回null将花费您额外的工作。

如果要仅覆盖attemptAuthentication() ,则应在不成功的身份AuthenticationException上抛出AuthenticationException

如果要从attemptAuthentication()返回null ,还应该重写doFilter()并自己处理null结果。