Подсказка Micronaut Http Basic Auth

Я искал способ сообщить Micronaut (1.3.5) добавить заголовок WWW-Authenticate в случае сбоя аутентификации при базовой настройке HTTP-аутентификации. По умолчанию этот заголовок отсутствует, и возвращается только код состояния 401.


person Georg Moser    schedule 23.06.2020    source источник


Ответы (1)


Ответ - предоставить собственный ExceptionHandler, как показано ниже:


/**
 * AuthorizationException Handler, which adds header for showing browser basic auth dialogue.
 */
@Singleton
@Primary
public class HttpBasicAuthorizationExceptionHandler
        implements ExceptionHandler<AuthorizationException, MutableHttpResponse<?>> {


    @Override
    public MutableHttpResponse<?> handle(HttpRequest request, AuthorizationException exception) {
        return Flowable.fromPublisher(reject(exception.isForbidden())).blockingFirst();
    }

    /**
     * @param forbidden true if the status is HttpStatus.FORBIDDEN, HttpStatus.UNAUTHORIZED otherwise.
     * @return the http response.
     */
    private Publisher<MutableHttpResponse<?>> reject(boolean forbidden) {
        if (forbidden) {
            return Publishers.just(HttpResponse.status(HttpStatus.FORBIDDEN));
        }
        return Publishers.just(
                HttpResponse.status(HttpStatus.UNAUTHORIZED)
                        .header(HttpHeaders.WWW_AUTHENTICATE, "Basic")
        );
    }

}
person Georg Moser    schedule 23.06.2020