Skip to content

MP-160 ✨ Feat: 일반 로그인 및 로그아웃#53

Merged
Reality-out merged 86 commits intodevelopfrom
MP-160-feature-normal-login
Jun 20, 2025
Merged

MP-160 ✨ Feat: 일반 로그인 및 로그아웃#53
Reality-out merged 86 commits intodevelopfrom
MP-160-feature-normal-login

Conversation

@ParkJunHee9327
Copy link
Copy Markdown
Collaborator

No description provided.

…eans' into MP-142-feature-spring-security-beans
- 모든 애플리케이션에 걸쳐 사용될 보안 설정을 마련하기 위해 SecurityConfig를 추가함
- 프로젝트의 최신 구조를 반영하기 위해 TermCrudApiPath 클래스를 삭제함
- 일반 로그인의 요청을 받기 위해 구현함
- 일반 로그인 컨트롤러와 보안 필터의 통합적 기능을 테스트하기 위해 구현함
- 애플리케이션 전역에 걸쳐 보안 설정을 적용하기 위해 구현함
- 사용자의 인증에 사용하기 위한 인가 토큰 및 사용자 세부 사항을 구현함
- 사용자가 이메일과 비밀번호로 인증할 때 사용할 커스텀 필터와 인가 제공자 구현
- 사용자의 정보를 로딩하는 데 필요한 커스텀 UserDetailsService 구현
- 사용자의 UserDetails를 구현할 때 필요한 매퍼들 구현
- 보안 설정 파일들이 중복되는 문제가 발생하여 사용하지 않는 보안 설정 파일들을 삭제함
- 코드의 간결성을 위해 불필요한 import문을 일괄 삭제함
- 필터의 실행 조건을 명확히 하기 위해 HTTP 메서드를 실행 조건에 추가함
- AuthenticationManager가 반환한 Authentication 객체가 인증된 토큰임을 나타내기 위해 변수 이름을 변경함
- 보안 컨텍스트를 새로운 값으로 대체함을 명시하기 위해 저장 로직을 수정함
- Role enum 타입을 사용할 때 상수의 값이 아닌 이름이 의도하는 값이므로 이름을 사용함
- 인증 토큰이 인증 전과 후에 제공해야 하는 데이터가 다른 점을 반영하고 커스텀 인증 토큰의 재사용성을 높이기 위해 필드를 수정함
- 인증 후에 보안 상 credential을 폐기하는 것이 안전한 점을 인증 후의 커스텀 토큰 생성자에 반영함
- normal 패키지 하에 일반 로그인이 추가되어 일반 회원가입과 구분할 필요성이 생겨 이동 조치함
- 필터의 역할을 분명하게 하기 위해 이름을 변경함
- 보안의 맥락에서 신원 증명의 요건인 credential과 인증된 사용자인 principal의 의미를 필드에 반영함
- 백엔드에서 기기 id를 제공해주기로 합의된 점을 반영함
- 커스텀 필터에서 인증을 완료한 후 인증 마무리 과정을 구성하기 위해 생성함
- credential과 principal이 담는 데이터가 바뀐 점을 인증 과정에 반영함
- 커스텀 사용자 세부사항의 데이터를 제공하기 위해 생성함
 - normal에 속한 회원가입과 로그인을 구분하기 위해 변경함
 - 컨트롤러 메서드에서 응답을 구현하기 위해 요청을 컨트롤러 메서드로 내보냄
 - 접근 토큰과 리프레시 토큰 어트리뷰트에 TokenPair가 아닌 각각의 토큰들을 담도록 함
 - 인증 성공과 실패를 컨트롤러에서 구분하기 위해 인증 성공 경로를 설정함
 - 로그아웃 설정에 clearAuthentication()이 invalidateHttpSession()의 기능을 포함한다는 점을 반영함
- 필터가 촉발되는 HTTP 메서드를 가시적으로 표시함
- 폐기된 deviceId를 에러 메시지에서 제거
- 필터가 촉발되는 HTTP 메서드를 가시적으로 표시함
- 폐기된 deviceId를 에러 메시지에서 제거
- hasRole()이 자동적으로 ROLE_ 접두어를 추가하는 기능과 값이 충돌하여 발생하는 문제를 해결함
- 토큰의 갱신을 백엔드가 일괄적으로 처리하게 되어 만료 시간을 보내줄 필요가 없으므로 토큰의 만료 시간을 클라이언트에 보낼 필요성이 사라짐
- Spring Security의 핸들러 명명 관례를 따르고 핸들러들의 역할을 분명히 하려는 목적으로 수정함
- 실패의 경우 추후 비즈니스 로직의 도입 가능성이 낮기에 비즈니스 로직을 호출하는 컨트롤러의 필요성이 없음
- 인증 제공자에 if로 설정된 조건들이 서로 연관 관계가 없고, 코드의 간결성을 위해 수정함
- JWT 삭제 로그아웃 핸들러에서 리프레시 토큰의 변수 이름을 간략화하여 가독성을 높임
- 이미 구현된 기능이 있으므로 보안 계층에서 직접 예외를 던지지 않고 검증 서비스를 사용함
@Reality-out Reality-out force-pushed the develop branch 2 times, most recently from 766c6fa to 9fb713a Compare June 19, 2025 07:27
* http 패키지 대신 http.request 패키지 사용
* checkFieldValidation을 isEmailOrPasswordNull로 재명명
* SiteMemberAuthProvider 대신 AuthenticationProvider를 빈 타입으로 설정
* 예외 메시지 한글로 변경
* 처리되는 예외 순서 변경(InactiveException을 맨 아래로 조정)
* SecurityConfig에서 SecurityContextHolder 빈 등록 로직을 삭제
* 테스트 실패 문제 해소
* 기타 잡다한 과업
@Reality-out Reality-out merged commit 6c75da9 into develop Jun 20, 2025
@koyeb koyeb Bot temporarily deployed to production-specified-jaquith/modusplant-backend June 20, 2025 11:34 Inactive
@Reality-out Reality-out deleted the MP-160-feature-normal-login branch June 20, 2025 11:36
@Reality-out Reality-out restored the MP-160-feature-normal-login branch June 20, 2025 11:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants