JAVA

google oauth

응디 2022. 10. 6. 15:17

기존의 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