Settings


TODO
- Form으로 username, password 넘기는 코드 작성
- Spring Security + JWT로 인증 및 CORS, Access 권한 부여
- Spring Security는 기본적으로 negative 전략 : 모든 접근을 일단 차단
- 권한이 부여되면 풀어주는 식으로 적용 (이때까지 한 것의 반대)
- (가능하면) OAuth 2.0 적용
Spring Security
- 기존 방식의 UserService, UserRepository에서 비밀번호를 비교하는 방식이 아닌, Spring Security에서 제공하는 UserDetails를 상속 받아 사용
- UserController에서 login 메서드를 따로 만들지 않으면 Spring Security 내부 메서드인 login이 작동 → UserDetails 및 AuthenticationFilter 등에 의해 로그인 로직 작동
- 로그인 body는 x-www-form-urlencoded 형태
- 필터를 거친 후 로그인 정보가 토큰 방식으로 저장됨
- username, password 형태
- 로그인 정보를 AuthenticationProvider에 전달하고, Provider는 자동으로 loadUserbyUsername 메서드 호출
- 이때, 받아온 password와 유저 정보를 비교해서 자동으로 인증 진행
- 비밀번호가 같아서 인증이 되면 UserDetail 반환
- 비밀번호가 다르거나 일치하는 User가 없으면 Exception
- 성공하면 Session 내부의 Authentication에 3가지 정보를 저장
- UserDetail = User
- Password
- Authority (권한)
- 이후 이 세션 키를 사용자에게 반환
- 세션 방식, JWT 방식 등 다양한 인증 방식 존재
- AwareFilter에서 권한을 따로 설정하여 해당 유저에게만 권한을 열어주거나, 권한이 없을 경우 접근을 차단할 수 있음
- 권한은 “ROLE_XXXX”의 형태로 확인
- UserDetails의 getAuthorities 메서드를 사용해서 User 정보에 권한을 자동 설정
- 접근 권한을 여러 사람이 한 번에 들어올 수 있게 만들 수도 있고, 권한은 구분하되 유저가 여러 권한을 가지게 설계할 수도 있음
- hasAnyRole() : 내부의 권한 중 하나라도 가지고 있으면 접근 가능


1. 세션 인증 방식2. JWT 인증 + REST API
Share article