HttpSecurity PermitAll 和 WebSecurity 忽略未验证 URL 的功能?

Moh*_*eem 5 java spring spring-mvc spring-security spring-boot

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

`http
   .authorizeRequests()
   .antMatchers("/h2-console/**", "/user/register/**").permitAll()` 
Run Code Online (Sandbox Code Playgroud)

`web
   .ignoring()
   .antMatchers("/h2-console/**", "/user/register/**")`
Run Code Online (Sandbox Code Playgroud)
  1. HttpSecurity、WebSecurity 和 AuthenticationManagerBuilder
  2. Spring Security 中 Web 忽略和 Http 允许之间的区别?

通过浏览 StackOverflow 的答案和几篇文章,我了解到:

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

configure(WebSecurity)用于影响全局安全性的配置设置。使用这个 URL 会被 Spring Security 过滤器链完全忽略。

当我使用它时permitAll(),它仅在我禁用了csrf时才有效:http.csrf().disable()因为 Spring Security 过滤器链仍然处于活动状态。

web.ignoring()URL 则被完全忽略。

还有很多文章使用http.permitAll()for/login/registerlike这样的一个这个

所以我想明白,

为什么我们应该使用http.permitAll()/login和 这样的未授权 URL /register

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

为什么 web.ignoring()通常仅用于提供静态内容,例如cssandwebjars等,而不与/loginand一起使用/register

Pat*_*mil 3

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

configure(WebSecurity web)

此方法中使用的端点会忽略 spring security 过滤器、标头、CSRF 等。请参阅 HeadersConfigurer、CsrfConfigurer。相反,如果您想保护公共端点免受常见漏洞的影响,请参阅configure(HttpSecurity)配置 HttpSecurity#authorizeRequests方法。

configure(HttpSecurity http)

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