스프링 시큐리티의 필요성 : 아무나 API를 호출 할수 없기 때문에 API가 호출될때마다 사용자 인증을 해줘야된다.
우리의 시큐리티 구조는 인증 후 인가를 한다. 즉 쉽게 말해 신원을 확인후 신원을 확인한 사람한테 접근 권한을 주는것 이다.
즉 스프링 스프링 시큐리티는 인증을 위해 있는것이며, 서블릿 필터의 집합이라고 볼 수도 있다.
이론을 정리하기 전에 방법을 정리해보자
1. config에서 SecurityConfig 클래스 생성 (스프링 버젼이 올라가면서 WebSecurityConfigurerAdapter 클래스가 Deprecated됨) 그러므로 @Bean 어노테이션으로 시큐리티를 추가해야한다.
WebMvcConfigurer를 implementations 받는다.
2. JwtAuthFilter 클래스 생성
1. Jwt의 인증정보를 SecurityContext에 저장하는 역할을 합니다. 즉 JwtFilter의 doFilter 메소드에서 Reqeust가 들어올 때 SecurityContext에 Authentication 객체를 저장해 사용함.
2. OncePerRequestFilter 을 extends(상속) 받습니다.
3. jwtutil 클래스 생성
Token의 생성, 인증정보 조회, 유효성 검증, 암호화 설정 등의 역할을 하는 클래스 입니다.
(참고 원래는 InitializingBean을 implemnets 받아 afterPropertiesSet을 Override 하는 이유는 TokenProvider Bean이 생성되고, 주입을 받은 후에 secret 값을 Base64 Decode해서 key 변수에 할당하기 위함입니다.)
4. JwtAccessDeniedHandler 클래스 생성
403(Forbidden Exception 에러) 을위한 클래스 AccessDeniedHandler를 implements 받음
5. JwtAuthenticationEntryPoint 클래스 생성
401(UnAuthorized Exception 에러) 을위한 클래스 AuthenticationEntryPoint를 implements 받음
6. UserDetailServiceImpl 클래스 생성
spring security의 UserDetailService를 implements 받아 구현합니다.
전달받은 User 정보로 권한을 조회하고 존재여부, 있다면 활성화 여부에 따라 User 객체를 생성하여 전달합니다.
7. UserDetailsImpl 클래스 생성
spring security의 UserDetails를 implements 받아 구현합니다.
UserDetailServiceImpl 에서 유저정보를 담아와서 UserDetailsImpl 객체에 저장
'개인프로젝트' 카테고리의 다른 글
웹플럭스란 (0) | 2023.03.21 |
---|---|
개인프로젝트 5일차 (0) | 2023.03.20 |
개인프로젝트 3일차 (0) | 2023.03.17 |
개인프로젝트 2일차 (0) | 2023.03.16 |
개인프로젝트 1일차 (0) | 2023.03.15 |