SECURITY FILTER란?
개발자가 별도로 설정 가능한, 스프링의 핵심인 확장성을 적용시키는 개념이다.
이와 같이, 모든 FITLER들은 FILTER를 구현해야한다.
들어오고, 나오는 것을 FILTERING하는 것을 SECURITY FILTER라고 한다.
모든 FILTER의 핵심 기능은 doFILTER안에 있다.
REQUEST -> |필터| -> CONTROLLER -> |필터| -> RESPONSE와 같은 구조
해당 과정을 디버깅하면, WEBPROXYFILTER부터 기타 등등 FILTER(총 13개가 나왔다) 들이 모두 작동.
FILTER와 FILTER간에, 사용자 설정 FILTER를 삽입할 수 있다.
필터의 예시들을 보자
1. SECURITYCONTEXTPERSISTENCEFILTER는 , 보통 두번째로 실행되는 필터이다.
SecurityContext (앞 page에 해당 내용을 정리해 두었다. 인증을 위한 다양한 정보들을 포함하는 Context)
사용자가 로그인 이후, 다른 페이지를 누르면 그 사용자가 해당 페이지를 또 누른것을 어떻게 인증하는가?
HTTPSession의 개념이 사용된다.
cookie의 개념을 기억하는가? (http의 non persistent를 해결하기 위해 고안된 개념)
이 cookie가, 로그인 이후 -> cookie를 받고 -> 다른 페이지를 눌렀을때(cookie와 함께 전송) -> 사용자임이 확인 -> 해당 페이지 감상 과 같은 방식으로도 사용된다.
2. BasicAuthenticationFilter
위와 같이 권한이 없는 페이지에 url로써 접근하려 하면, 이렇게 자동으로 로그인 페이지로 연결된다.
이렇게 하지 않을 수 있을까?
기존 httpsecurity.httpBasic().disable()을 사용했으나, 이를 httpsecurity().httpbasic()으로 변경시 변경 가능하다.
이와 같이 별도로 로그인을 하지 않아도, 모든 요청마다 user과 pw을 포함하여 전송하고, 이를 BasicAuthenticationFilter가 인증해주는 방식을 사용할 수 있다.
이방식은 알아차렸겠지만, session과는 반대되는 개념이다. 즉 stateless하지 않고 계속해서 본인의 id와 pw를 요청에 추가하는 방식인데, 해당 방식은 본문에 드러날 위험이 있으므로, 반드시 tls를 활용한 https를 같이 사용하길 권장한다.
3. UsernamePasswordAuthenthicationFilter
form 데이터로, username,password 기반의 인증을 담당하는 필터.
즉, 로그인 버튼을 눌렀을때 적용되는 필터이다. userdetailsservice를 user가 implements받아서 사용했는데, 이러한 정보를 인증하고, 해당 사용자의 정보가 문제는 없는지를 확인한다.
4. CSRFILTER
CSRF ATTACK을 방지한다.
CSRF ATTACK이란, 사용자가 위조된 페이지에 접근하고, 위조된 페이지에서 정상 페이지에 사용자 정보를 활용하여 송급 요청 등을 보내는 것을 의미한다.
CSRF ATTACK을 막으려면, 송금서버와 사용자는 정보를 보낼때, CSRF TOKEN을 함께 보낸다.
(악의적인 페이지에는, CSRF TOKEN이 존재하지 않는다. ) 이 개념이 보호의 핵심이다
THYMELEAF는, 자동으로 CSRF TOKKEN을 생성해준다. (허나 가려져 있다)
**기본적인 설정이 SPRING SECURITY 6에 따라 변화되었다.
5. REMEMBERMEAUTHENTICATIONFILTER
일반적인 세션보다 더 오래, 로그인 사실을 기억할 수 있게 해주는 것.
로그인시 2개의 (JSESSION ID, 그리고 REMEMBER ME) 쿠키가 생성되며, JSESSION ID가 사라져도 REMEBER ME가 남아있다면 JSESSION COOKIE가 다시 생성된다. ++ CHROME을 제거해도, 해당 COOKIE가 남아있다.
*주의사항 -> SERVER자체를 껏다 키면, 로그아웃이 된다.
**..또 6.1에 맞추어 변경되었다. 세부 설정을 위하려면 lambda식을, 그렇지 않다면
http.rememberMe(Customizer.withDefaults());
로 기본 설정을 할 수 있다.
6. ExceptionTranslationFilter
인증과 인가에 실패하였을때 authenication or accessdenied exception이 발생한다.
해당 exception의 후처리를 어떻게 할까? 인증 실패시는 기본적으론 로그인 페이지로 이동, 인가 실패시에는 whitelabe error page(status 403)형태로 발생한다.
즉 Exception Handler의 역할을 하는 FIlter라고 볼 수 있다.
'백엔드 > Spring Security' 카테고리의 다른 글
Spring Security Config (0) | 2024.01.11 |
---|---|
Spring Security 구조와 내부 (0) | 2024.01.11 |
SPRING SECURITY란? (0) | 2024.01.08 |