在 Spring oauth2 中使用类 ResourceServerConfiguration.configure 中的 HttpSecurity.requestMatchers

Posted

技术标签:

【中文标题】在 Spring oauth2 中使用类 ResourceServerConfiguration.configure 中的 HttpSecurity.requestMatchers【英文标题】:using HttpSecurity.requestMatchers in class ResourceServerConfiguration.configure in spring oauth2 【发布时间】:2019-05-07 20:52:54 【问题描述】:

我一直在努力理解如何以及何时使用HttpSecurity.requestMatchers。虽然我使用HttpSecurity.requestMatchers,但我已经调用authorizeRequestsantMatchers 来指定安全规则。

我应该什么时候使用

 http.requestMatchers()
              .antMatchers("/secure/**","/patients/**","/patient/**", "/hello/**")
              .and()
              .authorizeRequests().antMatchers("/secure/**","/books/**","/book/**", "/hello/**")
              .hasAnyRole("ADMIN","USER");

结束

      http
      .authorizeRequests().antMatchers("/secure/**","/books/**","/hello/**", "/hello/**")
      .hasAnyRole("ADMIN","USER");

一个场景可以帮助我理解HttpSecurity.requestMatchers的用例

我确实看过requestMatchers,但我还是不清楚

【问题讨论】:

***.com/questions/35890540/…的可能重复 【参考方案1】:

如果您需要在应用程序中配置多个 HttpSecurity,则通常会使用 HttpSecurity.requestMatchers() 或其他(但类似的)配置选项之一:

HttpSecurity.requestMatcher(RequestMatcher) HttpSecurity.antMatcher(String) HttpSecurity.mvcMatcher(String) HttpSecurity.regexMatcher(String)

参见6.10 Multiple HttpSecurity中的参考

例如,如果您的应用程序有一组以基本路径 /api 为根的 API 以及以基本路径 /admin 为根的应用程序管理部分的另一类端点,那么您可以定义 2x @987654330 @ 为您的应用程序:

@EnableWebSecurity
public class SecurityConfig 

    @Configuration
    @Order(1)
    public static class ApiWebSecurityConfig extends WebSecurityConfigurerAdapter 
        protected void configure(HttpSecurity http) throws Exception 
            http
                .requestMatchers()
                    .antMatchers("/api/**")
                    .and()
                .authorizeRequests()
                    .antMatchers("/api/endpoint1")
                        .hasRole("USER1");
        
    

    @Configuration
    public static class AdminWebSecurityConfig extends WebSecurityConfigurerAdapter 
        protected void configure(HttpSecurity http) throws Exception 
            http
                .requestMatchers()
                    .antMatchers("/admin/**")
                    .and()
                .authorizeRequests()
                    .antMatchers("/admin/endpoint1")
                        .hasRole("ADMIN1");

        
    

但是,如果您只提供 1x WebSecurityConfigurerAdapter,则不需要配置 HttpSecurity.requestMatchers()(或任何替代方案),因为它会自动默认为 HttpSecurity.requestMatcher(AnyRequestMatcher.INSTANCE)。所以对于这些配置情况,这就足够了:

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter 

    @Override
    protected void configure(HttpSecurity http) throws Exception 
        http
            .authorizeRequests()
                .antMatchers(...
    

希望这有意义吗?

【讨论】:

所以,你的意思是,当我调用 requestMathersantMatchers 时,它确实表明这个 http 安全配置(或 过滤器链)负责处理模式(例如api/endpoint1)..我的理解正确吗? 是的,没错。使用http.requestMatchers().antMatchers("/api/**") 匹配特定的SecurityFilterChain(由WebSecurityConfigurerAdapter 构建)

以上是关于在 Spring oauth2 中使用类 ResourceServerConfiguration.configure 中的 HttpSecurity.requestMatchers的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring oauth2 中使用类 ResourceServerConfiguration.configure 中的 HttpSecurity.requestMatchers

如何在我的 Spring Boot Security OAuth2 应用程序中仅为某些类启用 OAuth2?

Android上的Spring OAuth2异常:在路径上找不到类“javax.xml.transform.stax.StAXSource”:DexPathList

spring security oauth2 jwt 认证和资源分离的配置文件(java类配置版)

Spring OAuth2 安全单元测试

Spring Boot Oauth2缓存UserDetails到Ehcache