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

了解Spring Security上的requestMatchers()

萧凡
2023-03-14

我正在学习Spring Security的一些代码。我想了解我在Internet 1上找到的这个例子:

http.requestMatchers()
        .antMatchers("/management/**") // (1)
        .and()
        .authorizeRequests() // (2)
        .antMatchers("/management/health")
        .permitAll()
        .antMatchers("/management/info")
        .permitAll()
        .antMatchers("/management/**")
        .hasRole("ACTUATOR")
        .anyRequest().permitAll()
        .and()
        .httpBasic(); (3)

}

我不明白这个配置,为什么这个代码:

http.requestMatchers()
        .antMatchers("/management/**")
        .and() 

在之前。authorizeRequests()?(1)

这是什么意思?

你能解释一下这个例子吗?

2: 在第二种情况下,有什么区别?

http.requestMatchers().antMatchers("/rest2/**")
.and()
.authorizeRequests()
.antMatchers("/rest/v1/test/hello").permitAll()
.antMatchers("/rest/v1/test/**").denyAll()
.and()
.requestMatchers().antMatchers("/rest/**")
.and()
.authorizeRequests()
.antMatchers("/rest/v1/test/hello").permitAll();

使用requestMatchers()有什么影响?

如果我向“/rest/v1/test/hello2”发送请求,我会收到一个401为什么拒绝请求的规则与antMatcher(“/rest2/**") ?

共有2个答案

缑勇锐
2023-03-14

Spring SecurityAPI:公共最终类HttpSecurity。RequestMatcherConfiguration扩展了AbstractRequestMatcherRegistry

允许映射此HttpSecurity将用于的HTTP请求

欧阳俊逸
2023-03-14

requestMatchers()的目的是指定Spring Security配置将应用于哪些请求。

例如,如果您有两个endpoint,并且您只想对其应用安全性(特别是csrf保护),那么您可以添加以下配置:

http
    .requestMatchers()
        .antMatchers("/private/**")
        .and()
    .csrf();

然后,如果您发布到“/private”,您将得到403响应
但如果您发布到“/public”,您将得到200分,因为没有应用安全性。

这与指示该endpoint所需的访问类型的authorizeRequests(授权请求)不同,而不是是否应用了安全性。

在你提到的例子1中

http
    .requestMatchers()
        .antMatchers("/management/**")
        .and() 
        ...

安全配置仅应用于"/Management/**",因此如果您向"/foo"发出请求,它将不安全。

在你提到的例子2中,

http
    .requestMatchers()
        .antMatchers("/rest2/**")
        .and()
    .authorizeRequests()
        .antMatchers("/rest/v1/test/hello").permitAll()
        .antMatchers("/rest/v1/test/**").denyAll()
        .and()
    .requestMatchers()
        .antMatchers("/rest/**")
        .and()
    .authorizeRequests()
        .antMatchers("/rest/v1/test/hello").permitAll();

"/rest/v1/test/hello2"以401响应的原因是因为"/rest/**"位于请求匹配器中,因此您的安全规则. antMatcher("/rest/v1/test/hello"). permitAll()将适用。
如果您向"/rest3/v1/test/hello2"发出请求,那么它将以200响应,因为"/rest3/**"不是任何请求匹配器的一部分。

 类似资料:
  • 问题内容: 我在OS X上使用Java已经很多年了,最近,当Apple停止默认包含Java时,我让OS继续为我安装它(当然,Apple的品种很多)。 因此,现在我正在使用OS X 10.8,并且需要安装Java 7,因此我刚刚获得了DMG形式的Oracle Update 15,并运行了安装程序。它更新了我的/ usr / bin / java(和相关文件)以指向此处: 追溯到“ /System/L

  • 主要内容:1.入门,2.设置用户名和密码1.入门 1.启动一个SpringBoot项目 2.导入SpringSecurity相关依赖 3.编写Controller TestController.java 用户是user 密码是刚刚的 2.设置用户名和密码 1.在配置文件中设置 2.在配置类中设置 3.自定义实现类 2.1 配置文件中设置 2.2 在配置类中设置 设置用户名为zZZ,密码为root 2.3 自定义实现类 配置类: 业务类:

  • 问题内容: 我目前正在评估基于Java的安全框架,我是Spring 3.0用户,因此似乎似乎SpringSecurity是正确的选择,但是Spring安全性似乎受到过分复杂的困扰,它似乎并没有使安全性易于实现, Shiro似乎更加连贯,更容易理解。我正在寻找这两个框架之间的利弊清单。 问题答案: 我也同意Spring Security对我来说感觉太复杂了。当然,他们已经做了一些降低复杂性的事情,例

  • 在WAR的情况下,它试图将请求转发到/error页面,并寻找它的处理程序方法(请参见底部的日志)。 最后我得到以下回应: 我该换什么才能得到401?

  • 1.导入jar包 web.xml spring-security.xml

  • 问题内容: 我认为我对 .NET 的经验可能会影响我的理解,因此我想一些代码示例: 我正在尝试让快速控制器在返回响应之前等待5秒: 该代码不起作用,浏览器不断加载和加载,从不显示任何内容。 我基于此SO答案构建的函数以及控制器方法,是基于(对)其工作原理的(错误的)理解,因此我需要进行一些澄清和更正: 1.我应该什么时候使用? 据我了解,您应该在函数调用之前使用。这样对吗?另外,为什么我可以在返回