Authentication을 SecurityContext 저장하는 사용방

2025. 10. 13. 10:53·개발/spring boot
728x90
반응형

 

무엇이 다른가?

1) principal(주체)

  • 위: getAuthentication() 안에서→ principal = UserDetails(여기에 email, 이름, 상태, 권한 포함)
UserDetails ud = customUserDetailsService.loadUserByUsername(userId);
return new UsernamePasswordAuthenticationToken(ud, "", ud.getAuthorities());
  • 아래:→ principal = 문자열 mbrId (부가 정보/권한 없음)
new UsernamePasswordAuthenticationToken(mbrId, null, List.of())

 

2) authorities(권한)

  • 위: ud.getAuthorities() → ROLE_ADMIN, ROLE_USER 등 실제 권한이 들어감
  • 아래: List.of() → 빈 권한 (역할 체크가 걸린 API/메서드는 403 날 수 있음)

3) 보안/동작 영향

  • @PreAuthorize("hasRole('ADMIN')") 같은 체크:
    • 위: 정상 동작
    • 아래: 실패(권한 없음)
  • @AuthenticationPrincipal 사용:
    • 위: 커스텀 UserDetails 바로 주입 가능
    • 아래: 문자열 mbrId만 들어와서 캐스팅/추가 조회가 필요
  • 계정 상태(잠김/만료) 점검:
    • 위: UserDetailsService 단계에서 검증
    • 아래: 우회됨

4) isAuthenticated 플래그

  • 세 번째 인자(권한 콜렉션)를 주는 생성자를 쓰면 isAuthenticated=true가 됩니다.
    아래 코드는 권한이 비어도 인증된 것으로 표시되지만, 권한 체크는 계속 실패합니다.

권장 패턴

가능하면 항상 위 패턴(토큰 → userId 추출 → UserDetails 로드 → 권한 포함한 UsernamePasswordAuthenticationToken)을 쓰세요.

String userId = jwtProvider.getMbrId(token);

UserDetails user = customUserDetailsService.loadUserByUsername(userId);
UsernamePasswordAuthenticationToken auth =
    new UsernamePasswordAuthenticationToken(user, null, user.getAuthorities());

// 선택: 요청 메타 정보 세팅
auth.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));

SecurityContextHolder.getContext().setAuthentication(auth);

참고: Spring Security 최신 스택(JWT 리소스 서버)을 쓰면 JwtAuthenticationToken/BearerTokenAuthentication 같은 표준 토큰을 사용할 수도 있습니다. 커스텀 구현이라도 principal=UserDetails, authorities=실권한을 채우는 습관이 핵심이에요.


한 줄 요약

  • 같은 타입 계열이지만 동일하지 않습니다.
  • 아래 코드는 “아이디만 있는 얇은 인증”, 위 코드는 “권한까지 갖춘 완전한 인증”.
  • 권한 체크/주입 편의성 때문에 위 방식을 사용하세요.
728x90
반응형

'개발 > spring boot' 카테고리의 다른 글

(Spring) sso 외부 인증 토큰을 검증하고 세션에 사용자 정보를 저장하는 흐름  (0) 2026.01.07
resolveLocale(req)가 하는 일 - 이 요청의 언어/국가(locale)를 어떻게 정할까?  (0) 2025.10.15
Spring Boot와 React 프로젝트를 하나로 합쳐서 개발하고 배포  (2) 2025.07.26
controller에서 URL 패턴 매칭 순서는 가장 구체적인(specific) 패턴이 먼저 매칭  (0) 2025.04.16
스프링에서 리플렉션을 이용한 빈(Bean) 생성 및 의존성 주입: 원리와 동작 방식 정리  (0) 2025.04.16
'개발/spring boot' 카테고리의 다른 글
  • (Spring) sso 외부 인증 토큰을 검증하고 세션에 사용자 정보를 저장하는 흐름
  • resolveLocale(req)가 하는 일 - 이 요청의 언어/국가(locale)를 어떻게 정할까?
  • Spring Boot와 React 프로젝트를 하나로 합쳐서 개발하고 배포
  • controller에서 URL 패턴 매칭 순서는 가장 구체적인(specific) 패턴이 먼저 매칭
nix-be
nix-be
  • nix-be
    NiX
    nix-be
  • 전체
    오늘
    어제
    • 홈
      • 책
        • 오브젝트
      • 성장
        • jpa Querydsl 정리
        • 코딩테스트
        • 스프링 핵심 원리 - 기본편
      • 인프라
        • linux
        • vmware
        • CI&CD
        • 네트워크
        • docker
      • 개발
        • spring boot
        • spring security
        • JPA
        • java
        • thymeleaf
        • 이슈
        • jquery
        • javascript
        • 안드로이드
        • MyBatis
        • git
        • 과제
      • DB
        • postgreSql
        • mysql
        • redis
      • 잡다한것
        • 프로그램
        • 일상 관련
        • 프로젝트-주차관리
      • 회사
        • 티
        • 피
  • 블로그 메뉴

    • 홈
    • 개발
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
nix-be
Authentication을 SecurityContext 저장하는 사용방
상단으로

티스토리툴바