[웹 보안] 보안 로직 추가 후 로그인이 즉시 풀리는 현상 (Session Fixation 방어와 invalidate()의 함정)
·
◈ Study/웹 보안(Web Security)🔐
- 보안 로직 추가 후 로그인이 즉시 풀리는 현상최근 로그인 시 보안 강화를 위해 세션 고정(Session Fixation) 공격 방어 로직을 추가하던 중, 로그인이 성공하자마자 풀려버리는(인증이 유지되지 않는) 이슈를 겪었습니다.겉보기엔 올바른 보안 로직 같아 보이지만, HttpSession의 생명주기와 인증 컨텍스트 처리 방식에 대한 오해에서 비롯된 흔한 실수였습니다. 해당 문제의 원인과 해결 방법을 정리하여 공유합니다. 1. 문제 상황 로그인 프로세스 도중, 세션 하이재킹을 방지하기 위해 기존 세션을 파기하고 새로운 세션을 발급하는 아래 코드를 추가했습니다. 그런데 이 코드가 실행된 직후 클라이언트가 비로그인 상태가 되는 현상이 발생했습니다. // 문제의 코드: 세션 고정 공격 방어 로직HttpS..
[백준/BOJ] 2447번: 별 찍기 - 10 - JAVA [자바]
·
◈ Coding Test/백준(BOJ)👨🏻‍💻
- 백준 2447번: 별 찍기 - 10문제재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다.크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 하나씩 있는 패턴이다.*** * * ***N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N/3)×(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태이다. 예를 들어 크기 27의 패턴은 예제 출력 1과 같다.입력첫째 줄에 N이 주어진다. N은 3의 거듭제곱이다. 즉 어떤 정수 k에 대해 N=3k이며, 이때 1 ≤ k 출력첫째 줄부터 N번째 줄까지 별을 출력한다.import java.io.BufferedReader;import ja..
[JAVA] Reflection 활용하여 객체 필드 복사하기 [원본 객체에서 필드 값을 읽어 대상 객체에 값 설정]
·
◎ Java/Java☕
- Reflection 활용하여 객체 필드 복사하기public class ReflectionExample { public static void copyFields(Object source, Object target) throws Exception { Class sourceClass = source.getClass(); Class targetClass = target.getClass(); Field[] sourceFields = sourceClass.getDeclaredFields(); for (Field sourceField : sourceFields) { try { Field targetField = ..
[Error Note] java.lang.IllegalStateException: closed 해결 방법 [ResponseBody.string()을 여러 번 호출]
·
◈ Study/에러노트(Error Note)🧱
- java.lang.IllegalStateException: closed 해결 방법 java.lang.IllegalStateException: closed at okio.RealBufferedSource.select(RealBufferedSource.kt:218) at okhttp3.internal.Util.readBomAsCharset(Util.kt:265) at okhttp3.ResponseBody.string(ResponseBody.kt:187) at G2B.g2b.service.BidService.testAPI(BidService.java:716) at G2B.g2b.controller.MainController.index(MainController.java:20) at java.base/jdk..
[Spring] ResponseEntity의 유용한 메소드들 [200 OK, 400 Bad Request, 404 Not Found, 201 Created 등]
·
▣ Framework/Spring🍃
- ResponseEntity의 유용한 메소드들1. ResponseEntity.ok(): 200 OK 응답 반환return ResponseEntity.ok("성공");2. ResponseEntity.badRequest(): 400 Bad Request 응답 반환return ResponseEntity.badRequest().body("잘못된 요청입니다.");3. ResponseEntity.notFound(): 404 Not Found 응답 반환return ResponseEntity.notFound().build();4. ResponseEntity.created(): 201 Created 응답 반환 (새로운 리소스 생성 시)URI location = URI.create("/resource/1");return..