Java Spring安全中Web忽略和Http允许的区别?

Java Spring安全中Web忽略和Http允许的区别?,java,spring,spring-boot,spring-mvc,spring-security,Java,Spring,Spring Boot,Spring Mvc,Spring Security,这两种方法有什么区别 @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().antMatchers("/api/**").permitAll(); } @Override public void configure(WebSecurity web) { web.ignoring().antMatchers("/api/**"); }

这两种方法有什么区别

 @Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests().antMatchers("/api/**").permitAll();
}

@Override
public void configure(WebSecurity web) {
    web.ignoring().antMatchers("/api/**");
}

在一个spring安全配置类中,当我使用HttpSecurity时,它仍然给我403 forbidden,但当我使用WebSecurity时,它通过了罚款?为什么呢?我觉得我几乎无法通过过滤器控制什么是允许的,什么是需要授权的。

我建议您浏览一下这篇文章:代码中两种方法的区别是:

  • 允许为HTTP请求配置基于web的安全性。在此级别,您将声明身份验证规则
  • 允许配置对所有web安全性具有全局影响的内容,例如设置调试模式或使用的实现启用进一步的防火墙配置,或如代码所示忽略资源
您可能对第三种方法感兴趣,该方法使用:

  • 这将启用并确保身份验证机制,例如基于LDAP的身份验证或基于JDBC的身份验证

    • 这是一个有点抽象的问题,有点抽象的答案

    • [flow 1]想象一座大办公楼,一楼有一个主接待处。一楼的接待处可以让你进入大楼,如果你想去公司,比如说B他们会带你去那里,但他们不能让你进入任何公司的办公室,因为他们是诚实的,每个办公室都有自己的接待处,当你来到B办公室接待处时,你需要在那里进行身份验证(只有客人、想看看他们办公室的匿名人士、员工/用户、管理员等),只有他们允许你进入任何一位父亲,这才取决于他们

    • [flow 2]再想象一下,在同一座大办公楼里有餐厅/商店/厕所,当你来到一楼的主接待处,问他们餐厅在哪里时,他们会带你去那里,你不应该在这里进行身份验证,他们不知道你是谁,他们也不应该:
      web.ignering().antMatchers(“/restaurant/**”;

    • [flow 3]想象一下,在同一座大办公楼里,有一家公司决定在他们的楼层(一个房间,而不是整个办公室)开设画廊

      • 他们问一楼的总接待处:“如果有人来看我们的画廊,就让他们进去吧,不需要我们接待处的认证”
        web.ignoreing().antMatchers(“/C/gallery/**”);
      • 此外,他们还可以通过其他方式处理流程1,当有人来到他们的接待处说他想看他们的画廊时,他们只会让他们进去,而无需验证
        http.authorizeRequests().antMatchers(“/C/gallery/**”).permitAll();
      在这两种情况下,结果都是一样的,访问者将看到C公司的图库,但在
      http
      的流程中,涉及到许多步骤/人/(案例中的过滤器
      Spring Security
      )-速度稍慢,不需要静态资源

    • 一楼的主接待处it-
      WebSecurity
      它是整个应用程序/大楼中唯一的一个

      任何公司的接收都是
      websecurityConfigureAdapter
      (每个
      websecurityConfigureAdapter
      只有一个
      HttpSecurity
      )您可以拥有任意多个,每个都可能有完全分离的身份验证流、安全要求等,但所有这些都可以要求
      WebSecurity
      让任何人在没有任何身份验证的情况下访问某些资源。
      WebSecurity
      甚至不知道如何对用户进行身份验证-没有such选项


      总结一下您的问题,这两种方法应该具有相同的效果,如果不是,这意味着
      WebSecurityConfigurerAdapter
      具有一些额外的配置(默认情况下是e.x.crsf等)默认情况下,
      异常TranslationFilter
      会捕获安全异常并返回适当的状态(401403)。为了给您提供更好的答案,您应该提供更多详细信息。仅使用显示的配置创建新项目,禁用
      http.csrf().disable()

      为什么permitAll()不删除匹配端点上的所有身份验证需要?如果我有一个端点,可以说/api/我希望访问的国家/地区,而不需要任何筛选(身份验证/授权)。为什么permitAll()不工作?我不得不求助于忽略。嘿,我正在与Spring Security进行斗争,你的回答真的很有帮助。虽然我还没有解决我的问题,但它帮助我更多地理解了Spring Security的“流程”“。你有一些链接让我可以阅读更多关于这个的内容吗?”?每一个答案都假设了问题的背景,但我需要一个关于如何配置WebSecurity和HttpSecurity以及它们如何协同工作的概述。非常感谢:)嘿,没有好的源代码:(我自己检查了SpringSecurity中的所有代码。我希望这会有所帮助