HttpSecurity 允许所有和 WebSecurity 忽略非身份验证 URL 的功能?



这个问题可能看起来是重复的,但以下答案都没有解释何时使用:

`http
.authorizeRequests()
.antMatchers("/h2-console/**", "/user/register/**").permitAll()` 

`web
.ignoring()
.antMatchers("/h2-console/**", "/user/register/**")`
  1. HttpSecurity, WebSecurity and AuthenticationManagerBuilder
  2. Spring 安全性中的 Web 忽略和 Http 允许之间的区别?

通过StackOverflow和几篇文章,我了解到:

configure(HttpSecurity(允许在资源级别配置基于Web的安全性。

配置(网络安全(用于影响全局安全性的配置设置。使用此选项,Spring 安全过滤器链中完全忽略 URL。

当我使用permitAll()它仅在禁用csrfhttp.csrf().disable()的情况下才有效,因为 Spring 安全过滤器链仍处于活动状态。

但是对于web.ignoring()URL被完全忽略。

仍然有很多文章使用http.permitAll()/login/register像这样和这个

所以我想明白,

为什么我们甚至要对/login/register等非身份验证 URL 使用http.permitAll()

为什么我们不能将web.ignoring()用于/login/register

为什么web.ignoring()通常用于仅提供静态内容,如csswebjars等,而不是/login/register

正如@M. Deinum指出的那样,我正在总结答案,并且我已经在 PR 中更新了相同的文档。

configure(WebSecurity web)

此方法中使用的端点忽略 spring 安全筛选器, headers, CSRF etc. 参见 HeadersConfigurer, CsrfConfigurer。相反,如果 您希望保护公共终结点免受常见漏洞的影响, 然后查看configure(HttpSecurity)HttpSecurity#authorizeRequests配置方法。

configure(HttpSecurity http)

需要防御常见漏洞的公共终结点 可以在此处指定。请参阅HttpSecurity#authorizeRequests和 有关更多详细信息,permitAll()授权规则。

最新更新