在 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
,但我已经调用authorizeRequests
和antMatchers
来指定安全规则。
我应该什么时候使用
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(...
希望这有意义吗?
【讨论】:
所以,你的意思是,当我调用requestMathers
和 antMatchers
时,它确实表明这个 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