SUPPORT-8914: add new network-attribute

This commit is contained in:
adel.ka 2025-02-11 13:38:29 +03:00 committed by adel.kalimullin
parent 26fad332b0
commit f351dcd4ce
4 changed files with 155 additions and 3 deletions

View file

@ -8,11 +8,16 @@ public class AuditAuthorizationEvent extends AuditEvent {
private String lastName; private String lastName;
private String middleName; private String middleName;
private String snils; private String snils;
private String serverIp;
private String serverHostName;
private String clientIp;
private String clientHostName;
public AuditAuthorizationEvent( public AuditAuthorizationEvent(
String esiaPersonId, String eventTime, String firstName, String esiaPersonId, String eventTime, String firstName,
String lastName, String middleName, String snils, String lastName, String middleName, String snils,
String status, String eventType) { String status, String eventType, String serverIp,
String serverHostName, String clientIp, String clientHostName) {
super(esiaPersonId, eventTime); super(esiaPersonId, eventTime);
this.status = status; this.status = status;
this.firstName = firstName; this.firstName = firstName;
@ -20,6 +25,10 @@ public class AuditAuthorizationEvent extends AuditEvent {
this.middleName = middleName; this.middleName = middleName;
this.snils = snils; this.snils = snils;
this.eventType = eventType; this.eventType = eventType;
this.serverIp = serverIp;
this.serverHostName = serverHostName;
this.clientIp = clientIp;
this.clientHostName = clientHostName;
} }
public String getFirstName() { public String getFirstName() {
@ -70,4 +79,35 @@ public class AuditAuthorizationEvent extends AuditEvent {
this.eventType = eventType; this.eventType = eventType;
} }
public String getServerIp() {
return serverIp;
}
public void setServerIp(String serverIp) {
this.serverIp = serverIp;
}
public String getServerHostName() {
return serverHostName;
}
public void setServerHostName(String serverHostName) {
this.serverHostName = serverHostName;
}
public String getClientIp() {
return clientIp;
}
public void setClientIp(String clientIp) {
this.clientIp = clientIp;
}
public String getClientHostName() {
return clientHostName;
}
public void setClientHostName(String clientHostName) {
this.clientHostName = clientHostName;
}
} }

View file

@ -16,6 +16,7 @@ import ru.micord.ervu.audit.service.AuditService;
import ru.micord.ervu.security.esia.model.PersonModel; import ru.micord.ervu.security.esia.model.PersonModel;
import ru.micord.ervu.security.webbpm.jwt.service.JwtTokenService; import ru.micord.ervu.security.webbpm.jwt.service.JwtTokenService;
import ru.micord.ervu.util.DateUtils; import ru.micord.ervu.util.DateUtils;
import ru.micord.ervu.util.NetworkUtils;
/** /**
* @author Adel Kalimullin * @author Adel Kalimullin
@ -60,6 +61,11 @@ public class BaseAuditService implements AuditService {
@Override @Override
public void processAuthEvent(HttpServletRequest request, PersonModel personModel, String status, public void processAuthEvent(HttpServletRequest request, PersonModel personModel, String status,
String eventType) { String eventType) {
String serverIp = NetworkUtils.getServerIp();
String clientIp = NetworkUtils.getClientIp(request);
String serverHostName = NetworkUtils.getHostName(serverIp);
String clientHostName = NetworkUtils.getHostName(clientIp);
AuditAuthorizationEvent event = new AuditAuthorizationEvent( AuditAuthorizationEvent event = new AuditAuthorizationEvent(
personModel.getPrnsId(), personModel.getPrnsId(),
DateUtils.getClientTimeFromRequest(request), DateUtils.getClientTimeFromRequest(request),
@ -68,7 +74,11 @@ public class BaseAuditService implements AuditService {
personModel.getMiddleName(), personModel.getMiddleName(),
personModel.getSnils(), personModel.getSnils(),
status, status,
eventType eventType,
serverIp,
serverHostName,
clientIp,
clientHostName
); );
String message = convertToMessage(event); String message = convertToMessage(event);
auditPublisher.publishEvent(authorizationTopic, message); auditPublisher.publishEvent(authorizationTopic, message);

View file

@ -0,0 +1,53 @@
package ru.micord.ervu.util;
import java.net.InetAddress;
import java.net.UnknownHostException;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
/**
* @author Adel Kalimullin
*/
public final class NetworkUtils {
private static final Logger LOGGER = LoggerFactory.getLogger(NetworkUtils.class);
private static final String IP_HEADER = "X-Forwarded-For";
private static final String UNKNOWN = "unknown";
private NetworkUtils() {
}
public static String getServerIp() {
try {
InetAddress inetAddress = InetAddress.getLocalHost();
return inetAddress.getHostAddress();
}
catch (UnknownHostException e) {
LOGGER.error("Failed to get local IP address", e);
return UNKNOWN;
}
}
public static String getClientIp(HttpServletRequest request) {
String ip = request.getHeader(IP_HEADER);
if (StringUtils.hasText(ip) && !ip.equalsIgnoreCase(UNKNOWN)) {
return ip.split(",")[0].trim();
}
else {
return request.getRemoteAddr();
}
}
public static String getHostName(String ip) {
try {
InetAddress inetAddress = InetAddress.getByName(ip);
return inetAddress.getHostName();
}
catch (UnknownHostException e) {
LOGGER.error("Unknown host for IP {}", ip, e);
return UNKNOWN;
}
}
}

View file

@ -865,7 +865,6 @@
<componentRootId>573a720b-91f7-4e25-a441-7fd3133fdf31</componentRootId> <componentRootId>573a720b-91f7-4e25-a441-7fd3133fdf31</componentRootId>
<name>HB - запрет на постановку в налоговом органе физического лица в качестве налогоплательщика, применяющего спец</name> <name>HB - запрет на постановку в налоговом органе физического лица в качестве налогоплательщика, применяющего спец</name>
<container>true</container> <container>true</container>
<expanded>false</expanded>
<childrenReordered>false</childrenReordered> <childrenReordered>false</childrenReordered>
<scripts id="bf098f19-480e-44e4-9084-aa42955c4d0f"> <scripts id="bf098f19-480e-44e4-9084-aa42955c4d0f">
<properties> <properties>
@ -2039,6 +2038,22 @@
<scripts id="f203f156-be32-4131-9c86-4d6bac6d5d56"> <scripts id="f203f156-be32-4131-9c86-4d6bac6d5d56">
<enabled>false</enabled> <enabled>false</enabled>
</scripts> </scripts>
<scripts id="a1579d08-139a-429e-8601-2bf95aa91147">
<classRef type="TS">
<className>LinkClickHandler</className>
<packageName>ervu</packageName>
</classRef>
<enabled>true</enabled>
<expanded>true</expanded>
<properties>
<entry>
<key>eventType</key>
<value>
<simple>"NAVIGATION_TO_SOURCE"</simple>
</value>
</entry>
</properties>
</scripts>
</children> </children>
<children id="56f58b69-0324-4823-bb69-98682542e514"> <children id="56f58b69-0324-4823-bb69-98682542e514">
<prototypeId>fd7e47b9-dce1-4d14-9f3a-580c79f59579</prototypeId> <prototypeId>fd7e47b9-dce1-4d14-9f3a-580c79f59579</prototypeId>
@ -2450,6 +2465,22 @@
<scripts id="f203f156-be32-4131-9c86-4d6bac6d5d56"> <scripts id="f203f156-be32-4131-9c86-4d6bac6d5d56">
<enabled>false</enabled> <enabled>false</enabled>
</scripts> </scripts>
<scripts id="f2041b5d-0cd4-4b7f-a790-98edc48e9d86">
<classRef type="TS">
<className>LinkClickHandler</className>
<packageName>ervu</packageName>
</classRef>
<enabled>true</enabled>
<expanded>true</expanded>
<properties>
<entry>
<key>eventType</key>
<value>
<simple>"NAVIGATION_TO_SOURCE"</simple>
</value>
</entry>
</properties>
</scripts>
</children> </children>
<children id="8ae2b128-9044-428e-b88e-7095f1207c97"> <children id="8ae2b128-9044-428e-b88e-7095f1207c97">
<prototypeId>fd7e47b9-dce1-4d14-9f3a-580c79f59579</prototypeId> <prototypeId>fd7e47b9-dce1-4d14-9f3a-580c79f59579</prototypeId>
@ -2885,6 +2916,22 @@
<scripts id="f203f156-be32-4131-9c86-4d6bac6d5d56"> <scripts id="f203f156-be32-4131-9c86-4d6bac6d5d56">
<enabled>false</enabled> <enabled>false</enabled>
</scripts> </scripts>
<scripts id="9d29fb9f-020d-46eb-a8c4-efd831aae46a">
<classRef type="TS">
<className>LinkClickHandler</className>
<packageName>ervu</packageName>
</classRef>
<enabled>true</enabled>
<expanded>true</expanded>
<properties>
<entry>
<key>eventType</key>
<value>
<simple>"NAVIGATION_TO_SOURCE"</simple>
</value>
</entry>
</properties>
</scripts>
</children> </children>
<children id="67caa536-dc5e-49c6-a8b9-c3c4cf9d0459"> <children id="67caa536-dc5e-49c6-a8b9-c3c4cf9d0459">
<prototypeId>fd7e47b9-dce1-4d14-9f3a-580c79f59579</prototypeId> <prototypeId>fd7e47b9-dce1-4d14-9f3a-580c79f59579</prototypeId>
@ -3167,6 +3214,7 @@
<componentRootId>613a502f-2276-454e-bb91-4596be5e94cf</componentRootId> <componentRootId>613a502f-2276-454e-bb91-4596be5e94cf</componentRootId>
<name>Гиперссылка - Закон о воинской обязанности и военной службе, ст. 7.</name> <name>Гиперссылка - Закон о воинской обязанности и военной службе, ст. 7.</name>
<container>false</container> <container>false</container>
<expanded>false</expanded>
<childrenReordered>false</childrenReordered> <childrenReordered>false</childrenReordered>
<scripts id="2fe08181-8a1e-4cda-be3a-0b0ddcb21603"> <scripts id="2fe08181-8a1e-4cda-be3a-0b0ddcb21603">
<properties> <properties>
@ -3208,6 +3256,7 @@
<componentRootId>81c3d5d2-0f2e-401d-b107-4ad7467f7b30</componentRootId> <componentRootId>81c3d5d2-0f2e-401d-b107-4ad7467f7b30</componentRootId>
<name>Текст(гссылка) - Закон о воинской обязанности и военной службе, ст. 7.</name> <name>Текст(гссылка) - Закон о воинской обязанности и военной службе, ст. 7.</name>
<container>false</container> <container>false</container>
<expanded>false</expanded>
<childrenReordered>false</childrenReordered> <childrenReordered>false</childrenReordered>
<scripts id="cf4526a1-96ab-4820-8aa9-62fb54c2b64c"> <scripts id="cf4526a1-96ab-4820-8aa9-62fb54c2b64c">
<properties> <properties>