- 토큰에 담는 정보는 subject(주요한 정보 = userName) , claims (부수적 정보 = role)
- 시큐리티가 알아서 userName, password 비교 대조한 후 일치하면 AuthSuccessHandler 가 실행된다.
- AuthSuccessHandler 가 Role 을 얻어와서 claims 에 저장
- subject(주요한 정보 = userName) , claims (부수적 정보 = role) 로 토큰이 만들어짐
- 서버가 보내면 웹브라우저에 저장되고 같은 서버에 요청할 때 쿠키는 자동으로 보내짐
AuthSuccessHandler 로 토큰이 발급되고 쿠키에 저장된다.
- 로그인 시점에 받은 쿠키를 항상 달고 가면 JWTFilter 로 먼저 들어간다.
- 토큰을 기반으로 Jwtfilter가 사용자가 일치하는지? 유효한 기간인지? 검증 후 응답을 보내줌
Jwtfilter -- jwtUtil -- customproperties
- jwtUtil = 토큰을 뽑아오고 만드는 메서드
- customproperties = 토큰에 관한 설정(유효시간...)
특정 메소드의 접근 권한
- 특정 메서드는 특정 role 만 접근 가능하게끔
- SecurityConfig 설정

- 컨트롤러 설정

로그인 실패시

role 정보(한가지) 간단하게 담기
- User.withUsername 사용해서 . 으로 간단하게 UserDetails 객체 만들기

Final API
- 프로젝트 생성 : DB에서 직접 데이터를 가져와서 진행

회원가입 접속 허락
- api 의 post/user 은 가입이니 토큰이 있을리가 없으므로 회원가입은 접속허락
- POST /user 은 회원가입
- whitelist 에 작성하면 get 도 받아들이니 작성하면 안됨

CustomUserDetailsService
- 로그인 처리시 호출하는 메서드로
- CustomUserDetailsService 에서 dao으로 가져오기에 Security의 authManager 는 실제 데이터를 가져와서 인증 작업을 거친다.
로그인 요청시
- userController - jwtUtil , SecurityConfig 의 AuthenticationManager 사용
- AuthenticationManager 에서 userController 에서 얻은 데이터와 CustomUserDetailsService 에서 DB에서 얻어와서 비교함

내가 auth 요청 즉 올바른 로그인 요청을 보내면 토큰이 없으니 JWT filter 를 통과하고 시큐리티에 /auth 를 작성했으니 시큐리티도 통과하고 usercontroller 의 authManagr 로 사용자 검증 후에 토큰을 발급하는 흐름
Modal
-
props ? 부모 요소에서 관리되는 loginModal.show의 값을 갖고오고 그걸 관리할 권한을 준다.

-
즉 여기서 {...props} 는 부모요소가 관리하는 show 데이터를 갖고오고 관리권한을 준다.


요소 안에 props 는 부모가 관리하는 값과 그걸 변경할 권한을 준다.
-
API 로그인 요청 시 응답받은 것 = 토큰
-
웹브라우저에서 디코딩해서 담긴 정보중 userName 과 role 을 사용한다.

API = 토큰 매개체로 상호응답
me-auto
- me-auto : 오른쪽 마진을 다 차지해서 왼쪽 정렬
- mt , me, mb , ms 으로 사용한다.
- conatiner 안에서 오른쪽 마진을 다 차지해서 왼쪽으로 정렬된다.
- 그리고 혹시 container 안에서 me-auto 가 2개라면 적당히 알아서 차지하면서 오른쪽 정렬

- bootstrap 의 마진

- css 의 마진
margin top , right , bottom , left 을 사용함
보완
-
인코딩 = 암호화
-
UserDetail 정보는 어디서 활용이 되는가?
CustomUserDetailsService(UD) 는 시큐리티에서 DB 정보를 끌어오기 위해서 사용
-
auth 와 role , DB에는 뭐가 저장되었는지?
authority 는 "ROLEUSER" 등으로 저장됨 = DB
role 는 USER 으로 저장된다. = 우리가 뽑는 형식
즉, DB 에 저장할 때는 앞에 "ROLE" 을 붙이고 authorty 으로 저장해야 한다.