Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SpringSecurity4中禁用UsernamePasswordAuthenticationFilter_Spring_Jsf_Spring Security - Fatal编程技术网

如何在SpringSecurity4中禁用UsernamePasswordAuthenticationFilter

如何在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

我正在将一个JSF应用程序从SpringSecurity3.2迁移到4.0.1。此版本更改了许多默认url,例如将默认登录url更改为
/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(
源代码
:)。因此,URL
login
现在转到默认的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,以便他们在下一个计划的版本中进行调查和修复,因为所描述的行为肯定是意外的。