Согласно руководству
spring-boot-oauth2 после авторизации OAuth2 у нас появляется JSESSIONID и его достаточно для базовой безопасности.
Но при этом при обновлении страницы f5 сессионные cookies удаляются и первые запросы после обновления вызывают ошибку авторизации.
В моем случае устанавливается статус 401 (Spring boot 3.2):
http.exceptionHandling(exHandler ->
exHandler.authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED)));
В качестве клиента Angular17:
export const authInterceptor: HttpInterceptorFn = (req, next) => {
const clonedRequest = req.clone( { withCredentials: true } );
return next(clonedRequest);
};
Когда получен JSESSIONID все работает без ошибок в консоле Angular, но если перезагрузить страницу то в логе появится ошибка:
status: 401,
statusText: 'Unknown Error',
url: 'http://localhost:8080/api...',
ok: false,
name: 'HttpErrorResponse',
message: 'Http failure response for http://localhost:8080/api...: 401 ',
error: null
При этом этот же запрос обрабатывается и выдает результат, т.е. вначале на один запрос придет ошибка, а потом нормальный ответ. В браузере все запросы отображаются со статусом 200.
Из-за обработчика авторизации если перезагружать страницу иногда мелькает страница логина на которую этот обработчик перенаправляет, что не хорошо.
Как это можно исправить?