나의 생각을 적는다.
언젠가는 이 글을 보면서 아 이때 이런 생각을 하며 궁금해하고 공부했구나하겠지.
인간이란 동물이 다른 동물과 큰 차이점은
아무래도 생각을 하고
그 생각을 적고
적은 걸 다시 볼 수 있는 것 아닌가! 싶다.
나는 스프링 시큐리티를 구현하면서 인터셉터를 사용하지 않고 필터와 jwt를 사용해서 구현했다.
왜 필터를 사용했냐고 누가 물으면, 엄마가 좋아요 아빠가 좋아요?라고 되묻자고 현업 친구가 말했다.
스프링 시큐리티는 어떤 필터들을 연결시켜서
컨트롤러 단에 가기 전에 인증/인가에 대한 작업을 하는 프레임워크인가?
라는 의문으로 처음에 시작했다.
컨트롤러에서부터 진정한 로직 시작인데
그전에 인증, 인가 관련되서 필요시 세팅을 해준다.
서블릿 단에서 시큐리티에서 만들어준 수많은 필터들이 동작한다.
스프링 시큐리티 기술을 필터에서 구현한다.
securityFilterChain메서드를 통해
설정을 하면
설정과 관련된 스프링 시큐리티 필터들이 알아서 동작한다.
즉, 어떤 필터들을 사용할 건지
해당 필터에서는 어떤 값을 개발자가 넣어줄건지 역할을 하는 메서드이다.
doFilter()가 Filter인터페이스의 메서드 중 하나인데,
내가 이 추상 메서드를 구현해서
로그인 API에서 인증에 대해 할 때 사용한다.
인가(어떤 권한을 가진 유저는 특정 api에 접속할 수 있도록 하는 것)는 로그인 후 토큰을 통해서 하기 때문에
securityFilterChain에서 antMathchers로 하면 되는 것이다.
정리하자면, 토큰이 있어야 로그인 가능. 인가는 로그인한 유저의 권한과 securityFilterChain에 설정한 값과 매칭하여 비교.
스프링 시큐리티는 웹 어플리케이션의 보안을 관리하는 프레임워크로
필터 기반의 구조를 가지고 있어
요청이 들어올 때 여러 단계의 필터를 거쳐 최종적으로 컨트롤러에 도달하게 된다.
스프링 시큐리티를 쉽게 설명하면
1) 안전한 인증 시스템 : 스프링 시큐리티는 사용자의 아이디와 비밀번호를 안전하게 처리하며, 다양한 인증 방식(폼 인증, OAuth, JWT 등)을 지원한다.
2) 권한 관리 : 사용자의 권한을 통해 어떤 사용자가 어떤 자원에 접근할 수 있는지를 결정할 수 있다.
3) 필터 기반 구조 : 요청이 들어오면 여러 필터를 거쳐 인증과 인가 과정을 거친다.
4) 세션 관리 : 사용자의 세션을 관리하며, 세션이 만료되면 자동으로 로그아웃 처리를 할 수 있다.
5) CSRF 방지 : 웹 어플리케이션의 보안 위협 중 하나인 CSRF 공격을 방지하기 위한 기능을 제공한다.
6) 비밀번호 암호화 : 사용자의 비밀번호를 안전하게 암호화하여 저장하며, 다양한 암호화 방식을 지원한다.
간단히 말해, 스프링 시큐리티는 웹 어플리케이션의 보안을 철저하게 관리하기 위한 도구로,
사용자 인증부터 권한 관리, 세션 관리, CSRF 방지 등 다양한 보안 기능을 제공한다.
필터 기반의 구조를 통해 요청이 들어올 때마다 이러한 보안 기능을 순차적으로 적용하여 웹 어플리케이션을 보호한다.
'개인 공부 (23.07~' 카테고리의 다른 글
제네릭타입 - 메서드에서 사용하기 (1) | 2023.10.27 |
---|---|
[프로젝트 문제 해결] 생성자 주입. 기본 생성자가 왜 안되지? 순환참조 발생 (0) | 2023.10.24 |
[스프링 싱글톤 스코프] 생성자 주입 방법, @Autowired, 객체 불변성 무엇? (1) | 2023.10.18 |
스프링 싱글톤 빈 라이프사이클, @PostConstruct (0) | 2023.10.17 |
스프링 빈 등록, DI, IoC 궁금증 해결 (1) | 2023.10.16 |