Spring Security:antMatcher 的序列未按预期工作 [重复]
Posted
技术标签:
【中文标题】Spring Security:antMatcher 的序列未按预期工作 [重复]【英文标题】:Spring Security: sequanece of antMatcher not working as expected [duplicate] 【发布时间】:2020-11-18 03:09:23 【问题描述】:我有 REST API,我希望使用 Spring Security 来保护它们 -
override fun configure(http: HttpSecurity?)
http?.authorizeRequests()
?.antMatchers("/podcast/**")?.hasRole("admin")
?.antMatchers(HttpMethod.GET, "/podcast/details/**")?.permitAll()
?.antMatchers("/")?.permitAll()
?.and()
?.formLogin()
?.antMatchers("/podcast/**")?.hasRole("admin")
正在工作,但是,
当我尝试访问 http://localhost:8080/podcast/details/all
API 时,?.antMatchers(HttpMethod.GET, "/podcast/details/**")?.permitAll()
会被完全忽略。
但是,当我像这样反转模式检查时 -
override fun configure(http: HttpSecurity?)
http?.authorizeRequests()
?.antMatchers(HttpMethod.GET, "/podcast/details/**")?.permitAll()
?.antMatchers("/podcast/**")?.hasRole("admin")
?.antMatchers("/")?.permitAll()
?.and()
?.formLogin()
它按预期工作。
我相信最严格的模式必须是第一位的,但上述案例证明并非如此。我错过了什么?
【问题讨论】:
【参考方案1】:当您首先说更严格的模式时,这与权限无关。它是关于哪些 url 模式更具体。
所以/podcast/details/**
比/podcast/**
更具体
即当您收到请求 /podcast/details/123
时,它将按照您定义的顺序进行 url 匹配。所以如果你把/podcast/**
放在第一位,它会匹配它而不检查其余的
【讨论】:
以上是关于Spring Security:antMatcher 的序列未按预期工作 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security 在运行时动态添加/删除 antMatchers 和角色
Spring security antMatcher 未按预期工作
Spring Security:antMatcher 的序列未按预期工作 [重复]
Spring Security:所有端点返回状态 200 并且对约束没有响应作为 antMatchers