Programming/Java

Spring Security Filter Chain 설명

armyost 2023. 9. 6. 10:04
728x90

Spring Security는 인증,인가에 대해 개발자가 필요한 로직을 대부분 구현해 놓았다고 보면 된다. 웬만한 인증인가에 필요한 로직이 다 있음. 따라서 적극적으로 사용하는 것이 문명의 혜택을 누리는 것이라 생각한다.

 

https://docs.spring.io/spring-security/site/docs/current/api/org/springframework/security/config/annotation/web/builders/HttpSecurity.html

 

필터설명

SecurityContectPersistenceFilter SecurityContexRepository에서 SecurityContext를 로드하고 저장하는 일을 담당함.
LogoutFilter 로그아웃 URL로 지정된 가상URL에 대한 요청을 감시하고 매칭되는 요청이 있으면 사용자를 로그아웃시킴.
UsenamePasswordAuthenticationFilter 사용자명과 비밀번호로 이뤄진 폼 기반 인증에 사용하는 가상URL요청을 감시하고 요청이 있으면 사용자의 인증을 진행함.
DefaultLoginPageGeneratingFilter 폼기반 또는 OpenID 기반 인증에 사용하는 가상URL에 대한 요청을 감시하고 로그인 폼 기능을 수행하는데 필요한 HTML을 생성함.
BasicAuthenticationFilter HTTP 기본인증 헤더를 감시하고 이를 처리함.
RequestCacheAwareFilter 로그인 성공 이후 인증 요청에 의해 가로채어진 사용자의 원래 요청을 재구성하는데 사용됨.
SecurityContextHolderAwareRequestFilter HttpServeltRequest를 HttpServletRequestWrapper를 상속하는 하위 클래스로 감싸서 필터 체인상 하단에 위치한 요청 프로세서에 추가 컨텍스트를 제공함.
AnonymousAuthenticationFilter 이 필터가 호출되는 시점까지 사용자가 아직 인증을 받지 못했다면 요청 관련 인증 토큰에서 사용자가 익명 사용자로 나타나게됨.
SessionManagementFilter 인증된 주체를 바탕으로 세션 트래킹을 처리해 단일 주체와 관련한 모든 세션들이 트래킹되도록 도움.
ExceptionTranslationFilter 이 필터는 보호된 요청을 처리하는 동안 발생할 수 있는 기대한 예외의 기본 라우팅과 위임을 처리함.
FilterSecurityInterceptor 이 필터는 권한부여와 관련한 결정을 AccessDecisionManag

 

 

http 접근 권한 설정 Method

http.authorizeRequests()
    .antMatchers("/member/**").authenticated()
    .antMatchers("/admin/**").authenticated()
    .antMatchers("/**").permitAll();
authorizeRequests() HttpServletRequest 요청 URL에 따라 접근 권한을 설정합니다.
antMatchers("pathPattern") 요청 URL 경로 패턴을 지정합니다.
authenticated() 인증된 유저만 접근을 허용합니다.
hasAuthority() or hasAnyAuthority() 특정 권한을 가지는 사용자만 접근할 수 있습니다.
permitAll() 모든 유저에게 접근을 허용합니다.
anonymous() 인증되지 않은 유저만 허용합니다.
denyAll() 모든 유저에 대해 접근을 허용하지 않습니다.

 

http 로그인 설정 Method

http.formLogin()
    .loginPage("/login")
    .defaultSuccessUrl("/")
    .permitAll();
formLogin() form Login 설정을 진행합니다.
loginPage("path") 커스텀 로그인 페이지 경로와 인증 경로를 등록합니다.
defaultSeuccessUrl("path") 로그인 인증을 성공하면 이동하는 페이지를 등록합니다.
successHandler(AuthenticationSuccessHandler) 로그인 인증을 성공하면 실행할 로직 객체로 상속받아 설정합니다.

 

 

http 로그아웃 설정 Method

http.logout()
    .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
    .logoutSuccessUrl("/login")
    .invalidateHttpSession(true);
logout() 로그아웃 설정을 진행합니다.
logoutRequestMatcher(new AntPathRequestMatcher("path")) 로그아웃 경로를 지정합니다.
logoutSuccessUrl("path") 로그아웃 성공 시 이동할 경로를 지정합니다.
invalidateHttpSession(true) 로그아웃 성공 시 세션을 제거합니다.