Spring Security

young·2023년 7월 21일
0

Spring Security

목록 보기
1/7
post-thumbnail

스프링 시큐리티

  • 막강한 인증과 인가 기능을 가진 프레임워크
  1. build.gradle에 스프링 시큐리티 의존성 추가

implementation('org.springframework.boot:spring-boot-starter-oauth2-client')

spring-boot-starter-oauth2-client

  • 소셜 로그인 등 클라이언트 입장에서 소셜 기능 구현 시 필요한 의존성
  • spring-security-oauth2-client와 spring-security-oauth2-jose를 기본으로 관리

2.config.auth package 생성

  • 시큐리티 관련한 클래스 모두 이 곳에 저장

3.SecurityConfig 클래스 생성

4.CustomOAuth2UserService 클래스 생성

  • 구글 로그인 이후 가져온 사용자의 정보들을 기반으로 가입 및 정보 수정, 세션 저장들의 기능 지원

5.OAuthAttributes 클래스 생성

  • Dto로 보기 때문에 dto패키지를 만들어도 됨

6.SessionUser 클래스 추가

  • 인증된 사용자 정보만 필요하고, 그 외 필요한 정보들은 없어서 name, email,picture만 필드로 선언함

User 클래스가 아닌 SessionUser 사용?
: 세션에 저장하기 위해 User 클래스를 세션에 저장하려고 하면, 에러 발생=> 직렬화를 구현하지 않았기 때문

  • User 클래스는 엔티티기 때문에, 다른 엔티티와 관계 형성을 하기도 함
    즉, 성능 이슈나 부수 효과 발생 확률 UP
    => 직렬화 기능 가진 세션 Dto 하나를 추가로 만들어서 운영 및 유지보수

==============================================

어노테이션 기반 코드 개선

SessionUser user = (SessionUser) httpSession.getAttribute("user");

  • index 메소드 외에 다른 컨트롤러와 메소드에서 세션 값 필요하면 그 때마다 직접 세션에서 값 가져와야 함
    => 메소드 인자로 세션값을 바로 받을 수 있도록 변경

1.@LoginUser 어노테이션 생성
config.auth 패키지에 @LoginUser 어노테이션 생성

2.LoginUserArgumentResolver 생성

  • Login-UserArgumentResolver라는 HandlerMethodArgumentResolver 인터페이스를 구현한 클래스

    HandlerMethodArgumentResolver는 1가지 기능을 지원한다.
    : 구현체가 지정한 값으로 해당 메소드의 파라미터로 넘길 수 있음

-> @LoginUser 사용하기 위한 환경 구성됨

3.스프링에서 인식될 수 있도록 WebMvcConfigurer에 추가하기
4.config 패키지에 WebConfig 클래스 생성

HandlerMethodResolver는 항상 WebMvcConfiguration의 addArgumentResolvers() 통해 추가해야 함

profile
ฅʕ•̫͡•ʔฅ

0개의 댓글