spring-security 如何将Spring Security AntMatchers模式仅应用于具有pathVariable的url

wtlkbnrh  于 2022-11-11  发布在  Spring
关注(0)|答案(4)|浏览(157)

我正在使用Sping Boot 和WebSecurityConfigurerAdapter来配置安全性。
用于配置忽略的安全antMatches的方法如下所示:

@Override
    public void configure(final WebSecurity web) {
        web
           .ignoring()
           .antMatchers("/items")
           .antMatchers("/items/{itemId}")

其中{itemId}采用UUID格式
问题在于,使用此配置时,端点(如/items/report/items/images)也会打开,但它们不应打开。
有没有办法将忽略规则只应用于带有路径变量的uri?

sycxhyv7

sycxhyv71#

您可以尝试这样做,d表示itemId

antMatchers("/items/{\\d+}").access("hasAnyAuthority('ROLE')")

如果您要给予许可证全部

antMatchers("/items/**").permitAll()
yr9zkbsy

yr9zkbsy2#

根据AntPathMatcher的文档,您需要按照文档使用regex指定路径变量:
{spring:[a-z]+}将正则表达式[a-z]+匹配为名为“spring”的路径变量。
在您的情况下,它将是:

@Override
    public void configure(final WebSecurity web) {
        web
           .ignoring()
           .antMatchers("/items/{itemId:[\\d+]}")
ny6fqffe

ny6fqffe3#

对于比Ant模式更复杂的匹配,请在控制器上使用基于方法的安全性或(更好的)服务层方法。

vpfxa7rd

vpfxa7rd4#

您可以在控制器中的该url的处理程序方法上使用@preAuthorize注解,或者 checkout 此链接https://docs.spring.io/spring-security/site/docs/4.2.x/reference/html/el-access.html

相关问题