SUPPORT-9331: Fix

This commit is contained in:
Eduard Tihomirov 2025-08-19 11:13:41 +03:00
parent b477348fac
commit 5234e66cb8
3 changed files with 26 additions and 6 deletions

View file

@ -58,6 +58,7 @@ import ru.micord.ervu.security.webbpm.jwt.helper.SecurityHelper;
import ru.micord.ervu.security.webbpm.jwt.service.JwtTokenService; import ru.micord.ervu.security.webbpm.jwt.service.JwtTokenService;
import ru.micord.ervu.security.webbpm.jwt.model.Token; import ru.micord.ervu.security.webbpm.jwt.model.Token;
import ru.cg.webbpm.modules.core.runtime.api.LocalizedException;
import ru.cg.webbpm.modules.core.runtime.api.MessageBundleUtils; import ru.cg.webbpm.modules.core.runtime.api.MessageBundleUtils;
import static ru.micord.ervu.security.SecurityConstants.PRNS_UUID; import static ru.micord.ervu.security.SecurityConstants.PRNS_UUID;
@ -399,7 +400,10 @@ public class EsiaAuthService {
} }
} }
private void errorHandler(HttpResponse<?> httpResponse) { private void errorHandler(HttpResponse<String> httpResponse) throws JsonProcessingException {
if (httpResponse.statusCode() == 500) {
processSignModuleError(httpResponse);
}
if (httpResponse.statusCode() != 200) { if (httpResponse.statusCode() != 200) {
throw new EsiaException(httpResponse.statusCode() + " " + httpResponse.body()); throw new EsiaException(httpResponse.statusCode() + " " + httpResponse.body());
} }
@ -482,7 +486,7 @@ public class EsiaAuthService {
SecurityContextHolder.setContext(context); SecurityContextHolder.setContext(context);
} }
private String verifyToken(String accessToken) { private String verifyToken(String accessToken) throws JsonProcessingException {
EsiaAccessToken esiaAccessToken = personalDataService.readToken(accessToken); EsiaAccessToken esiaAccessToken = personalDataService.readToken(accessToken);
EsiaHeader esiaHeader = personalDataService.readHeader(accessToken); EsiaHeader esiaHeader = personalDataService.readHeader(accessToken);
if (!esiaHeader.getSbt().equals("access")) { if (!esiaHeader.getSbt().equals("access")) {
@ -515,6 +519,9 @@ public class EsiaAuthService {
} }
HttpResponse<String> response = signVerify(accessToken); HttpResponse<String> response = signVerify(accessToken);
if (response.statusCode() != 200) { if (response.statusCode() != 200) {
if (response.statusCode() == 500) {
processSignModuleError(response);
}
if (response.statusCode() == 401) { if (response.statusCode() == 401) {
return "Token invalid. " + response.body(); return "Token invalid. " + response.body();
} }
@ -561,4 +568,17 @@ public class EsiaAuthService {
securityHelper.clearAccessCookie(response, PRNS_UUID); securityHelper.clearAccessCookie(response, PRNS_UUID);
} }
} }
private void processSignModuleError(HttpResponse<String> response)
throws JsonProcessingException {
String errorCode = objectMapper.readTree(response.body())
.get("error_code")
.asText();
if (errorCode.equals("CERT_TRUST_REVOCATION_STATUS_UNKNOWN")) {
throw new LocalizedException("crl_certificate_expired", MESSAGE_SOURCE);
}
else {
throw new EsiaException("Unknown error in verify module. Error code " + errorCode);
}
}
} }

View file

@ -1,3 +1,3 @@
kafka_reply_timeout=Превышено время ожидания ответа от сервера. kafka_reply_timeout=Превышено время ожидания ответа от сервера.
access_denied=Доступ запрещен. Пользователь должен быть включен в группу "Сотрудник, ответственный за военно-учетную работу" в ЕСИА
login_attempts_exceeded=Слишком большое количество попыток авторизоваться в ЕСИА за короткий промежуток времени. Рекомендуем почистить cookie и cash браузера, после повторить авторизацию. login_attempts_exceeded=Слишком большое количество попыток авторизоваться в ЕСИА за короткий промежуток времени. Рекомендуем почистить cookie и cash браузера, после повторить авторизацию.
crl_certificate_expired=Превышено время ожидания ответа из ЕСИА

View file

@ -1,3 +1,3 @@
kafka_reply_timeout=Превышено время ожидания ответа от сервера. kafka_reply_timeout=Превышено время ожидания ответа от сервера.
access_denied=Доступ запрещен. Пользователь должен быть включен в группу "Сотрудник, ответственный за военно-учетную работу" в ЕСИА
login_attempts_exceeded=Слишком большое количество попыток авторизоваться в ЕСИА за короткий промежуток времени. Рекомендуем почистить cookie и cash браузера, после повторить авторизацию. login_attempts_exceeded=Слишком большое количество попыток авторизоваться в ЕСИА за короткий промежуток времени. Рекомендуем почистить cookie и cash браузера, после повторить авторизацию.
crl_certificate_expired=Превышено время ожидания ответа из ЕСИА