Spring @RolesAllowed:返回403或401,但不返回500错误

时间:2020-03-29 07:08:44

标签: spring spring-boot spring-security spring-restcontroller

我想通过注释方法而不是在Spring安全配置bean中指定ANT匹配器来声明我的Spring @RestController的安全设置。

我写了这样的东西(我正在使用Kotlin和Spring WebFlux):

@RestController
open class MyController {
    @GetMapping("/public")
    open suspend fun public() {
        ...
    }


    @GetMapping("/private")
    @RolesAllowed("user")
    open suspend fun public() {
        ...
    }
}

我还在我的安全配置类中启用了全局方法安全性:

@EnableGlobalMethodSecurity(
        prePostEnabled = true,
        securedEnabled = true,
        jsr250Enabled = true
)

我希望第一种方法可以被任何人(甚至是匿名用户)调用,而第二种方法只能由具有指定角色的经过身份验证的用户调用。

但是当我通过匿名用户调用私有方法时,出现了500个服务器错误和堆栈跟踪:

org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext
    at org.springframework.security.access.intercept.AbstractSecurityInterceptor.credentialsNotFound(AbstractSecurityInterceptor.java:379) ~[spring-security-core-5.3.0.RELEASE.jar:5.3.0.RELEASE]
    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 

我想返回更相关的错误代码,例如401或403。

0 个答案:

没有答案