From a827bd0f6bfd951c66423ab0162e56bd45f53299 Mon Sep 17 00:00:00 2001 From: Mikhail Trofimov Date: Thu, 24 Jul 2025 11:00:48 +0300 Subject: [PATCH] Moved encoding to properties --- credit-tracker.properties | 4 +++- .../config/rest/GlobalExceptionHandler.java | 10 ++++++++-- .../config/settings/CreditTrackerSettings.java | 1 + .../ru/nbch/credit_tracker/config/xml/XmlConfig.java | 5 +++-- .../credit_tracker/service/MonitoringService.java | 4 +--- .../nbch/credit_tracker/service/SignalService.java | 2 +- .../service/scoring/AuthorizationService.java | 12 ++++++++---- 7 files changed, 25 insertions(+), 13 deletions(-) diff --git a/credit-tracker.properties b/credit-tracker.properties index 55c7338..e579a9c 100644 --- a/credit-tracker.properties +++ b/credit-tracker.properties @@ -38,4 +38,6 @@ ct.load-dir=/opt/app/reports ct.monitoring-interval=${MONITORING_INTERVAL:15} # days ct.update-flags-interval=${UPDATE_FLAGS_INTERVAL:1} -ct.days-to-update-flags=${DAYS_TO_UPDATE_FLAGS:30} \ No newline at end of file +ct.days-to-update-flags=${DAYS_TO_UPDATE_FLAGS:30} + +ct.encoding=windows-1251 \ No newline at end of file diff --git a/src/main/java/ru/nbch/credit_tracker/config/rest/GlobalExceptionHandler.java b/src/main/java/ru/nbch/credit_tracker/config/rest/GlobalExceptionHandler.java index d082987..0df9e3b 100644 --- a/src/main/java/ru/nbch/credit_tracker/config/rest/GlobalExceptionHandler.java +++ b/src/main/java/ru/nbch/credit_tracker/config/rest/GlobalExceptionHandler.java @@ -7,6 +7,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.multipart.MaxUploadSizeExceededException; +import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings; import ru.nbch.credit_tracker.entities.response.errors.*; import ru.nbch.credit_tracker.enums.SignalError; import ru.nbch.credit_tracker.exceptions.SignalClientException; @@ -19,11 +20,16 @@ import java.nio.charset.Charset; public class GlobalExceptionHandler { private final SimpleMessageResolver messageResolver = new SimpleMessageResolver(); + private final String encoding; + + public GlobalExceptionHandler(CreditTrackerSettings settings) { + this.encoding = settings.getEncoding(); + } @ExceptionHandler(value = MaxUploadSizeExceededException.class, produces = MediaType.APPLICATION_XML_VALUE) public ResponseEntity handleMaxUploadSizeExceeded(MaxUploadSizeExceededException ex) { HttpHeaders headers = new HttpHeaders(); - headers.setContentType(new MediaType("application", "xml", Charset.forName("windows-1251"))); + headers.setContentType(new MediaType("application", "xml", Charset.forName(encoding))); MonitoringError error = new MonitoringError(); error.setStatus("error"); @@ -36,7 +42,7 @@ public class GlobalExceptionHandler { @ExceptionHandler(value = SignalException.class, produces = MediaType.APPLICATION_XML_VALUE) public ResponseEntity handleClientException(SignalException ex) { HttpHeaders headers = new HttpHeaders(); - headers.setContentType(new MediaType("application", "xml", Charset.forName("windows-1251"))); + headers.setContentType(new MediaType("application", "xml", Charset.forName(encoding))); CommonError commonError = getCommonError(ex); commonError.setStatus("error"); commonError.setErrorCode(ex.getErrorMessage().getSubject().getCode()); diff --git a/src/main/java/ru/nbch/credit_tracker/config/settings/CreditTrackerSettings.java b/src/main/java/ru/nbch/credit_tracker/config/settings/CreditTrackerSettings.java index 85fb8fc..9a59f0b 100644 --- a/src/main/java/ru/nbch/credit_tracker/config/settings/CreditTrackerSettings.java +++ b/src/main/java/ru/nbch/credit_tracker/config/settings/CreditTrackerSettings.java @@ -32,4 +32,5 @@ public class CreditTrackerSettings { private Long updateFlagsInterval; private Long daysToUpdateFlags; + private String encoding; } diff --git a/src/main/java/ru/nbch/credit_tracker/config/xml/XmlConfig.java b/src/main/java/ru/nbch/credit_tracker/config/xml/XmlConfig.java index 0790967..9fd3f9f 100644 --- a/src/main/java/ru/nbch/credit_tracker/config/xml/XmlConfig.java +++ b/src/main/java/ru/nbch/credit_tracker/config/xml/XmlConfig.java @@ -3,6 +3,7 @@ package ru.nbch.credit_tracker.config.xml; import jakarta.xml.bind.JAXBException; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings; import ru.nbch.credit_tracker.entities.response.errors.MonitoringError; import ru.nbch.credit_tracker.entities.response.online_report.SgnlOnlineReport; import ru.nbch.credit_tracker.entities.response.success.MonitoringResponse; @@ -18,8 +19,8 @@ import java.util.List; public class XmlConfig { @Bean - public IXmlProcessor xmlProcessor() throws JAXBException { - return new XmlProcessorImplAnyClasses(Charset.forName("windows-1251"), + public IXmlProcessor xmlProcessor(CreditTrackerSettings settings) throws JAXBException { + return new XmlProcessorImplAnyClasses(Charset.forName(settings.getEncoding()), // unmarshalling classes SgnlOnlineReport.class, // marshalling classes diff --git a/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java b/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java index 6a2b8a2..716cb55 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java @@ -18,7 +18,6 @@ import ru.nbch.credit_tracker.entities.response.online_download.Persons; import ru.nbch.credit_tracker.entities.response.online_report.Report; import ru.nbch.credit_tracker.entities.response.online_report.SgnlOnlineReport; import ru.nbch.credit_tracker.service.signal.SignalRestService; -import ru.nbch.credit_tracker.service.xml.jaxb.IXmlProcessor; import ru.nbch.credit_tracker.service.xml.stax.MonitoringSignalResponseStaxXmlWriter; import ru.nbch.credit_tracker.service.xml.stax.StaxXmlProcessor; import ru.nbch.credit_tracker.utils.CTUtil; @@ -45,7 +44,6 @@ public class MonitoringService { public MonitoringService(SignalRestService signalRestService, SignalService signalService, - IXmlProcessor xmlProcessor, StaxXmlProcessor staxXmlProcessor, CreditTrackerSettings config) { this.signalRestService = signalRestService; @@ -130,7 +128,7 @@ public class MonitoringService { MonitoringSignalResponse response = new MonitoringSignalResponse(); response.setPackageName(userPackage.getPackageName()); // Имя пакета, переданного при установке - MonitoringSignalResponseStaxXmlWriter staxXmlWriter = new MonitoringSignalResponseStaxXmlWriter("windows-1251"); + MonitoringSignalResponseStaxXmlWriter staxXmlWriter = new MonitoringSignalResponseStaxXmlWriter(config.getEncoding()); staxXmlWriter.writeWithStax(responsePath, response, writer -> { try (BufferedInputStream in = new BufferedInputStream(Files.newInputStream(Path.of(reportPath)), 4 * 1024 * 1024)) { diff --git a/src/main/java/ru/nbch/credit_tracker/service/SignalService.java b/src/main/java/ru/nbch/credit_tracker/service/SignalService.java index 04b738d..e71435d 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/SignalService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/SignalService.java @@ -177,7 +177,7 @@ public class SignalService { Signals signals = buildSignals(packageId); - SignalsStaxXmlWriter signalsStaxXmlWriter = new SignalsStaxXmlWriter("windows-1251"); + SignalsStaxXmlWriter signalsStaxXmlWriter = new SignalsStaxXmlWriter(config.getEncoding()); signalsStaxXmlWriter.writeWithStax(filePath, signals, diff --git a/src/main/java/ru/nbch/credit_tracker/service/scoring/AuthorizationService.java b/src/main/java/ru/nbch/credit_tracker/service/scoring/AuthorizationService.java index f1eecf8..7c3f1f0 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/scoring/AuthorizationService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/scoring/AuthorizationService.java @@ -4,6 +4,7 @@ import jakarta.xml.bind.DatatypeConverter; import lombok.AllArgsConstructor; import lombok.Getter; import org.springframework.stereotype.Service; +import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings; import ru.nbch.credit_tracker.enums.SignalError; import ru.nbch.credit_tracker.mapper.scoring.ModelUsersMapper; @@ -13,17 +14,20 @@ import java.util.List; @Service public class AuthorizationService { private static final String SGNL_CODE = "SGNL"; - private static final String SALT = "-*-XUSER_"; // TODO move salt to props? + private static final String SALT = "-*-XUSER_"; private final ModelUsersMapper mapper; + private final String encoding; - public AuthorizationService(ModelUsersMapper mapper) { + public AuthorizationService(ModelUsersMapper mapper, + CreditTrackerSettings settings) { this.mapper = mapper; + this.encoding = settings.getEncoding(); } public AuthResult findAuthInfo(String userId, String password) throws Exception { String hashedPassword = hashPassword(password); - List productCodes = mapper.findUserProductCodes(userId, hashedPassword); // TODO столбец username имеет ограничение на длину. Добавить обработку или валиться с 500? + List productCodes = mapper.findUserProductCodes(userId, hashedPassword); if (productCodes.isEmpty()) { return new AuthResult(false, SignalError.ERROR_005); } @@ -36,7 +40,7 @@ public class AuthorizationService { private String hashPassword(String password) throws Exception { try { MessageDigest md = MessageDigest.getInstance("MD5"); - byte[] messageDigest = md.digest((SALT + password).getBytes("windows-1251")); + byte[] messageDigest = md.digest((SALT + password).getBytes(encoding)); return DatatypeConverter.printHexBinary(messageDigest).toLowerCase(); } catch (Exception e) { throw new Exception("Unable to hash password", e);