전체 글 162

블로그 만들기 - OAuth2 handler가 동작하지 않는 에러

google로 OAuth2 로그인을 구현했으나,   로그인 시 문제 상황은   기대 :  인증 후 /articles?token=로 리다이렉트되길 원했지만,  실제 : 리다이렉트가 이루어지지 않고, 기본 경로(/)로 이동      내가 지정해놓은 handler를 타지 않았다. 일반적인 실패라면 failureHandler라도 탔을텐데 타지 않고 redirect 주소도 무시했다..         OAuth2 로그인 흐름 개요   총 크게 3번의 흐름으로 http 요청 및 응답 사이클이 돌아간다.   1. 클라이언트 → 서버 (OAuth2 로그인 요청)주요 흐름:1️⃣ 사용자가 /login 페이지에 접근2️⃣ Spring Security가 /oauth2/authorization/google로 리다이렉트3️⃣ 구..

프로젝트 2025.04.03

Oauth 흐름

전체 흐름 개요사용자가 프론트엔드에서 "구글로 로그인" 버튼 클릭:프론트엔드가 /oauth2/authorization/google로 요청을 보냄.백엔드에서 필터 체인 실행:Spring Security의 필터 체인이 요청을 처리.OAuth2AuthorizationRequestRedirectFilter가 요청을 처리하고 구글로 리다이렉트.구글 로그인 페이지로 이동:사용자가 구글에서 로그인.구글에서 콜백 요청:구글에서 백엔드의 콜백 URL(예: /login/oauth2/code/google)로 리다이렉트.백엔드에서 다시 필터 체인 실행.인증 성공 후 처리:OAuth2SuccessHandler가 실행되어 토큰 발급 및 리다이렉트.이제 각 단계를 백엔드 기준으로 자세히 따라가 보겠습니다.1. 사용자가 프론트엔드에..

카테고리 없음 2025.04.01

블로그 만들기 -Oauth2구글에 요청이 자동으로 간다고?

예전에 팀 프로젝트를 할 당시 로그인을 맡아서 했었는데 완전 햇병아리에다가 처음 코딩을 접할 시기라security가 진짜 너무 어려웠다.. 특히 Oauth는 계속 실패해서 원인조차 찾지 못할 시기가 있었으니..   어디까지 security에서 해주고 (filter와 super.load 등)나는 어디서부터 어디까지 구현해야할 지 너무 헷갈렸다.    security의 핵심은!  다른 모듈들을 거쳐 UserDetailsService 에서 UserDetails 를 반환,반환된 UserDetilas 가 SecurityContext 내부의 Authentication에 들어가게 된다. (이전 글에서 jwt에서 적어놈)  그러나 Oauth의 경우 소셜 로그인은 DefaultOAuth2UserService를 호출, 이..

프로젝트 2025.03.31

블로그 만들기 - cookie와 util 클래스를 static으로?

Oauth2 구글을 활용하기 위해 클라이언트에 내려줄 cookie를 설정해주는 작업을 해봤다.. 사실 예전에 프로젝트에서 jwt 토큰으로 인증까진 성공했었는데 oauth는 쓰린 실패의 맛을 봤어서 다시 차근차근 공부하고 있다.  쿠키는 크기 제한이(보통 4KB)이 있으므로, 큰 데이터는 세션이나 DB에 저장하는 게 낫다. 나는 간단하게 토큰 값만 저장할 거라서 쿠키에 저장하면 좋겠다 싶었음 쿠키는 되게 간단하다. package me.hanjun.util;import jakarta.servlet.http.Cookie;import jakarta.servlet.http.HttpServletRequest;import jakarta.servlet.http.HttpServletResponse;import org.s..

프로젝트 2025.03.30

블로그 만들기 - controller test (ObjectMapper)

스프링에서 테스트가 익숙치 않은데 그 중에서도 더 익숙하지 않은 경우는 controller test이다..mock으로 직접 설정하고 해야하기에.. @Test@DisplayName("createNewAccessToken() : 새로운 액세스 토큰을 발급한다.")void createNewAccessToken() throws Exception { //given final String url = "/api/token"; User testUser = userRepository.save(User.builder() .email("user@email.com") .password("test") .build()); String refreshT..

프로젝트 2025.03.29

블로그 만들기 - jwt TokenProvider 테스트 오류

전에 만든 TokenProvider를 테스트 하기 위해 테스트 코드를 작성 중    jwt토큰 초기화 및 빌드해 유용하고 쉽게 테스트 하기 위해 준비했고      1. generateToken 테스트      실제 유저 생성 후 토큰 값으로 넘겨서 parser() 로 비교했을 때 같은 지 비교하는 구문에서   빌더가 제대로 작동하지 않는 이슈가 있었다.  롬복의 문제인 듯 싶어   @getter를 확인하니 역시나 fail lombok의 문제인 게 확실했고, 에너테이션 및 dependencies를 확인해도 찾을 수 없었지만,,   문제는 testAnnotationProcessor을 따로 추가하지 않아서.. 생긴 문제다        그럼 왜  annotationProcessor 선언을 해야 할까? 의미가 궁..

프로젝트 2025.03.26

블로그 만들기 - spring Security 로그아웃

예전에 프로젝트에서 Security를 맡았던 기억이 있는데,그땐 logout의 경우 인증 정보를 강제로 없앴다 (따로 요청 없이 프론트에서 인증 정보를  없애버렸다..)  여튼 logout을 하는데 왜 request와 response가 둘 다 필요한 지 이해가 안 가 찾아보니..    request는 서버 쪽을 관리한다면response로 클라이언트 측 쿠키나 사애를 정리하게 해야한다.  SecurityContextHolder.getContext().getAuthentication(): 현재 인증된 사용자의 인증 객체를 가져옵니다.logout(request, response, authentication): 세션 종료, 컨텍스트 정리, 쿠키 삭제 등을 수행합니다.  request와 response를 둘 다 ..

프로젝트 2025.03.20

LeetCode1717. Maximum Score From Removing Substrings

https://leetcode.com/problems/maximum-score-from-removing-substrings/submissions/1321816444/?envType=daily-question&envId=2024-07-12       1. 문제 및 접근   1717. Maximum Score From Removing Substrings String 값을 주고, ab를 지우면 x점수, ba를 지우면 y점수를 얻을 수 있다최대 얻을 수 있는 점수를 반환 높은 점수대로 그리디를 쓰면 될 것 같은데 전체 탐색하니 시간초과StringBulider에 담아서 담을 때 마다 판별 후 삭제하자   Constraints:1 1 s consists of lowercase English letters.     ..

알고리즘 2024.07.16