기존의 security login을 만들때는 로그인이 완료가 되면 코드를 받아서 다시 액세스 토큰을 요청하고 그 토큰으로 사용자 정보를 받아오는 프로세스를 사용했다.
oauth는 이미 코드는 받았고 알아서 액세스 토큰을 요청하고 정보까지 받아온다 .
Spring Security
- 자기만의 시큐리티 세션이 있음
- 그 시큐리티 세션에는 Authentication 객체밖에 들어갈수 없다.( controller에서 DI를 해줄수 있음)
- 그 Authentication 안에는 두가지 타입이 들어갈수 있다 → UserDetails 와 OAuth2User 타입
- UserDetails는 일반 로그인, OAuth2User oauth 로그인을 진행할때 authentication안에 들어오게되는 타입이다.
- 근데 이걸 일반 로그인일때는 Controller에서 UserDetails를 사용하고 oauth 일때는 OAuth2User을 타입으로 지정해서 사용하기에는 불편함이 있다 → PrincipalDetails에서 둘다를 구현하여 controller에서는 PrincipalDetails만 호출해서 사용하자!
Controller 예시
@GetMapping("/user")
public @ResponseBody String user(@AuthenticationPrincipal PrincipalDetails principalDetails){
return "user";
}
}
PrincipalDetails 예시
@Data
public class PrincipalDetails implements UserDetails, OAuth2User {
private User user;
public PrincipalDetails(User user) {
this.user = user;
}
@Override
public Map<String, Object> getAttributes() {
return null;
}
...
이런식으로 코드를 짜면 controller단에서 PrincipalDetails만 사용하면 된다.
'JAVA' 카테고리의 다른 글
JWT (2) | 2022.11.30 |
---|---|
spring boot 프로젝트 생성과 사용 이유 (0) | 2022.10.31 |
LocalDate 와 LocalTime (0) | 2022.08.25 |
애플리케이션 테스트 DB 구분 (0) | 2022.08.18 |
spring hateoas (0) | 2022.08.01 |