Spring @RolesAllowed: возврат 403 или 401, но не ошибка 500 - PullRequest
0 голосов
/ 29 марта 2020

Я хочу объявить параметры безопасности моего Spring @RestController с помощью аннотирования методов, а не указывать сопоставления ANT в bean-компоненте конфигурации безопасности Spring.

Я написал нечто подобное (я использую 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...