SpringSecurity(1. 구조 & 필터)

Walker·2021년 6월 14일
0

SpringSecurity

목록 보기
1/4

JWT로 로그인 구현 예제들을 몇개 만들어보았지만
결국 SpringSecurity를 모르고 JWT를 쓴다는 것은
요리법은 모르는데 조리도구만 다룰 줄 아는 것과 같다는 생각이 들었다.

SpringSecurity는 생각보다 공부가 어려웠다.
구글링을 해서 블로그 글을 봐도 뭔지 확실히 모르겠고
도 번역된 것(스프링 시큐리티 3)은 1권 정도만 유명한 것으로 알고 있다.
공식 문서를 보자니 영어 공부를 더 해야 겠다는 생각이...
그래서 패스트캠퍼스 강의를 듣고 있는데 흐름이 공식 문서와 비슷해서
강사님이 공식 문서를 참고해서 만드신게 아닌가 싶다.

SpringSecurity의 가장 중요한 기능 2가지는 인증 처리인가(권한) 처리이다.
인증은 접속을 시도하는 User가 유효한 User인지를 검증하는 것이고
인가인증 받은 User가 어떠한 사용 권한(기능, 자원)을 가지고 있는지 검증하는 것이다.

사용자의 Request서블릿 컨테이너(톰캣 등)에서 크게 4군데를 거치게 된다.

1. Filter
2. Servlet(Dispatcher Servlet)
3. Controller
4. Method

이중에서 SpringSecurity는 가장 처음인 Filter에 해당하는 기술이다.

이러한 Filter는 하나일 필요없이 여러개가 가능하며
개발자의 의도에 따라 다양한 분기가 가능하다.
("/api/**"로 들어오는 요청은 A 필터, "/admin/**"로 들어오는 요청은 B 필터)

이러한 필터 등은 위와 같이 다양한데
각 필터들은 역할이 각각 다르고 상황에 따라 활용하면 된다.
(JWT 예제 코드들에서 저것들이 뭔지 모르니 답답했다...)

위 필터들에 대한 간략한 설명들인데
하나하나 외우기보다는 쓰면서 자주 쓰는 것들을 제외하고
필요할 때 찾아보는 형식이 좋을 듯 하다.

@EnableWebSecurity 어노테이션을 WebSecurityConfigurerAdapter를 상속받은
SecurutyConfig(이름은 마음대로)에 달아주면 SpringSecurity가 작동하고
Console에 보이는 것처럼 filter들이 사용된다.(debug = true 옵션을 줘야 보인다.)

위와 같이 원하지 않는 filter들을 disable() 처리해주면
더 이상 filter로 기능하지 않는다.

WebSecurityConfigurerAdapterconfigure 메소드는
http 파라미터를 바탕으로 다양한 SpringSecurity 설정을 담당하며
이중 antMatcher()는 어떤 형식의 요청을 검증할 것인가를 지정한다.

http.antMatcher("/**").permitAll() // 모든 요청을 허가한다.

위에서 다양한 필터 조합들을 쓸 수 있다고 했는데
그에 따라 필요한 적용의 우선순위
@Order 어노테이션으로 정할 수 있다.(1 > 2 > 3... 순으로 적용)

SpringSecurity를 공부하면서 뭔가 막연하고 방대한 느낌이라 어려웠는데
다른 글들에서 SpringSecurity가 Spring에서 쉽지 않은 부분이란 글을 읽고
조금 위안을 얻었다. (계속하다보면 어느정도 보이겠지?!)

그럼 다음은 SpringSecurity를 활용한 login을 살펴보며
이를 통해 인증을 좀 더 이해해보자!

profile
I walk slowly, but I never walk backward. -Abraham Lincoln-

0개의 댓글