Spring Security Architecture 구성요소
Filters
public interface Filter{ // 필터 객체 초기화 및 서비스 추가하기 위한 메소드 // 웹 컨테이너가 처음에 init 메소드를 호출, 이후부터는 doFilter를 통해 처리 public default void init(FilterConfig filterConfig) throws ServletException; // url-pattern에 맞는 모든 HTTP 요청이 디스패처 서블릿으로 전달되기전 웹 컨테이너에 의해 실행되는 메소드 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException; // 필터 객체를 서비스에서 제거하고 사용하는 자원을 반환하기 위한 메소드 public default void destroy(); }
DelegatingFilterProxy
FilterChainProxy
SecurityFilterChain
FilterChaniProxy가 요청에 따라 어떤 필터 체인을 실행시켜야할지 파악
SecurityFilterChain 안의 SecurityFilter는 스프링 빈
SecurityFilter는 DelegatingFilterProxy가 아닌 FilterChainProxy에 등록됨
SecurityFilter를 FilterChainProxy에 등록하는 이유
여러 SecurityFilterChain이 있을 경우
SecurityFilters
Handling Security Exception
// 접근 가능한 권한이 하나일 때 @Secured("ROLE_ADMIN") public String Method(String param){ return returnValue; } // 접근 가능한 권한이 여러개일 때 @Secured({"ROLE_ADMIN", "ROLE_USER"}) public String Method(String param){ return returnValue; }
@PreAuthorize("hasRole('권한')") @GetMapping("경로") public String ControllerMethod(Param){ ... } @PostAuthorize("hasRole('권한')") @GetMapping("경로") public String ControllerMethod(Param){ ... }