当前位置: 首页 > 知识库问答 >
问题:

Spring Security中Web忽略和Http允许的区别?

王经赋
2023-03-14

这两种方法有什么区别?

 @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个禁止,但当我使用WebSecurity时,它通过得很好?为什么?我觉得我几乎无法控制什么是允许的,什么需要通过过滤器进行授权。

共有2个答案

黄景胜
2023-03-14

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

>

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

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

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

    • 他们问一楼的主接待处:“如果有人来参观我们的画廊,就让他们进去吧,不需要我们接待处的身份验证”<code>web.igning()。antMatchers(“/C/gallery/**”)
    • 此外,他们还可以用其他方式处理流程1,当一个人来到他们的接待台并说他想看他们的画廊时,他们只会让他们进来,而无需身份验证http.authorizeRequests().antMatchers(“/C/gallery/**”).permitAll()

    在这两种情况下,结果将是相同的,访问者将看到C公司的画廊,但在使用< code>http的流程中,涉及到许多步骤/人员/(在< code>Spring Security的情况下是过滤器)——这有点慢,并且不需要静态资源。

    底层的主接待处是-WebSecurity它是整个应用程序/建筑物中唯一的一个。

    任何公司的接收都是WebSecurityConfigureAdapter(每个websecurityConfigureAdapter只有一个HttpSecurity)。您可以拥有任意多个,每个都可能具有完全分离的身份验证流程、安全要求等。。。,但他们都可以要求<code>WebSecurityWebSecurity甚至不知道如何验证用户-没有这样的选项。

    总结一下你的问题,这两种方法应该产生相同的效果,如果不是,则意味着<code>WebSecurityConfigureAdapter。

  • 刘才俊
    2023-03-14

    我建议您浏览一下这篇文章:Spring SecurityJavaConfig Preview: Web Security您的代码中两种方法之间的区别是:

      < li> HttpSecurity允许为HTTP请求配置基于web的安全性。在这个级别,您声明身份验证规则。 < li> WebSecurity允许配置对所有web安全性具有全局影响的内容,例如设置调试模式或使用< code>HttpFirewall的实现来启用进一步的防火墙配置,或者如您的代码所示简单地忽略资源。

    您可能会对< code > web securityconfigureradapter 的第三个< code>configure方法感兴趣,该方法使用:

    • AuthenticationManagerBuilder,它启用并确保身份验证机制,例如基于LDAP的身份验证或基于JDBC的身份验证。
     类似资料:
    • 问题内容: 我正在研究与H2数据库接口的Java插件。我真正想要的是“插入忽略”语句;但是,我知道H2不支持此功能。我也知道Merge,但这并不是我想要的,如果记录存在,我不想更改它。 我正在考虑的是只是运行插入并让重复键异常发生。但是,我不希望这填满我的日志文件。DB调用发生在我无法更改的导入类中。所以我的问题是: 这是合理的做法吗?我不是让错误发生的人,但这似乎是这种情况下的最佳方法(它应该不

    • 这里有一个简单的endpoint,存在于/api/v1/jwt中 返回一个有效的JWT令牌。 但我的安全配置不再起作用,现在所有endpoint似乎都受到保护, Edit:antPathRequestMatcher没有为configure启动,但我甚至添加了websecurity configure的路径,我得到了以下日志记录

    • 我正在使用管理版本,ala PEP 440。 我已将几个版本上载到私有存储库: 我的问题是现在当我使用 我得到的版本是当我期望得到。 有没有办法让pip忽略“本地版本”,只安装准确的版本,而不必上传到不同的索引(即staging和stable)? 编辑: 我已尝试使用和标志,但问题仍然存在;皮普更喜欢0.0。2版本到0.0版本。2版本。 附加编辑: 我使用的是和python2.7

    • QueryList遵循将业务与错误分离的原则, HTTP请求传输过程中如果出现的错误,QueryList将会抛出异常。 QueryList的HTTP客户端基于GuzzleHttp,它提供了丰富的HTTP异常类型,用户可以自行设计根据不同的异常类型做不同的处理。 如果你觉得麻烦,并不想每次都去处理HTTP异常,选择直接忽略,让程序继续运行下去,做法可以参考下面方式: 对内置的get()进行封装: u

    • 问题内容: 鉴于以下课程 当我们验证它(例如,使用@Valid)并且如果Website.url不遵守我的自定义@ValidUrl约束时,我们将遇到约束冲突(例如,“ URL不可访问”)。 我想知道如果用户愿意,是否可以忽略该验证。 脚步: 第一次验证表格 引发约束冲突并将其显示给用户 用户选择“我知道,仍然添加”,然后重新提交 第二次验证表单,验证@ValidUrl以外的所有内容 问题答案: 您可

    • 问题内容: 我需要将一些数据发布到我的Symfony表单中,并为此使用方法。 但是当请求包含一些额外的数据时,我得到了错误: “此表单不应包含其他字段” 是否可以使用表单配置让表单错过额外的数据? 也许存在另一种方法? 注意: 我需要方法,不是因为我通过跨域ajax请求发布数据,所以不能以这种方式提交表单。原因:return ,因为return false。 PS 当然,我可以创建将在将请求传递给