这个问题可能看起来是重复的,但以下答案都没有解释何时使用:
`http
.authorizeRequests()
.antMatchers("/h2-console/**", "/user/register/**").permitAll()`
和
`web
.ignoring()
.antMatchers("/h2-console/**", "/user/register/**")`
- HttpSecurity, WebSecurity and AuthenticationManagerBuilder
- Spring 安全性中的 Web 忽略和 Http 允许之间的区别?
通过StackOverflow和几篇文章,我了解到:
configure(HttpSecurity(允许在资源级别配置基于Web的安全性。
配置(网络安全(用于影响全局安全性的配置设置。使用此选项,Spring 安全过滤器链中完全忽略 URL。
当我使用permitAll()
它仅在禁用csrf:http.csrf().disable()
的情况下才有效,因为 Spring 安全过滤器链仍处于活动状态。
但是对于web.ignoring()
URL被完全忽略。
仍然有很多文章使用http.permitAll()
来/login
或/register
像这样和这个
所以我想明白,
为什么我们甚至要对/login
和/register
等非身份验证 URL 使用http.permitAll()
?
为什么我们不能将web.ignoring()
用于/login
和/register
?
为什么web.ignoring()
通常用于仅提供静态内容,如css
和webjars
等,而不是/login
和/register
?
正如@M. Deinum
指出的那样,我正在总结答案,并且我已经在 PR 中更新了相同的文档。
configure(WebSecurity web)
此方法中使用的端点忽略 spring 安全筛选器, headers, CSRF etc. 参见 HeadersConfigurer, CsrfConfigurer。相反,如果 您希望保护公共终结点免受常见漏洞的影响, 然后查看
configure(HttpSecurity)
和HttpSecurity#authorizeRequests
配置方法。
configure(HttpSecurity http)
需要防御常见漏洞的公共终结点 可以在此处指定。请参阅
HttpSecurity#authorizeRequests
和 有关更多详细信息,permitAll()
授权规则。