일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- tasklet
- Spring Batch
- axios
- cheerio
- OpenStack
- SWAGGER
- 리액트
- SpringBoot
- AuthenticatoinProvide
- Spring Security
- Reduxpender
- T-OTP
- Spring REST Docs
- gradle
- REACT
- JavaScript
- Pender
- SpringRESTDocs
- UsernamePasswordAuthenticationFilter
- MSA
- MFA
- vue
- Filter
- Crawling
- vuejs
- openapi3
- Flyway
- preventdefault
- cloud native
- stopPropogation
- Today
- Total
Miracle Morning, LHWN
18-1. Spring Security 에 대해 (1) 본문
대부분의 시스템에서는 회원관리를 하고 있고, 이에 따라 인증(Authentication) 과 인가(Authorization) 에 대한 처리를 해주어야 한다.
Spring 에서는 Spring Security 라는 별도의 프레임워크에서 관련된 기능을 제공하고 있다.
Spring Security
Spring Security 는 Spring 기반의 애플리케이션의 보안 (인증과 권한, 인가 등) 을 담당하는 스프링 하위 프레임워크이다.
Spring Security 는 '인증'과 '권한'에 대한 부분을 Filter 흐름에 따라 처리하고 있다. Filter 는 Dispatcher Servlet 으로 가기 전에 적용되므로 가장 먼저 URL 의 요청을 받지만, Interceptor 는 Dispatcher 와 Controller 사이에 위치한다는 점에서 적용 시기의 차이가 있다.
Spring Security 는 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에 개발자 입장에서는 일일이 보안관련 로직을 작성하지 않아도 된다는 장점이 있다.
Filter of Spring Security
웹 서비스에서 Spring Security 는 MVC 패턴 이전에 'Filter' 로서 동작한다. Filter 란 클라이언트 요청이 Servlet 으로 가기 전에 먼저 처리할 수 있도록 톰캣 (WAS) 에서 지원해주는 기능이다. 따라서 설정 또한 톰캣 설정 파일인 web.xml 파일에 해주며, web.xml 파일은 톰캣이 구동되는 시점에 알고 있어야 하는 정보를 넣어주는 설정 파일이다.
- Spring Security 에서 Filter 는 기본적으로 Servlet Engine 의 Filter 인터페이스를 상속하게 된다.
- 외에도 Spring Security 에서 여러 Filter 관련 인터페이스를 제공하고 있다.
- (예) UsernamePasswordAuthenticationFilter : 사용자ID 와 비밀번호를 통한 인증
Spring Security 의 Servlet 은 Servlet Filter (javax.servlet) 를 기반으로 하고 있기 때문에 필터의 역할을 살펴보는 것이 중요하다.
아래 그림은 하나의 HTTP 요청 (Request) 에 대한 일반적인 Filter 계층을 보여주고 있다.
URI 경로를 기반으로 HttpServletRequest 를 처리하는 필터는 서블릿을 포함하는 필터 사슬 (Filter Chain) 을 만든다.
Spring MVC 어플리케이션에서 서블릿 (Servlet) 이라 함은 DispatcherServlet 을 말하며, 서블릿은 HttpServletRequest, HttpServletResponse 를 처리함에 있어 하나 이상의 Filter 가 사용 (= 필터 사슬:Filter Chain) 되어 HttpServletRequest, HttpServletResponse 를 수정한다.
UsernamePasswordAuthenticationFilter
http/form-login 을 지원하는 즉 Form data 를 기반으로 인증을 지원하기 위해 제공되는 Filter 이다.
기본적으로 Http Security 에 formLogin() 을 설정함으로써 활성화되며, UserDetail 과 UserDetailsService 를 활용하여 인증한다.
# UsernamePasswordAuthenticationFilter Flow
Spring Security 에서 제공하는 WebSecurityConfigureAdapter 에 다양한 설정을 통하여 웹 화면을 통해서 전송되는 Form data 의 username, password 를 데이터베이스에 저장된 (또는 다양한 방식으로 저장된) 사용자 정보와 비교하게 된다.
Custom Spring Security
# Authentication Provider Custom : Authentication Provider 을 상속하여 필요에 맞게 수정 및 개발을 한다.
# Filter Custom : UsernamePasswordAuthentication Filter 를 상속하고 수정한다. 그리고 Filter 를 수정하여 시스템 전반의 URL 요청에 대한 인증을 점검한다.
출처 :
https://mangkyu.tistory.com/76
https://codevang.tistory.com/275
'IT 기술 > [JAVA] Spring Boot' 카테고리의 다른 글
18-2. Spring Security 에 대해 (2) (0) | 2021.06.15 |
---|---|
19. Spring Security 를 활용하여 OpenStack 연동해보기 (0) | 2021.06.02 |
17. MSA 와 JWT (1) | 2021.05.31 |
16-2. Spring REST Docs - 실제 사용해보기 (0) | 2021.05.29 |
16-1. Spring REST Docs - 실제 사용해보기 (0) | 2021.05.28 |