spring 개념 정리

SeonKyum·2021년 11월 11일
0

백엔드 개념

목록 보기
16/23

1. jwt 토큰

1) 의존성 추가

jwt 의존성을 추가해준다.

implementation 'io.jsonwebtoken:jjwt:0.9.1'

2) UserDetails 생성

스프링 시큐리티에서 관리하는 UserDetails 타입의 객체를 생성해야한다.

public class UserDetailsImpl implements UserDetails {

private final User user;

@Override
public String getPassword() {
return user.getPassword();
}
@Override
public String getUsername() {
return user.getNickname();
}
}

3) UserRepository 추가

public interface UserRepository extends JpaRepository<User, Long> {
Optional findByEmail(String email);
}

4) UserDetailsService 생성

스프링시큐리티에서 유저를 찾는 메소드를 제공하는 UserDetailsService를 추가한다.

UserDetailsService의 loadUserByUsername메소드를 오버라이딩 하여 유저를 찾는 방법을 직접 지정한다.

반환타입은 UserDetails타입이어야한다.

public class CustomUserDetailService implements UserDetailsService {

@Autowired
private UserRepository userRepository;

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    return userRepository.findByEmail(username)
            .orElseThrow(() -> new UsernameNotFoundException("사용자를 찾을 수 없습니다."));
}

}

5) JWT유틸 클래스 추가

JWT을 생성, 검증, 정보추출 해주는 클래스이다.

JWT필터 안에서만 사용할 수 있으면 된다.

6) 6. JWT필터 추가

인증에 성공하면 authentication객체를 Context안에 넣는다.

인증에 실패하면 아무런 과정 없이 다음 필터로 넘어간다.

7) 스프링 시큐리티 설정

JWT필터를 스프링 시큐리티가 관리하려면 설정에서 추가해줘야한다.

필터는 new를 사용해서 객체를 생성하여 등록해주어야 한다.

필터에 @Component나 @Bean을 붙이게 되면 new로 선언해준것 외에도 한번 더 필터로 등록되기 때문이다.

쿠키에 있는 토큰을 전달할 것이기 때문에 CORS설정 또한 해주어야한다.

8) 스프링 설정

스프링 시큐리티에서 스프링의 CORS설정을 가져다 사용할 수 있도록 설정해준다.

클라이언트의 쿠키를 전달하고 받을 것이기 때문에 allowCredentials를 true로 설정한다.

클라이언트의 쿠키에 전달한 헤더를 exposedHeader안에 넣어주어야 한다.

profile
차근차근,,

0개의 댓글