From 9973634be0920a8b8f4591dfa9dd2a9ca1595705 Mon Sep 17 00:00:00 2001 From: Rinjae Date: Tue, 11 Aug 2026 19:10:39 +0900 Subject: [PATCH] =?UTF-8?q?UserLog=20=EC=97=94=ED=8B=B0=ED=8B=B0=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20API=20User-Agent=20=EC=B2=98=EB=A6=AC=20=EC=A7=80?= =?UTF-8?q?=EC=9B=90=20-=20UserLog=EC=97=90=20userAgent(500=EC=9E=90)?= =?UTF-8?q?=EC=99=80=20duplicate(Boolean)=20=EC=BB=AC=EB=9F=BC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20-=20=EB=A1=9C=EA=B7=B8=EC=9D=B8/=EC=8B=A4=ED=8C=A8/?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=95=84=EC=9B=83=20=EB=A1=9C=EA=B9=85=20?= =?UTF-8?q?=EC=8B=9C=20User-Agent=EC=99=80=20=EC=A4=91=EB=B3=B5=20?= =?UTF-8?q?=EC=84=B8=EC=85=98=20=EC=97=AC=EB=B6=80=20=EA=B8=B0=EB=A1=9D=20?= =?UTF-8?q?-=20TwoFactorService/Controller=20Request=20=EA=B0=9D=EC=B2=B4?= =?UTF-8?q?=20=EC=A0=84=EB=8B=AC=20=EB=B0=8F=20=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eactive/apim/portal/user/entity/UserLog.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/java/com/eactive/apim/portal/user/entity/UserLog.java b/src/main/java/com/eactive/apim/portal/user/entity/UserLog.java index 62d0bac..ef4ec3a 100644 --- a/src/main/java/com/eactive/apim/portal/user/entity/UserLog.java +++ b/src/main/java/com/eactive/apim/portal/user/entity/UserLog.java @@ -53,4 +53,19 @@ public class UserLog { @Column(name = "login_type", length = 32) private String loginType; + /** + * 요청 User-Agent 헤더 원문. 컬럼 길이(500)를 넘기면 ORA-12899 로 로그인 자체가 실패하므로 + * 저장 측({@code PortalUserLogService})에서 잘라 넣는다. 헤더 미전송 요청은 null. + */ + @Column(name = "user_agent", length = 500) + private String userAgent; + + /** + * 중복 로그인 여부 — 로그인 시점에 다른 기기/브라우저의 활성 세션이 남아 있어 + * 기존 세션이 강제 해제된 건이면 true. 실패 행·과거 행은 null. + *

primitive 가 아닌 래퍼 타입인 이유: 기존 행은 NULL 이라 primitive 로 읽으면 매핑에서 깨진다. + */ + @Column(name = "duplicate") + private Boolean duplicate; + }