This question already has answers here:
When to use Spring Security`s antMatcher()?
                                
                                    (3个答案)
                                
                        
                4个月前关闭。
            
        

我是springig security,我从https://spring.io/guides/tutorials/spring-boot-oauth2/遇到了这段代码

 @Override
  protected void configure(HttpSecurity http) throws Exception {
    http
      .antMatcher("/**")
      .authorizeRequests()
        .antMatchers("/", "/login**", "/webjars/**", "/error**")
        .permitAll()
      .anyRequest()
        .authenticated();
  }


我删除了.antMatcher("/**"),代码仍然有效。
我知道**匹配路径中的零个或多个目录,所以我认为antMatcher("/**").authorizeRequestes().antMatcher("/login")会匹配直接或间接位于根路径下的"/login",即我希望它匹配诸如/login/demo/login的路径,并非如此,它只匹配根路径正下方的/login
那么.antMatcher("/**") here到底需要什么呢?

最佳答案

他们是不同的东西。


http.antMatcher()配置此SecurityFilterChain将处理的URL。默认为匹配所有URL。这就是为什么删除http.antMatcher("/**")的原因相同。
http.authorizeRequests()配置URL的授权事项,例如是否需要进行身份验证或仅某些角色可以访问它等。


因此,如果URL与http.antMatcher()不匹配,Spring安全将不会处理它,并且http.authorizeRequests()不适用于此URL。换句话说,为了使http.authorizeRequests()中配置的URL生效,它应该由Spring Security处理并在http.antMatcher()中进行匹配。

08-28 23:01