기간
2023/4/17 ~ 2023/4/21

수업
실시간 ZOOM 수업


Day 28(스프링 시큐리티)

Session의 Security ContextHolder의 Authentication 객체에 UserDetails(유저 오브젝트), Credential(비번), Authority(권한) 저장

  1. /login Post 요청(form)
    1. usernamePasswordAuthenticationFilter 발동
      1. usernamePasswordToken 발행
      2. userDetailsService의 loadByUsername() 호출
        1. 내부구현
          1. DB에 username 존재 확인
          2. user 오브젝트(영속화) 리턴 받고
          3. userDetails를 생성
          4. Authentication 객체 생성
          5. sch에 담기
  2. JWT를 쓰려면
    1. upafilter 무력화(form x)
    2. 시큐리티 필터
      1. jwt 필터(인가) 검증 추가
        1. 토큰 검증
        2. 강제 세션 만들기(Security ContextHolder의 Authentication 객체 생성)
    3. 인증
      1. /login (컨트롤러에서 처리)

UserDetailsImpl에 오버라이드한 getAuthorities()메소드의 authorities.add(()-> "ROLE_"+user.getRole()); 는 문법 ROLE_ADMIN 이런 식

근데 SecurityConfig의 hasRole에는 SecurityExpressionRootdefaultRolePrefix 에 “ROLE_”로 되어 있어서 hasRole(”ADMIN”)이런 식으로 넣어야 함……


Day 29(블로그 프로젝트)

intellij에서 .http로 api 테스트할 수 있음


Day 30

@EntityGraph()쓰지 말자
웬만하면 Lazy Loading하고 N+1은 fetch join으로 해결

profile
웹퍼블리셔의 백엔드 개발자 도전기

0개의 댓글