繁体   English   中英

如何在Spring Security 4中禁用UsernamePasswordAuthenticationFilter

[英]How to disable the UsernamePasswordAuthenticationFilter in Spring Security 4

我正在将JSF应用程序从Spring Security 3.2迁移到4.0.1。 此版本将许多默认URL更改,例如将默认登录URL更改为/login

该应用程序具有自己的登录页面(使用JSF AJAX),并且在调用/login时仍会显示,但是对该URL的所有POST请求(以及来自Login-Page的所有AJAX请求)都由UsernamePasswordAuthenticationFilter捕获,并且正在尝试处理身份验证,导致请求再次重定向到loginform。

在查看代码之后,该网址似乎是硬编码的:

public UsernamePasswordAuthenticationFilter() {
    super(new AntPathRequestMatcher("/login", "POST"));
}

因此,我必须完全禁用此过滤器,或者更好的方法是避免创建它。 谁能指出我该怎么做。

将我的登录页面更改为另一个URL是可行的,但不是很好的解决方案。

编辑:我为此在Spring Security中创建了一个Bugticket: https ://jira.spring.io/browse/SEC-2992

编辑2:我发现了另一个解决方法:如果我将表单登录的login-processing-url设置为未使用的内容,则它可以正常工作,但是似乎很hacky。 应该有一种方法可以完全禁用它。 另外,应在《迁移指南》中说明,直到发现这一点,我才花费了数小时。

我将假设您正在尝试升级到Spring Security 4.0.0(最新的可用版本是4.0.1)。

Spring Security 3.x使用spring_security_login作为默认登录URL( source官方文档 )。 可以将其设置为<security:form-login login-page="/login">的自定义值,并将其映射到控制器以呈现自定义页面。

春季安全4.x版已经放弃spring_security_login并切换到login为默认的登录URL( source官方的Spring Security 4.x的迁移指南 )。 因此,URL login现在转到默认的Spring Security基础结构,该基础结构显示默认的自动生成的登录页面。

4.0.0中存在一个错误,由于该错误,在将URL /login手动映射到自定义控制器方法的情况下,仍使用默认基础结构。 此错误已在4.0.1中修复。 请尝试升级到Spring Security 4.0.1,以查看是否可以使用/login作为登录URL。

看来您可以调用setFilterProcessesUrl(String) (或等效地, setRequiresAuthenticationRequestMatcher(RequestMatcher) )来覆盖/login的默认值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM