SPRING/SPRING SECURITY(20)
-
Spring Security - 다중 설정 클래스
설정 클래스가 두 개 이상이면 어떻게 동작할까? Spring Security는 설정 클래스가 여러개이면 각 설정 클래스마다 필터들을 만들고 FilterChainProxy가 관리하는 SecurityFilterChains에 등록하게 된다. 이렇게 등록할 때, 각 클래스에 @Order(0) 어노테이션을 설정해줘서 등록 순서를 분명하게 해줘야한다. 등록 순서대로 보안처리가 적용이 되기 때문에, 큰 범위의 URL은 구체적인 범위의 설정 클래스보다 순서가 뒤에 있어야한다. 클라이언트로부터 요청이 오면 FilterChainProxy는 요청정보에 매칭되는 설정 클래스의 필터를 찾아 필터들을 실행하게 된다.
2021.04.16 -
Spring Security - Security 아키텍처, DelegatingFilterProxy, FilterChainProxy
서블릿 Filter 서블릿이 호출되기 전, 후로 공통 로직을 수행하는 역할을 한다. 하지만 서블릿 영역이기 때문에 스프링빈을 사용할 수 없다. Spring Security는 MVC영역(Dispatcher Servlet)의 앞에서 보안 처리를 해야하기 때문에, Filter에서 스프링빈을 사용하여 보안 처리를 해야했다. DelegatingFilterProxy 서블릿 컨테이너에서 스프링 컨테이너로 보안처리를 위임하는 역할을 한다. 서블릿 영역의 Filter에서 스프링빈을 사용할 수 없기 때문에 서블릿 영억의 Filter로 등록된 DelegatingFilterProxy가 스프링 영역의 springSecurityFilterChain 이름의 스프링빈을 찾아 보안처리를 위임한다. 이 스프링빈이 FilterChainP..
2021.04.16 -
Spring Security - CsrfFilter
CSRF(사이트간 요청 위조) 사용자가 쇼핑몰의 세션쿠키를 가지고 있기 때문에, 공격용 페이지에서 사용자 의도와는 상관없이 POST, PUT, PATCH, DELETE 요청이 전송될 수 있다. CsrfFilter CsrfFilter는 사용자에게 CSRF토큰을 발급해주고, 사용자가 POST, PUT, PATCH, DELETE 요청을 할 때, CSRF토큰을 가져와야 승인을 해주는 필터이다. Spring Security에서는 기본적으로 CSRF기능이 활성화 되어있다. http.csrf(): CSRF기능 활성화 http.csrf().disabled(): CSRF기능 비활성화
2021.04.16 -
Spring Security - 인증, 인가 예외 ExceptionTranslationFilter, AuthenticationException, AccessDeniedException
ExceptionTranslationFilter Spring Security는 두 가지 예외를 다룬다. AuthenticationException - 인증 예외, 인증에 실패할 경우 발생 AccessDeniedException - 인가 예외, 인가에 실패할 경우 발생 사용 예제 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 protected void configure(HttpSecurity http) throws Exception { http.exceptionHandling() .authenticationEntryPoint(new AuthenticationEntryPoint() { @Override public void commence(HttpServletRequest htt..
2021.04.16 -
Spring Security - 인가 API, URL 방식
사용 예제 1 2 3 4 5 6 7 8 9 10 11 12 @Override protected void configure(HttpSecurity http) throws Exception { http .antMatcher(“/shop/**”) .authorizeRequests() .antMatchers(“/shop/login”, “/shop/users/**”).permitAll() .antMatchers(“/shop/mypage”).hasRole(“USER”) .antMatchers("/shop/admin/pay").access("hasRole('ADMIN')") .antMatchers("/shop/admin/**").access("hasRole('ADMIN') or hasRole(‘SYS ')") .an..
2021.04.16 -
Spring Security - 세션 생성 정책, SessionCreationPolicy
사용 예제 1 http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED); cs 정책 종류 SessionCreationPolicy. Always : 스프링 시큐리티가 항상 세션 생성 SessionCreationPolicy. If_Required : 스프링 시큐리티가 필요 시 생성(기본값) SessionCreationPolicy. Never : 스프링 시큐리티가 생성하지 않지만 이미 존재하면 사용 SessionCreationPolicy. Stateless : 스프링 시큐리티가 생성하지 않고 존재해도 사용하지 않음
2021.04.15