Skip to content

Conversation

@sapiens2000
Copy link
Collaborator

@sapiens2000 sapiens2000 commented Mar 28, 2025

코드가 좀 더럽네요..

  • 카카오 등록
  • ec2 배포해서 통신 테스트(현재 http -> 변환 https)
  • 리프레시 토큰 DB 저장(현재 리프레시 토큰 만료는 체크 X
  • 로그아웃 구현
  • 코드 리팩토링

월요일까지 우선순위

  • ec2 배포
  • 로그아웃
  • 리프레시 토큰 DB 저장(rdb)
  • 소나 클라우드 수정

특이사항

  • 소나 클라우드 권한 문제때문에 우선 자동 분석만 쓰게 놔두고, 수동은 막아놨습니다.

chore: application-secret.yml ignore 추가
feat: cors 설정도 내부에 같이 추가
chore: application-secret.yml ignore 추가
feat: cors 설정도 내부에 같이 추가
feat: jwt 발급위한 util 클래스 추가
singletone enum 경고 우선은 비활성화 함
네이버의 경우 닉네임도 추가
feat: CustomOAUth2UserService 정의
feat: CustomOAUth2User로 변환 위한 Dto 정의
feat: SuccessHandler 정의
유저 엔티티, dto 일부 수정
유저 엔티티, dto 일부 수정
UserRepository 수정
카카오 등록 안해서 우선 지웠음
네이버는 response 안에 response가 있음
만료 측정 잠시 주석처리
@sonarqubecloud
Copy link

sonarqubecloud bot commented Apr 1, 2025

Please retry analysis of this Pull-Request directly on SonarQube Cloud

@sonarqubecloud
Copy link

sonarqubecloud bot commented Apr 1, 2025

Quality Gate Failed Quality Gate failed

Failed conditions
7 Security Hotspots

See analysis details on SonarQube Cloud

@github-actions
Copy link

github-actions bot commented Apr 1, 2025

Claude의 전체 변경사항 및 관련 파일에 대한 리뷰:

개선된 사항:

  • OAuth2 인증 및 JWT 토큰 관리를 위한 체계적인 구조가 구현되었습니다.
  • 사용자 관리 기능이 확장되어 소셜 로그인 지원이 추가되었습니다.
  • 보안 설정이 강화되었습니다.

주요 이슈:

  1. 토큰 관리 개선 필요:

    • 제안: JWT 토큰 생성 및 검증 로직을 더욱 견고하게 만들어야 합니다. 예를 들어, 토큰 만료 시간을 환경 변수로 관리하고, 토큰 갱신 로직을 추가할 수 있습니다.
    @Value("${jwt.access-token-validity-in-seconds}")
    private long accessTokenValidityInSeconds;
    
    public String createAccessToken(User user) {
        return Jwts.builder()
            .setSubject(user.getEmail())
            .claim("userId", user.getUserId())
            .claim("role", user.getRole())
            .setIssuedAt(new Date())
            .setExpiration(new Date(System.currentTimeMillis() + accessTokenValidityInSeconds * 1000))
            .signWith(secretKey)
            .compact();
    }
  2. 예외 처리 강화:

    • 제안: 사용자 정의 예외를 더 추가하고, 글로벌 예외 핸들러를 구현하여 일관된 에러 응답을 제공해야 합니다.
    @RestControllerAdvice
    public class GlobalExceptionHandler {
        @ExceptionHandler(UserNotFoundException.class)
        public ResponseEntity<ErrorResponse> handleUserNotFoundException(UserNotFoundException ex) {
            ErrorResponse response = new ErrorResponse(HttpStatus.NOT_FOUND.value(), ex.getMessage());
            return new ResponseEntity<>(response, HttpStatus.NOT_FOUND);
        }
    }
  3. 보안 강화:

    • 제안: CSRF 보호, Rate Limiting 등의 추가적인 보안 기능을 구현해야 합니다.
    @Configuration
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                .csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
                .and()
                .addFilterBefore(new RateLimitFilter(), UsernamePasswordAuthenticationFilter.class);
        }
    }

관련 파일에 대한 영향 분석:

  • JwtUtil, JwtAuthenticationFilter, OAuth2AuthenticationSuccessHandler 등의 변경은 전체 인증 프로세스에 영향을 미칩니다. 기존의 인증 로직을 사용하는 모든 부분을 검토하고 필요시 수정해야 합니다.
  • User 엔티티의 변경으로 인해 UserRepository, UserService 등 관련 클래스들의 메서드 시그니처나 로직이 영향을 받을 수 있습니다. 특히 providerId 타입 변경 (Long에서 String으로)은 주의 깊게 확인해야 합니다.
  • 새로운 DTO와 예외 클래스의 추가로 인해 컨트롤러와 서비스 레이어의 코드를 일관성 있게 수정해야 할 수 있습니다.

전반적인 의견:
이번 변경사항들은 OAuth2 기반의 소셜 로그인 구현과 JWT를 이용한 인증 시스템 구축에 초점을 맞추고 있습니다. 전반적으로 잘 구조화되어 있지만, 보안 강화와 예외 처리 개선이 필요합니다. 또한, 변경된 User 엔티티와 관련된 부분들의 일관성 있는 수정이 필요합니다.

@sapiens2000 sapiens2000 merged commit ef1fe0c into develop Apr 1, 2025
3 of 4 checks passed
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.

3 participants