如何在SpringSecurity4中禁用UsernamePasswordAuthenticationFilter
我正在将一个JSF应用程序从SpringSecurity3.2迁移到4.0.1。此版本更改了许多默认url,例如将默认登录url更改为如何在SpringSecurity4中禁用UsernamePasswordAuthenticationFilter,spring,jsf,spring-security,Spring,Jsf,Spring Security,我正在将一个JSF应用程序从SpringSecurity3.2迁移到4.0.1。此版本更改了许多默认url,例如将默认登录url更改为/login 应用程序有自己的登录页面(使用JSF AJAX),调用/login时仍会显示该页面,但对该URL的所有POST请求(以及来自登录页面的所有AJAX请求)都被用户名密码验证过滤器捕获,该过滤器正在尝试处理身份验证,导致请求再次重定向到loginform 查看代码后,此url似乎是硬编码的: public UsernamePasswordAuthenti
/login
应用程序有自己的登录页面(使用JSF AJAX),调用/login
时仍会显示该页面,但对该URL的所有POST请求(以及来自登录页面的所有AJAX请求)都被用户名密码验证过滤器捕获,该过滤器正在尝试处理身份验证,导致请求再次重定向到loginform
查看代码后,此url似乎是硬编码的:
public UsernamePasswordAuthenticationFilter() {
super(new AntPathRequestMatcher("/login", "POST"));
}
所以我必须完全禁用这个过滤器,或者更好,避免它的创建。有人能告诉我怎么做吗
将我的登录页面更改为另一个url是可行的,但不是一个好的解决方案
编辑:我在Spring Security中为此创建了一个错误通知单:
编辑2:我发现了另一个解决方法:如果我将表单登录的登录处理url设置为未使用的内容,它可以工作,但看起来非常粗糙。应该有办法完全禁用它。另外,应该在迁移指南中说明,我花了几个小时才找到它。看起来您可以调用setFilterProcessURL(字符串)
(或者,等效地,setRequireAuthenticationRequestMatcher(RequestMatcher)
)要覆盖默认的/login
,我假设您正在尝试升级到Spring Security 4.0.0(最新可用版本为4.0.1)
Spring Security 3.x使用Spring\u Security\u login
作为默认登录URL(source
:)。这可以设置为自定义值,如
,并映射到控制器以呈现自定义页面
Spring Security 4.x已放弃Spring\u Security\u登录
,并切换到登录
作为默认登录URL(源代码
:)。因此,URLlogin
现在转到默认的Spring安全基础结构,它显示默认的、自动生成的登录页面
因此,在URL/login
手动映射到自定义控制器方法的情况下,仍然使用默认基础结构。此错误已在4.0.1中修复。请尝试升级到SpringSecurity4.0.1,看看是否可以使用/login
作为登录URL。能否提供更多的上下文或代码示例?您是否研究过要禁用的调用此函数的原因?您正在尝试升级到-4.0.0或4.0.1的Spring安全版本?我已编辑了此问题以显示我正在升级到4.0.1。我在代码中没有做什么特别的事情,你到底想看什么?谢谢你的回答,我已经找到了那个bug。但我正在升级到4.0.1。。。我的自定义登录页面已经显示出来了,只是对这个URL的所有POST请求都被过滤器打断了。我尝试了Spring Security 4.0.1的一个示例,但没有遇到您描述的任何问题。由于您面临POST的问题,最好向Spring安全团队提出另一个bug,以便他们在下一个计划的版本中进行调查和修复,因为所描述的行为肯定是意外的。